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
+ */
[email protected]({
+    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>


Reply via email to