You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2012/12/18 17:07:49 UTC
svn commit: r1423504 - in /sis/branches/JDK7:
sis-referencing/src/test/java/org/apache/sis/test/
sis-referencing/src/test/java/org/apache/sis/test/suite/ src/main/docbook/fr/
Author: desruisseaux
Date: Tue Dec 18 16:07:48 2012
New Revision: 1423504
URL: http://svn.apache.org/viewvc?rev=1423504&view=rev
Log:
Added a test suite for the referencing module.
Added:
sis/branches/JDK7/sis-referencing/src/test/java/org/apache/sis/test/
sis/branches/JDK7/sis-referencing/src/test/java/org/apache/sis/test/suite/
sis/branches/JDK7/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java (with props)
Modified:
sis/branches/JDK7/src/main/docbook/fr/geoapi.xml
Added: sis/branches/JDK7/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java?rev=1423504&view=auto
==============================================================================
--- sis/branches/JDK7/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java (added)
+++ sis/branches/JDK7/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java Tue Dec 18 16:07:48 2012
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.test.suite;
+
+import org.apache.sis.test.TestSuite;
+import org.junit.runners.Suite;
+
+
+/**
+ * All tests from the {@code sis-utility} module, in approximative dependency order.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @since 0.3
+ * @version 0.3
+ * @module
+ */
+@Suite.SuiteClasses({
+ org.apache.sis.geometry.AbstractDirectPositionTest.class,
+ org.apache.sis.geometry.GeneralDirectPositionTest.class,
+ org.apache.sis.geometry.DirectPosition1DTest.class,
+ org.apache.sis.geometry.DirectPosition2DTest.class,
+ org.apache.sis.geometry.AbstractEnvelopeTest.class,
+ org.apache.sis.geometry.GeneralEnvelopeTest.class,
+ org.apache.sis.geometry.ImmutableEnvelopeTest.class,
+ org.apache.sis.geometry.Envelope2DTest.class
+})
+public final strictfp class ReferencingTestSuite extends TestSuite {
+}
Propchange: sis/branches/JDK7/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sis/branches/JDK7/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: sis/branches/JDK7/src/main/docbook/fr/geoapi.xml
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/src/main/docbook/fr/geoapi.xml?rev=1423504&r1=1423503&r2=1423504&view=diff
==============================================================================
--- sis/branches/JDK7/src/main/docbook/fr/geoapi.xml (original)
+++ sis/branches/JDK7/src/main/docbook/fr/geoapi.xml Tue Dec 18 16:07:48 2012
@@ -517,6 +517,79 @@ public class MyApplication {
}
}</programlisting>
</example>
+
+ <section>
+ <title>Fournir sa propre implémentation</title>
+ <para>
+ Implémenter soi-même GeoAPI nâest pas si difficile si on se contente de besoins bien précis.
+ Un développeur peut se concentrer sur une poignée dâinterfaces parmi les centaines de disponibles,
+ tout en disposant des autres interfaces comme autant de points dâextensions à éventuellement implémenter
+ au gré des besoins.
+ </para>
+ <para>
+ Le modèle conceptuel représenté par les interfaces est complexe. Mais cette complexité peut être réduite
+ en combinant certaines interfaces. Par exemple plusieurs bibliothèques, même réputées, ne font pas la distinction
+ entre <quote>Système de coordonnées</quote> et <quote>Système de référence des coordonnées</quote>.
+ Un développeur qui lui non-plus ne souhaite pas faire cette distinction peut implémenter ces deux interfaces par la même classe.
+ Il peut en résulter une implémentation dont la hiérarchie de classes est plus simple que la hierarchie des interfaces de GeoAPI.
+ Le module <literal role="GeoAPI">geoapi-examples</literal>, discuté plus loin, fournit de telles combinaisons.
+ Le tableau suivant énumère quelques combinaisons possibles:
+ </para>
+ <table frame="none">
+ <title>Exemples dâinterfaces pouvant être combinées par une même classe à lâimplémentation</title>
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>Interface principale</entry>
+ <entry>Interface auxiliaire</entry>
+ <entry>Usage</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><classname role="GeoAPI">CoordinateReferenceSystem</classname></entry>
+ <entry><classname role="GeoAPI">CoordinateSystem</classname></entry>
+ <entry>Description dâun système de référence spatial (<acronym>CRS</acronym>).</entry>
+ </row>
+ <row>
+ <entry><classname role="GeoAPI">GeodeticDatum</classname></entry>
+ <entry><classname role="GeoAPI">Ellipsoid</classname></entry>
+ <entry>Description dâun référentiel geodétique.</entry>
+ </row>
+ <row>
+ <entry><classname role="GeoAPI">CoordinateOperation</classname></entry>
+ <entry><classname role="GeoAPI">MathTransform</classname></entry>
+ <entry>Opération de transformation de coordonnées.</entry>
+ </row>
+ <row>
+ <entry><classname role="GeoAPI">IdentifiedObject</classname></entry>
+ <entry><classname role="GeoAPI">ReferenceIdentifier</classname></entry>
+ <entry>Objet (typiquement un <acronym>CRS</acronym>) que lâon peut identifier par un code.</entry>
+ </row>
+ <row>
+ <entry><classname role="GeoAPI">Citation</classname></entry>
+ <entry><classname role="GeoAPI">InternationalString</classname></entry>
+ <entry>Référence bibliographique composée dâun simple titre.</entry>
+ </row>
+ <row>
+ <entry><classname role="GeoAPI">GeographicBoundingBox</classname></entry>
+ <entry><classname role="GeoAPI">Extent</classname></entry>
+ <entry>Ãtendue spatiale en degrés de longitude et de latitude.</entry>
+ </row>
+ <row>
+ <entry><classname role="GeoAPI">ParameterValue</classname></entry>
+ <entry><classname role="GeoAPI">ParameterDescriptor</classname></entry>
+ <entry>Description dâun paramètre (nom, type) associée à sa valeur.</entry>
+ </row>
+ <row>
+ <entry><classname role="GeoAPI">ParameterValueGroup</classname></entry>
+ <entry><classname role="GeoAPI">ParameterDescriptorGroup</classname></entry>
+ <entry>Description dâun ensemble de paramètres associés à leurs valeurs.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </section>
</section>
@@ -712,11 +785,91 @@ public class MyTest {
Toutes les classes de tests portent un nom se terminant en "<literal>Test</literal>".
En outre, une classe <literal role="GeoAPI">org.opengis.test.TestSuite</literal> englobe lâensemble
de toutes les classes de tests définies dans le module <literal role="GeoAPI">geoapi-conformance</literal>.
- La façon la plus simple dâexécuter lâensemble de ces tests est donc de créer une sous-classe de
+ Une façon dâexécuter lâensemble de ces tests est donc de créer une sous-classe de
<literal role="GeoAPI">TestSuite</literal>, éventuellement y placer un bloc statique effectuant
une configuration des validateurs comme dans lâexemple précédent, et dâhériter les tests définis dans GeoAPI.
</para>
+ <para>
+ Apache SIS hérite des classes <literal role="GeoAPI">*Test</literal> de GeoAPI au cas-par-cas,
+ dans les modules appropriées. La classe <literal role="GeoAPI">TestSuite</literal> sera plutôt
+ utilisée dans un test dâintégration englobant lâensemble des modules de SIS.
+ Lâexemple ci-dessous donne un exemple de test de GeoAPI personnalisé.
+ La <link xlink:href="http://www.geoapi.org/geoapi-conformance/apidocs/org/opengis/test/referencing/ParameterizedTransformTest.html">Javadoc
+ de la classe parente</link> documente en détails les tests effectués.
+ Dans cet exemple, un seul test est modifié et tous les autres tests sont hérités tels quels
+ (il nâest pas nécessaire de les répéter dans la sous-classe).
+ Toutefois, cet exemple ajoute une vérification supplémentaire, annotée <literal>@After</literal>,
+ qui sera exécutée après chacun des tests.
+ </para>
+ <example>
+ <title>Hériter des tests de GeoAPI</title>
+ <programlisting language="java">import org.junit.*;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.opengis.test.referencing.ParameterizedTransformTest;
+import static org.junit.Assert.*;
+
+@RunWith(JUnit4.class)
+public class MyTest extends ParameterizedTransformTest {
+ /**
+ * Spécifie aux tests de GeoAPI notre propre fabrique de transformations de coordonnées.
+ * GeoAPI testera les objets construits par cette fabrique.
+ */
+ public MyTest() {
+ super(new MyMathTransformFactory());
+ }
+
+ /**
+ * Modifie le comportement dâun test. Cet exemple assouplit un peu les exigences de ce test,
+ * en acceptant des erreurs jusquâà 10 centimètres plutôt que la valeur par défaut de 1 cm.
+ * Ce changement ne sâapplique quâà cette méthode est nâaffecte pas les autres tests hérités.
+ */
+ @Test
+ @Override
+ public void testLambertAzimuthalEqualArea() throws FactoryException, TransformException {
+ tolerance = 0.1; // Tolérance de 10 cm.
+ super.testLambertAzimuthalEqualArea();
+ }
+
+ /**
+ * Vérification supplémentaire effectuée après chaque test, hérité ou non.
+ * Dans cet exemple, nous vérifions que la transformation qui a été testée
+ * travaillait bien dans des espaces bi-dimensionnels.
+ */
+ @After
+ public void ensureAllTransformAreMath2D() {
+ assertTrue(transform instanceof MathTransform2D);
+ }
+}</programlisting>
+ </example>
</section>
</section>
+ <section>
+ <title>Les modules dâexemples</title>
+ <para>
+ Le module <literal role="GeoAPI">geoapi-examples</literal> fournit des exemples dâimplémentations simples.
+ Plusieurs de ces classes implémentent plus dâune interface à la fois afin de proposer un modèle conceptuel plus simple.
+ La <link xlink:href="http://www.geoapi.org/geoapi-examples/apidocs/overview-summary.html">Javadoc de ce module</link>
+ énumère les paquets et classes clés avec les combinaisons effectuées.
+ Ce module illustre non-seulement comment GeoAPI peut-être implémenté, mais aussi comment lâimplémentation
+ peut être testée en utilisant <literal role="GeoAPI">geoapi-conformance</literal>.
+ </para>
+ <para>
+ Bien que sa mission première soit de servir dâinspiration aux implémenteurs,
+ <literal role="GeoAPI">geoapi-examples</literal> a tout-de-même été conçu de manière à être utilisable
+ par des applications ayant des besoins très simples. Tous les exemples étant dans le domaine publique,
+ les développeurs sont invités à adapter librement des copies de ces classes si nécessaires.
+ Toutefois si des modifications sont apportées hors du cadre du projet GeoAPI, le bon usage veut que les copies
+ modifiées soient placées dans un paquet portant un autre nom que <literal role="GeoAPI">org.opengis</literal>.
+ </para>
+ <para>
+ Pour des besoins un peu plus poussés, les développeurs sont invités à examiner les modules
+ <literal role="GeoAPI">geoapi-proj4</literal> et <literal role="GeoAPI">geoapi-netcdf</literal>.
+ Ces deux modules fournissent des exemples dâadaptateurs permettant dâutiliser, via les interfaces de GeoAPI,
+ une partie des fonctionnalités de bibliothèques externes (Proj.4 et NetCDF).
+ Lâavantage de passer par ces interfaces est de disposer dâun modèle unifié pour exploiter deux API très différents,
+ tout en se gardant la possibilité de basculer plus facilement à une autre bibliothèque si désiré.
+ </para>
+ </section>
</section>
</chapter>