Author: desruisseaux
Date: Thu May 26 17:05:43 2016
New Revision: 1745624

URL: http://svn.apache.org/viewvc?rev=1745624&view=rev
Log:
Group information about library independence and test suite in a single 
"Annexes" section.

Added:
    sis/site/trunk/book/en/annexes.html
      - copied, changed from r1745623, 
sis/site/trunk/book/en/implementation-independence.html
    sis/site/trunk/book/fr/annexes.html
      - copied, changed from r1745623, 
sis/site/trunk/book/fr/implementation-independence.html
Removed:
    sis/site/trunk/book/en/implementation-independence.html
    sis/site/trunk/book/en/test.html
    sis/site/trunk/book/fr/implementation-independence.html
    sis/site/trunk/book/fr/test.html
Modified:
    sis/site/trunk/book/en/body.html
    sis/site/trunk/book/fr/body.html
    sis/site/trunk/content/book/en/developer-guide.html
    sis/site/trunk/content/book/fr/developer-guide.html

Copied: sis/site/trunk/book/en/annexes.html (from r1745623, 
sis/site/trunk/book/en/implementation-independence.html)
URL: 
http://svn.apache.org/viewvc/sis/site/trunk/book/en/annexes.html?p2=sis/site/trunk/book/en/annexes.html&p1=sis/site/trunk/book/en/implementation-independence.html&r1=1745623&r2=1745624&rev=1745624&view=diff
==============================================================================
--- sis/site/trunk/book/en/implementation-independence.html (original)
+++ sis/site/trunk/book/en/annexes.html Thu May 26 17:05:43 2016
@@ -22,13 +22,14 @@
 
 <html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en">
   <head>
-    <title>Reduce direct dependency to Apache SIS</title>
+    <title>Annexes</title>
     <link rel="stylesheet" type="text/css" href="../book.css"/>
   </head>
   <body>
     <header>
-      <h1 id="reduce-direct-dependency">Reduce direct dependency to Apache 
SIS</h1>
+      <h1 id="annexes">Annexes</h1>
     </header>
+    <h2 id="reduce-direct-dependency">Reduce direct dependency to Apache 
SIS</h2>
     <p>
       Previous chapters used Apache SIS static methods for convenience.
       In some cases, usage of those convenience methods can be replaced by 
Java code using only GeoAPI methods.
@@ -38,7 +39,7 @@
       The following sections provide some tip for easing this task.
     </p>
 
-    <h2 id="UML-annotation-geoapi">Mapping Given by <code>@UML</code> 
Annotations</h2>
+    <h3 id="UML-annotation-geoapi">Mapping Given by <code>@UML</code> 
Annotations</h3>
     <p>
       For each class, method and constant defined by an <abbr>OGC</abbr> or 
<abbr>ISO</abbr> standard,
       GeoAPI indicates its provenance using annotations defined in the 
<code>org.opengis.annotation</code> package.
@@ -78,7 +79,7 @@ System.out.println("The GeoAPI interface
 
 
 
-    <h2 id="ServiceLoader">Fetching implementations of GeoAPI Interfaces</h2>
+    <h3 id="ServiceLoader">Fetching implementations of GeoAPI Interfaces</h3>
     <p>
       GeoAPI defines factories (<code>Factory</code>) that can create 
implementations of interfaces.
       For example, <code>DatumFactory</code> provides methods that can create 
instances which implement interfaces of the
@@ -113,7 +114,7 @@ public class MyApplication {
 
 
 
-    <h3 id="GeoAPI-simple">Defining Custom Implementations</h3>
+    <h4 id="GeoAPI-simple">Defining Custom Implementations</h4>
     <p>
       Implementing GeoAPI oneself in order to meet very specific needs is not 
difficult.
       A developer might concentrate on a handful of interfaces among the 
hundreds available,
@@ -175,9 +176,6 @@ public class MyApplication {
         <td>Description of a set of parameters associated with their 
values.</td>
       </tr>
     </table>
-
-
-
     <p id="GeoAPI-examples">
       The <code>geoapi-examples</code> module provides examples of simple 
implementations.
       Many of these classes implement more than one interface at a time in 
order to provide a simpler conceptual model.
@@ -201,5 +199,171 @@ public class MyApplication {
       The advantage of using these interfaces is to provide a unified model to 
operate two very different <abbr>API</abbr>s,
       while retaining the ability to switch easily to another library if 
desired.
     </p>
+
+
+
+    <h2 id="tests">Test suites</h2>
+    <p>
+      In addition to its own tests, Apache SIS uses tests defined by GeoAPI.
+      One advantages is that those tests provide an external source for the 
definition of expected results
+      (for example the numerical values of coordinates obtained after a map 
projection).
+      Such external source reduce the risk that some tests are actually 
anti-regression tests
+      instead of correctness tests.
+      Those tests can also be used by projects other than Apache SIS.
+    </p>
+    <p id="GeoAPI-conformance">
+      The <code>geoapi-conformance</code> module provides <i>validators</i>, a 
JUnit <i>test suite</i>, and <i>report generators</i>
+      in the form of <abbr title="Hypertext Markup Language">HTML</abbr> pages.
+      This module may be used with any GeoAPI implementation.
+      For developers of a geospatial library, it offers the following 
advantages:
+    </p>
+    <ul>
+      <li>Reduces the tedious task of writing tests by using existing 
tests.</li>
+      <li>Increases confidence in the validity of tests,
+        since <code>geoapi-conformance</code> has its own test suite and is 
applied to other implementations.</li>
+      <li>Facilitates comparison with other implementations.</li>
+    </ul>
+
+
+
+    <h3 id="GeoAPI-validators">Instance Validations</h3>
+    <p>
+      GeoAPI can validate an instance of its interfaces by checking that 
certain constraints are observed.
+      Many constraints can not be expressed in the method signature. Those 
constraints
+      are usually described textually in the abstract specifications or in the 
javadoc.
+    </p>
+    <div class="example"><p><b>Example:</b>
+      A coordinate conversion or transformation 
(<code>CC_CoordinateOperation</code>) may require a sequence of several steps.
+      In such a sequence of operations 
(<code>CC_ConcatenatedOperation</code>), for each step 
(<code>CC_SingleOperation</code>)
+      the number of output dimensions must equal the number of input 
dimensions in the next operation.
+      Expressed in Java, this constraint stipulates that for the entire index 
0 &lt; <var>i</var> &lt; <var>n</var> where <var>n</var>
+      is the number of operations, we have 
<code>coordOperation[i].targetDimensions == 
coordOperation[i-1].sourceDimensions</code>.
+    </p></div>
+
+    <p>
+      The easiest way to perform these verifications is to call the static 
methods <code class="GeoAPI">validate(…)</code>
+      of the <code>org.opengis.test.Validators</code> class.
+      As all of <code>Validators</code> methods bear the same name, it is 
enough to write “<code>validate(<var>value</var>)</code>”
+      and then let the compiler choose the most appropriate method for the 
type of object given in argument.
+      If the object type is not known at the time of compilation,
+      the <code class="GeoAPI">dispatch(Object)</code> method can be invoked 
for redirecting the work to the most appropriate <code 
class="GeoAPI">validate(…)</code> method.
+    </p>
+    <p>
+      All <code class="GeoAPI">validate(…)</code> functions follow a chain 
of dependencies,
+      meaning that they will also validate each component of the object to be 
validated.
+      For example, the validation of a <code>GeographicCRS</code> implies the 
validation of its component
+      <code>GeodeticDatum</code>, which itself implies the validation of its 
component <code>Ellipsoid</code>, and so on.
+      Thus it is unnecessary to validate the components explicitely, unless 
the developer wishes to isolate the test for a particular item known to cause 
problems.
+    </p>
+    <p>
+      By default, validations are as strict as possible. It is always possible 
to relax certain rules.
+      The most common is to tolerate the absence of attributes that would 
normally be mandatory.
+      This rule and a few others may be modified globally for all tests 
executed by the currently running <abbr title="Java Virtual Machine">JVM</abbr>,
+      as in the following example:
+    </p>
+
+<pre>import org.opengis.metadata.Metadata;
+import org.opengis.test.Validators;
+import org.junit.Test;
+
+public class MyTest {
+    /*
+     * Tolerate the absence of mandatory attributes in metadata and citation 
packages.
+     * This modification applies to all tests executed by the currently 
running <abbr>JVM</abbr>.
+     * If there are multiple test classes, this initialization may be performed
+     * in a parent class to all test classes.
+     */
+    static {
+        Validators.<code 
class="GeoAPI">DEFAULT.metadata.requireMandatoryAttributes</code> = false;
+        Validators.<code 
class="GeoAPI">DEFAULT.citation.requireMandatoryAttributes</code> = false;
+    }
+
+    @Test
+    public void testMyMetadata() {
+        Metadata myObject = …; // Create an object here.
+        Validators.<code class="GeoAPI">validate</code>(myObject);
+    }
+}</pre>
+
+    <p>
+      Rules may also be modified for a particular test suite without affecting 
the default configuration of the standard <abbr>JVM</abbr>.
+      This approach requires the creation of a new instance of the validator 
that we wish to modify the configuration.
+    </p>
+
+<pre>import org.opengis.metadata.Metadata;
+import org.opengis.test.ValidatorContainer;
+import org.junit.Test;
+
+public class MyTest {
+    private final ValidatorContainer validators;
+
+    public MyTest() {
+        validators = new ValidatorContainer();
+        validators.<code 
class="GeoAPI">metadata.requireMandatoryAttributes</code> = false;
+        validators.<code 
class="GeoAPI">citation.requireMandatoryAttributes</code> = false;
+    }
+
+    @Test
+    public void testMyMetadata() {
+        Metadata myObject = …; // Create an object here.
+        validators.<code class="GeoAPI">validate</code>(myObject);
+    }
+}</pre>
+
+
+
+    <h3 id="GeoAPI-tests">Executing Pre-defined Tests</h3>
+    <p>
+      JUnit tests are defined in the <code>org.opengis.test</code> 
sub-packages.
+      All test classes bear a name ending in "<code>Test</code>".
+      GeoAPI also provides an <code>org.opengis.test.TestSuite</code> class 
including all test classes defined in the
+      <code>geoapi-conformance</code> module, but Apache <abbr>SIS</abbr> does 
not use it.
+      Instead, Apache <abbr>SIS</abbr> inherits GeoAPI’s <code 
class="GeoAPI">*Test</code> classes on a case-by-case basis,
+      in the appropriate modules.
+      The example below gives an example of a customized GeoAPI test:
+      The <a 
href="http://www.geoapi.org/geoapi-conformance/apidocs/org/opengis/test/referencing/ParameterizedTransformTest.html";>parent
 test javadoc</a>
+      documents the tests performed in detail.
+      In this example, only one test is modified and all the others are 
inherited as they are (it is not necessary to repeat them in the sub-class).
+      However, this example adds a supplemental verification, annotated with 
<code>@After</code>, which will be executed after each test.
+    </p>
+
+<pre>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 {
+    /**
+     * Specify our own coordinate transformation factory for the GeoAPI tests.
+     * GeoAPI will test the objects created by this factory.
+     */
+    public MyTest() {
+        super(new MyMathTransformFactory());
+    }
+
+    /**
+     * Changes the behaviour of a test. This example relaxes the requirements 
of this test a little,
+     * by accepting errors of up to 10 centimetres, rather than the default 
value of 1 cm.
+     * This change only applies to this method, and does not affect the other 
inherited tests.
+     */
+    @Test
+    @Override
+    public void testLambertAzimuthalEqualArea() throws FactoryException, 
TransformException {
+        <code class="GeoAPI">tolerance</code> = 0.1; // 10 cm tolerance.
+        super.<code class="GeoAPI">testLambertAzimuthalEqualArea()</code>;
+    }
+
+    /**
+     * Supplemental verification performed after each test, inherited or not.
+     * In this example, we are verifying that the transformation tested
+     * works correctly in two-dimensional spaces.
+     */
+    @After
+    public void ensureAllTransformAreMath2D() {
+        assertTrue(<code class="GeoAPI">transform</code> instanceof 
MathTransform2D);
+    }
+}</pre>
   </body>
 </html>

Modified: sis/site/trunk/book/en/body.html
URL: 
http://svn.apache.org/viewvc/sis/site/trunk/book/en/body.html?rev=1745624&r1=1745623&r2=1745624&view=diff
==============================================================================
--- sis/site/trunk/book/en/body.html (original)
+++ sis/site/trunk/book/en/body.html Thu May 26 17:05:43 2016
@@ -48,8 +48,7 @@
       <xi:include href="geometry.html"/>
       <xi:include href="coverage.html"/>
       <xi:include href="xml.html"/>
-      <xi:include href="implementation-independence.html"/>
-      <xi:include href="test.html"/>
+      <xi:include href="annexes.html"/>
     </main>
   </body>
 </html>

Copied: sis/site/trunk/book/fr/annexes.html (from r1745623, 
sis/site/trunk/book/fr/implementation-independence.html)
URL: 
http://svn.apache.org/viewvc/sis/site/trunk/book/fr/annexes.html?p2=sis/site/trunk/book/fr/annexes.html&p1=sis/site/trunk/book/fr/implementation-independence.html&r1=1745623&r2=1745624&rev=1745624&view=diff
==============================================================================
--- sis/site/trunk/book/fr/implementation-independence.html (original)
+++ sis/site/trunk/book/fr/annexes.html Thu May 26 17:05:43 2016
@@ -22,13 +22,14 @@
 
 <html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="fr">
   <head>
-    <title>Réduire la dépendance directe envers Apache SIS</title>
+    <title>Annexes</title>
     <link rel="stylesheet" type="text/css" href="../book.css"/>
   </head>
   <body>
     <header>
-      <h1 id="reduce-direct-dependency">Réduire la dépendance directe envers 
Apache SIS</h1>
+      <h1 id="annexes">Annexes</h1>
     </header>
+    <h2 id="reduce-direct-dependency">Réduire la dépendance directe envers 
Apache SIS</h2>
     <p>
       Les chapitres précédents utilisaient des méthodes statiques de Apache 
SIS par commodité.
       Dans certains cas, il est possible de remplacer ces méthodes statiques 
par du code ne faisant appel qu’à des méthodes de GeoAPI.
@@ -38,7 +39,7 @@
       Les sections suivantes donnent quelques pistes pour faciliter cette 
tâche.
     </p>
 
-    <h2 id="UML-annotation-geoapi">Correspondances entre GeoAPI et les 
spécifications abstraites</h2>
+    <h3 id="UML-annotation-geoapi">Correspondances entre GeoAPI et les 
spécifications abstraites</h3>
     <p>
       Pour chaque classe, méthode et constante définie à partir d’un 
standard <abbr>OGC</abbr> ou <abbr>ISO</abbr>,
       GeoAPI indique sa provenance à l’aide d’annotations définies dans 
le paquet <code>org.opengis.annotation</code>.
@@ -80,7 +81,7 @@ System.out.println("L’interface Geo
 
 
 
-    <h2 id="ServiceLoader">Obtenir une implémentation des interfaces de 
GeoAPI</h2>
+    <h3 id="ServiceLoader">Obtenir une implémentation des interfaces de 
GeoAPI</h3>
     <p>
       GeoAPI définit des fabriques (<code>Factory</code>) permettant de 
créer des implémentations de ses interfaces.
       Par exemple <code>DatumFactory</code> fournit des méthodes permettant 
de créer des instances
@@ -115,7 +116,7 @@ public class MyApplication {
 
 
 
-    <h3 id="GeoAPI-simple">Fournir sa propre implémentation</h3>
+    <h4 id="GeoAPI-simple">Fournir sa propre implémentation</h4>
     <p>
       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,
@@ -178,9 +179,6 @@ public class MyApplication {
         <td>Description d’un ensemble de paramètres associés à leurs 
valeurs.</td>
       </tr>
     </table>
-
-
-
     <p id="GeoAPI-examples">
       Le module <code>geoapi-examples</code> 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.
@@ -205,5 +203,174 @@ public class MyApplication {
       L’avantage de passer par ces interfaces est de disposer d’un modèle 
unifié pour exploiter deux <abbr>API</abbr> très différents,
       tout en se gardant la possibilité de basculer plus facilement à une 
autre bibliothèque si désiré.
     </p>
+
+
+    <h2 id="tests">Les suites de tests</h2>
+    <p>
+      En plus des tests propres au projet, Apache SIS utilise aussi des tests 
définis par GeoAPI.
+      Ces tests ont l’avantage d’utiliser une source externe définissant 
ce que doivent être les résultats
+      (par exemple les valeurs des coordonnées obtenues par une projection 
cartographique).
+      On réduit ainsi le risque que des tests soient davantage des tests 
anti-régression que des tests de validité.
+      Ces tests peuvent aussi être utilisés par des projets autres que 
Apache SIS.
+    </p>
+    <p id="GeoAPI-conformance">
+      Le module <code>geoapi-conformance</code> fournit des 
<i>validateurs</i>, une <i>suite de tests</i> JUnit
+      et des <i>générateurs de rapports</i> sous forme de pages <abbr 
title="Hypertext Markup Language">HTML</abbr>.
+      Ce module peut être utilisé avec n’importe quelle implémentation de 
GeoAPI.
+      Pour les développeurs d’une bibliothèque géospatiale, il offre les 
avantages suivants:
+    </p>
+    <ul>
+      <li>Réduire la fastidieuse tâche d’écriture des tests, en 
réutilisant des tests existants.</li>
+      <li>Accroître la confiance en la validité des tests, du fait que 
<code>geoapi-conformance</code>
+          a lui-même sa propre suite de tests et est appliqué à d’autres 
implémentations.</li>
+      <li>Faciliter la comparaison avec les autres implémentations.</li>
+    </ul>
+
+
+
+    <h3 id="GeoAPI-validators">Validations des instances</h3>
+    <p>
+      GeoAPI peut valider une instance de ses interfaces en vérifiant que 
certaines contraintes sont respectées.
+      Certaines contraintes ne peuvent pas être exprimées dans la signature 
de la méthode. Ces contraintes sont
+      généralement décrites textuellement dans les spécifications 
abstraites ou dans la javadoc.
+    </p>
+    <div class="example"><p><b>Exemple:</b>
+      La conversion ou transformation d’une coordonnée 
(<code>CC_CoordinateOperation</code>) peut nécessiter l’enchaînement de 
plusieurs étapes.
+      Dans une telle chaîne d’opérations 
(<code>CC_ConcatenatedOperation</code>),
+      pour chaque étape (<code>CC_SingleOperation</code>) le nombre de 
dimensions
+      en sortie doit être égal au nombre de dimensions attendu en entré par 
l’opération suivante.
+      Exprimée en langage Java, cette contrainte stipule que pour tout index
+      0 &lt; <var>i</var> &lt; <var>n</var> où <var>n</var> est le nombre 
d’opérations, on a
+      <code>coordOperation[i].targetDimensions == 
coordOperation[i-1].sourceDimensions</code>.
+    </p></div>
+
+    <p>
+      La façon la plus simple d’effectuer ces vérifications est 
d’appeler les méthodes statiques
+      <code class="GeoAPI">validate(…)</code> de la classe 
<code>org.opengis.test.Validators</code>.
+      Ces méthodes portant toutes le même nom, il suffit d’écrire 
“<code>validate(<var>valeur</var>)</code>”
+      et de laisser le compilateur choisir la méthode la plus appropriée en 
fonction du type d’objet donné en argument.
+      Si le type d’objet n’est pas connu au moment de la compilation, 
alors la méthode <code class="GeoAPI">dispatch(Object)</code>
+      peut se charger de rediriger le travail à la méthode <code 
class="GeoAPI">validate(…)</code> appropriée.
+    </p>
+    <p>
+      Toutes les fonctions <code class="GeoAPI">validate(…)</code> suivent 
le fil des dépendances,
+      c’est-à-dire qu’elles valideront aussi chaque composantes de 
l’objet à valider.
+      Par exemple la validation d’un objet <code>GeographicCRS</code> 
impliquera
+      la validation de sa composante <code>GeodeticDatum</code>, qui 
impliquera elle-même
+      la validation de sa composante <code>Ellipsoid</code>, et ainsi de suite.
+      Il est donc inutile de valider soi-même les composantes, à moins de 
vouloir isoler le test d’un élément souvent problématique.
+    </p>
+    <p>
+      Par défaut, les validations sont aussi strictes que possible. Il est 
possible toutefois d’assouplir certaines règles.
+      L’assouplissement le plus fréquent consiste à tolérer l’absence 
d’attributs qui étaient sensés être obligatoires.
+      Cette règle et quelques autres peuvent être modifiées globalement 
pour tous les tests exécutés dans la
+      <abbr title="Java Virtual Machine">JVM</abbr> courante comme dans 
l’exemple suivant:
+    </p>
+
+<pre>import org.opengis.metadata.Metadata;
+import org.opengis.test.Validators;
+import org.junit.Test;
+
+public class MyTest {
+    /*
+     * Tolérer l’absence d’attributs obligatoires dans les paquets 
metadata et citation.
+     * Cette modification s’appliquera à tous les tests exécutés dans la 
<abbr>JVM</abbr> courante.
+     * S’il existe plusieurs classes de tests, cette initialisation peut 
être effectuée
+     * dans une classe parente à toutes les classes de tests.
+     */
+    static {
+        Validators.<code 
class="GeoAPI">DEFAULT.metadata.requireMandatoryAttributes</code> = false;
+        Validators.<code 
class="GeoAPI">DEFAULT.citation.requireMandatoryAttributes</code> = false;
+    }
+
+    @Test
+    public void testMyMetadata() {
+        Metadata myObject = …; // Construisez un objet ici.
+        Validators.<code class="GeoAPI">validate</code>(myObject);
+    }
+}</pre>
+
+    <p>
+      Les règles peuvent aussi être modifiées pour une suite de tests 
particulière,
+      sans affecter la configuration par défaut de la <abbr>JVM</abbr> 
courante.
+      Cette approche nécessite de créer une nouvelle instance du validateur 
dont on souhaite modifier la configuration.
+    </p>
+
+<pre>import org.opengis.metadata.Metadata;
+import org.opengis.test.ValidatorContainer;
+import org.junit.Test;
+
+public class MyTest {
+    private final ValidatorContainer validators;
+
+    public MyTest() {
+        validators = new ValidatorContainer();
+        validators.<code 
class="GeoAPI">metadata.requireMandatoryAttributes</code> = false;
+        validators.<code 
class="GeoAPI">citation.requireMandatoryAttributes</code> = false;
+    }
+
+    @Test
+    public void testMyMetadata() {
+        Metadata myObject = …; // Construisez un objet ici.
+        validators.<code class="GeoAPI">validate</code>(myObject);
+    }
+}</pre>
+
+
+
+    <h3 id="GeoAPI-tests">Exécution des tests pré-définis</h3>
+    <p>
+      Des classes de tests JUnit sont définies dans des sous-paquets de 
<code>org.opengis.test</code>.
+      Toutes les classes de tests portent un nom se terminant en 
"<code>Test</code>".
+      GeoAPI définie aussi une classe <code>org.opengis.test.TestSuite</code> 
englobant l’ensemble
+      des tests définis dans le module <code>geoapi-conformance</code>, mais 
Apache <abbr>SIS</abbr> ne l’utilise pas.
+      Apache <abbr>SIS</abbr> hérite plutôt des classes <code 
class="GeoAPI">*Test</code> de GeoAPI au cas-par-cas, dans les modules 
appropriés.
+      L’exemple ci-dessous donne un exemple de test de GeoAPI personnalisé.
+      La <a 
href="http://www.geoapi.org/geoapi-conformance/apidocs/org/opengis/test/referencing/ParameterizedTransformTest.html";>Javadoc
+      de la classe parente</a> 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 <code>@After</code>,
+      qui sera exécutée après chacun des tests.
+    </p>
+
+<pre>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 {
+        <code class="GeoAPI">tolerance</code> = 0.1; // Tolérance de 10 cm.
+        super.<code class="GeoAPI">testLambertAzimuthalEqualArea()</code>;
+    }
+
+    /**
+     * 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(<code class="GeoAPI">transform</code> instanceof 
MathTransform2D);
+    }
+}</pre>
   </body>
 </html>

Modified: sis/site/trunk/book/fr/body.html
URL: 
http://svn.apache.org/viewvc/sis/site/trunk/book/fr/body.html?rev=1745624&r1=1745623&r2=1745624&view=diff
==============================================================================
--- sis/site/trunk/book/fr/body.html (original)
+++ sis/site/trunk/book/fr/body.html Thu May 26 17:05:43 2016
@@ -49,8 +49,7 @@
       <xi:include href="geometry.html"/>
       <xi:include href="coverage.html"/>
       <xi:include href="xml.html"/>
-      <xi:include href="implementation-independence.html"/>
-      <xi:include href="test.html"/>
+      <xi:include href="annexes.html"/>
     </main>
   </body>
 </html>

Modified: sis/site/trunk/content/book/en/developer-guide.html
URL: 
http://svn.apache.org/viewvc/sis/site/trunk/content/book/en/developer-guide.html?rev=1745624&r1=1745623&r2=1745624&view=diff
==============================================================================
--- sis/site/trunk/content/book/en/developer-guide.html (original)
+++ sis/site/trunk/content/book/en/developer-guide.html Thu May 26 17:05:43 2016
@@ -1,5 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html>
 
 <!--
   Licensed to the Apache Software Foundation (ASF)
@@ -10,6 +9,7 @@
   See the files in the ../../../book/ directory instead.
 -->
 
+<!DOCTYPE html>
 <html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en">
 <head>
 <title>Introduction to Apache SIS</title>
@@ -52,13 +52,14 @@
 <li><a href="#XML-ISO-19115">Representing Metadata According to ISO 
19115-3</a><ul>
 <li><a href="#gco-id">Identification of Already-Defined Instances</a></li>
 <li><a href="#nilReason">Representing Missing 
Values</a></li></ul></li></ul></li>
+<li><a href="#annexes">Annexes</a><ul>
 <li><a href="#reduce-direct-dependency">Reduce direct dependency to Apache 
SIS</a><ul>
 <li><a href="#UML-annotation-geoapi">Mapping Given by @UML Annotations</a></li>
 <li><a href="#ServiceLoader">Fetching implementations of GeoAPI 
Interfaces</a><ul>
 <li><a href="#GeoAPI-simple">Defining Custom 
Implementations</a></li></ul></li></ul></li>
 <li><a href="#tests">Test suites</a><ul>
 <li><a href="#GeoAPI-validators">Instance Validations</a></li>
-<li><a href="#GeoAPI-tests">Executing Pre-defined Tests</a></li></ul></li>
+<li><a href="#GeoAPI-tests">Executing Pre-defined 
Tests</a></li></ul></li></ul></li>
 </ul>
 </nav>
 
@@ -1587,7 +1588,7 @@ as well as other information such as <i>
 <section>
 <header>
 <h1 id="XML-ISO"><span class="section-number">6.</span> Representing Objects 
in <abbr>XML</abbr></h1>
-<nav><div class="chapter-links"><div class="previous-chapter">⬅ <a 
href="#Coverage">Previous chapter</a></div><div class="next-chapter"><a 
href="#reduce-direct-dependency">Next chapter</a> ➡</div></div></nav>
+<nav><div class="chapter-links"><div class="previous-chapter">⬅ <a 
href="#Coverage">Previous chapter</a></div><div class="next-chapter"><a 
href="#annexes">Next chapter</a> ➡</div></div></nav>
 </header>
 <nav>In this chapter:<ul class="toc">
 <li><a href="#XML-ISO-19115">Representing Metadata According to ISO 
19115-3</a><ul>
@@ -1921,13 +1922,18 @@ But when a <code class="OGC">nilReason</
 </section>
 <section>
 <header>
-<h1 id="reduce-direct-dependency"><span class="section-number">7.</span> 
Reduce direct dependency to Apache SIS</h1>
-<nav><div class="chapter-links"><div class="previous-chapter">⬅ <a 
href="#XML-ISO">Previous chapter</a></div><div class="next-chapter"><a 
href="#tests">Next chapter</a> ➡</div></div></nav>
+<h1 id="annexes"><span class="section-number">7.</span> Annexes</h1>
+<nav><div class="chapter-links"><div class="previous-chapter">⬅ <a 
href="#XML-ISO">Previous chapter</a></div></div></nav>
 </header>
 <nav>In this chapter:<ul class="toc">
+<li><a href="#reduce-direct-dependency">Reduce direct dependency to Apache 
SIS</a><ul>
 <li><a href="#UML-annotation-geoapi">Mapping Given by @UML Annotations</a></li>
 <li><a href="#ServiceLoader">Fetching implementations of GeoAPI 
Interfaces</a><ul>
-<li><a href="#GeoAPI-simple">Defining Custom 
Implementations</a></li></ul></li></ul></nav>
+<li><a href="#GeoAPI-simple">Defining Custom 
Implementations</a></li></ul></li></ul></li>
+<li><a href="#tests">Test suites</a><ul>
+<li><a href="#GeoAPI-validators">Instance Validations</a></li>
+<li><a href="#GeoAPI-tests">Executing Pre-defined 
Tests</a></li></ul></li></ul></nav>
+<h2 id="reduce-direct-dependency"><span class="section-number">7.1.</span> 
Reduce direct dependency to Apache SIS</h2>
 <p>
 Previous chapters used Apache SIS static methods for convenience.
 In some cases, usage of those convenience methods can be replaced by Java code 
using only GeoAPI methods.
@@ -1937,7 +1943,7 @@ However this may require that applicatio
 The following sections provide some tip for easing this task.
 </p>
 
-<h2 id="UML-annotation-geoapi"><span class="section-number">7.1.</span> 
Mapping Given by <code class="GeoAPI">@UML</code> Annotations</h2>
+<h3 id="UML-annotation-geoapi"><span class="section-number">7.1.1.</span> 
Mapping Given by <code class="GeoAPI">@UML</code> Annotations</h3>
 <p>
 For each class, method and constant defined by an <abbr title="Open Geospatial 
Consortium">OGC</abbr> or <abbr title="International Organization for 
Standardization">ISO</abbr> standard,
 GeoAPI indicates its provenance using annotations defined in the <code 
class="GeoAPI">org.opengis.annotation</code> package.
@@ -1977,7 +1983,7 @@ The <code class="SIS">org.apache.sis.uti
 
 
 
-<h2 id="ServiceLoader"><span class="section-number">7.2.</span> Fetching 
implementations of GeoAPI Interfaces</h2>
+<h3 id="ServiceLoader"><span class="section-number">7.1.2.</span> Fetching 
implementations of GeoAPI Interfaces</h3>
 <p>
 GeoAPI defines factories (<code class="GeoAPI">Factory</code>) that can create 
implementations of interfaces.
 For example, <code class="GeoAPI">DatumFactory</code> provides methods that 
can create instances which implement interfaces of the
@@ -2012,7 +2018,7 @@ for example when multiple libraries coex
 
 
 
-<h3 id="GeoAPI-simple"><span class="section-number">7.2.1.</span> Defining 
Custom Implementations</h3>
+<h4 id="GeoAPI-simple"><span class="section-number">7.1.2.1.</span> Defining 
Custom Implementations</h4>
 <p>
 Implementing GeoAPI oneself in order to meet very specific needs is not 
difficult.
 A developer might concentrate on a handful of interfaces among the hundreds 
available,
@@ -2074,9 +2080,6 @@ The following table lists a few possible
 <td>Description of a set of parameters associated with their values.</td>
 </tr>
 </table>
-
-
-
 <p id="GeoAPI-examples">
 The <code class="GeoAPI">geoapi-examples</code> module provides examples of 
simple implementations.
 Many of these classes implement more than one interface at a time in order to 
provide a simpler conceptual model.
@@ -2100,15 +2103,10 @@ to use some of the features of external
 The advantage of using these interfaces is to provide a unified model to 
operate two very different <abbr title="Application Programming 
Interface">API</abbr>s,
 while retaining the ability to switch easily to another library if desired.
 </p>
-</section>
-<section>
-<header>
-<h1 id="tests"><span class="section-number">8.</span> Test suites</h1>
-<nav><div class="chapter-links"><div class="previous-chapter">⬅ <a 
href="#reduce-direct-dependency">Previous chapter</a></div></div></nav>
-</header>
-<nav>In this chapter:<ul class="toc">
-<li><a href="#GeoAPI-validators">Instance Validations</a></li>
-<li><a href="#GeoAPI-tests">Executing Pre-defined Tests</a></li></ul></nav>
+
+
+
+<h2 id="tests"><span class="section-number">7.2.</span> Test suites</h2>
 <p>
 In addition to its own tests, Apache SIS uses tests defined by GeoAPI.
 One advantages is that those tests provide an external source for the 
definition of expected results
@@ -2132,7 +2130,7 @@ since <code class="GeoAPI">geoapi-confor
 
 
 
-<h2 id="GeoAPI-validators"><span class="section-number">8.1.</span> Instance 
Validations</h2>
+<h3 id="GeoAPI-validators"><span class="section-number">7.2.1.</span> Instance 
Validations</h3>
 <p>
 GeoAPI can validate an instance of its interfaces by checking that certain 
constraints are observed.
 Many constraints can not be expressed in the method signature. Those 
constraints
@@ -2218,7 +2216,7 @@ This approach requires the creation of a
 
 
 
-<h2 id="GeoAPI-tests"><span class="section-number">8.2.</span> Executing 
Pre-defined Tests</h2>
+<h3 id="GeoAPI-tests"><span class="section-number">7.2.2.</span> Executing 
Pre-defined Tests</h3>
 <p>
 JUnit tests are defined in the <code class="GeoAPI">org.opengis.test</code> 
sub-packages.
 All test classes bear a name ending in "<code>Test</code>".

Modified: sis/site/trunk/content/book/fr/developer-guide.html
URL: 
http://svn.apache.org/viewvc/sis/site/trunk/content/book/fr/developer-guide.html?rev=1745624&r1=1745623&r2=1745624&view=diff
==============================================================================
--- sis/site/trunk/content/book/fr/developer-guide.html [UTF-8] (original)
+++ sis/site/trunk/content/book/fr/developer-guide.html [UTF-8] Thu May 26 
17:05:43 2016
@@ -1,5 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html>
 
 <!--
   Licensed to the Apache Software Foundation (ASF)
@@ -10,6 +9,7 @@
   See the files in the ../../../book/ directory instead.
 -->
 
+<!DOCTYPE html>
 <html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="fr">
 <head>
 <title>Introduction à Apache SIS</title>
@@ -75,13 +75,14 @@
 <li><a href="#XML-ISO-19115">Représentation des méta-données selon ISO 
19115-3</a><ul>
 <li><a href="#gco-id">Identification d’instances déjà définies</a></li>
 <li><a href="#nilReason">Représentation de valeurs 
manquantes</a></li></ul></li></ul></li>
+<li><a href="#annexes">Annexes</a><ul>
 <li><a href="#reduce-direct-dependency">Réduire la dépendance directe envers 
Apache SIS</a><ul>
 <li><a href="#UML-annotation-geoapi">Correspondances entre GeoAPI et les 
spécifications abstraites</a></li>
 <li><a href="#ServiceLoader">Obtenir une implémentation des interfaces de 
GeoAPI</a><ul>
 <li><a href="#GeoAPI-simple">Fournir sa propre 
implémentation</a></li></ul></li></ul></li>
 <li><a href="#tests">Les suites de tests</a><ul>
 <li><a href="#GeoAPI-validators">Validations des instances</a></li>
-<li><a href="#GeoAPI-tests">Exécution des tests pré-définis</a></li></ul></li>
+<li><a href="#GeoAPI-tests">Exécution des tests 
pré-définis</a></li></ul></li></ul></li>
 </ul>
 </nav>
 
@@ -2582,7 +2583,7 @@ des instances de <code class="SIS">Range
 <section>
 <header>
 <h1 id="XML-ISO"><span class="section-number">7.</span> Représentation des 
objets en <abbr>XML</abbr></h1>
-<nav><div class="chapter-links"><div class="previous-chapter">⬅ <a 
href="#Coverage">Chapitre précédent</a></div><div class="next-chapter"><a 
href="#reduce-direct-dependency">Chapitre suivant</a> ➡</div></div></nav>
+<nav><div class="chapter-links"><div class="previous-chapter">⬅ <a 
href="#Coverage">Chapitre précédent</a></div><div class="next-chapter"><a 
href="#annexes">Chapitre suivant</a> ➡</div></div></nav>
 </header>
 <nav>Dans ce chapitre:<ul class="toc">
 <li><a href="#XML-ISO-19115">Représentation des méta-données selon ISO 
19115-3</a><ul>
@@ -2924,13 +2925,18 @@ et dont la méthode <code class="SIS">ge
 </section>
 <section>
 <header>
-<h1 id="reduce-direct-dependency"><span class="section-number">8.</span> 
Réduire la dépendance directe envers Apache SIS</h1>
-<nav><div class="chapter-links"><div class="previous-chapter">⬅ <a 
href="#XML-ISO">Chapitre précédent</a></div><div class="next-chapter"><a 
href="#tests">Chapitre suivant</a> ➡</div></div></nav>
+<h1 id="annexes"><span class="section-number">8.</span> Annexes</h1>
+<nav><div class="chapter-links"><div class="previous-chapter">⬅ <a 
href="#XML-ISO">Chapitre précédent</a></div></div></nav>
 </header>
 <nav>Dans ce chapitre:<ul class="toc">
+<li><a href="#reduce-direct-dependency">Réduire la dépendance directe envers 
Apache SIS</a><ul>
 <li><a href="#UML-annotation-geoapi">Correspondances entre GeoAPI et les 
spécifications abstraites</a></li>
 <li><a href="#ServiceLoader">Obtenir une implémentation des interfaces de 
GeoAPI</a><ul>
-<li><a href="#GeoAPI-simple">Fournir sa propre 
implémentation</a></li></ul></li></ul></nav>
+<li><a href="#GeoAPI-simple">Fournir sa propre 
implémentation</a></li></ul></li></ul></li>
+<li><a href="#tests">Les suites de tests</a><ul>
+<li><a href="#GeoAPI-validators">Validations des instances</a></li>
+<li><a href="#GeoAPI-tests">Exécution des tests 
pré-définis</a></li></ul></li></ul></nav>
+<h2 id="reduce-direct-dependency"><span class="section-number">8.1.</span> 
Réduire la dépendance directe envers Apache SIS</h2>
 <p>
 Les chapitres précédents utilisaient des méthodes statiques de Apache SIS par 
commodité.
 Dans certains cas, il est possible de remplacer ces méthodes statiques par du 
code ne faisant appel qu’à des méthodes de GeoAPI.
@@ -2940,7 +2946,7 @@ Mais cela peut amener ces applications �
 Les sections suivantes donnent quelques pistes pour faciliter cette tâche.
 </p>
 
-<h2 id="UML-annotation-geoapi"><span class="section-number">8.1.</span> 
Correspondances entre GeoAPI et les spécifications abstraites</h2>
+<h3 id="UML-annotation-geoapi"><span class="section-number">8.1.1.</span> 
Correspondances entre GeoAPI et les spécifications abstraites</h3>
 <p>
 Pour chaque classe, méthode et constante définie à partir d’un standard <abbr 
title="Open Geospatial Consortium">OGC</abbr> ou <abbr title="International 
Organization for Standardization">ISO</abbr>,
 GeoAPI indique sa provenance à l’aide d’annotations définies dans le paquet 
<code class="GeoAPI">org.opengis.annotation</code>.
@@ -2982,7 +2988,7 @@ La méthode de commodité de <code class
 
 
 
-<h2 id="ServiceLoader"><span class="section-number">8.2.</span> Obtenir une 
implémentation des interfaces de GeoAPI</h2>
+<h3 id="ServiceLoader"><span class="section-number">8.1.2.</span> Obtenir une 
implémentation des interfaces de GeoAPI</h3>
 <p>
 GeoAPI définit des fabriques (<code class="GeoAPI">Factory</code>) permettant 
de créer des implémentations de ses interfaces.
 Par exemple <code class="GeoAPI">DatumFactory</code> fournit des méthodes 
permettant de créer des instances
@@ -3017,7 +3023,7 @@ par exemple lorsque plusieurs bibliothè
 
 
 
-<h3 id="GeoAPI-simple"><span class="section-number">8.2.1.</span> Fournir sa 
propre implémentation</h3>
+<h4 id="GeoAPI-simple"><span class="section-number">8.1.2.1.</span> Fournir sa 
propre implémentation</h4>
 <p>
 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,
@@ -3080,9 +3086,6 @@ Le tableau suivant énumère quelques co
 <td>Description d’un ensemble de paramètres associés à leurs valeurs.</td>
 </tr>
 </table>
-
-
-
 <p id="GeoAPI-examples">
 Le module <code class="GeoAPI">geoapi-examples</code> 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.
@@ -3107,15 +3110,9 @@ une partie des fonctionnalités de bibli
 L’avantage de passer par ces interfaces est de disposer d’un modèle unifié 
pour exploiter deux <abbr title="Application Programming Interface">API</abbr> 
très différents,
 tout en se gardant la possibilité de basculer plus facilement à une autre 
bibliothèque si désiré.
 </p>
-</section>
-<section>
-<header>
-<h1 id="tests"><span class="section-number">9.</span> Les suites de tests</h1>
-<nav><div class="chapter-links"><div class="previous-chapter">⬅ <a 
href="#reduce-direct-dependency">Chapitre précédent</a></div></div></nav>
-</header>
-<nav>Dans ce chapitre:<ul class="toc">
-<li><a href="#GeoAPI-validators">Validations des instances</a></li>
-<li><a href="#GeoAPI-tests">Exécution des tests pré-définis</a></li></ul></nav>
+
+
+<h2 id="tests"><span class="section-number">8.2.</span> Les suites de 
tests</h2>
 <p>
 En plus des tests propres au projet, Apache SIS utilise aussi des tests 
définis par GeoAPI.
 Ces tests ont l’avantage d’utiliser une source externe définissant ce que 
doivent être les résultats
@@ -3138,7 +3135,7 @@ a lui-même sa propre suite de tests et
 
 
 
-<h2 id="GeoAPI-validators"><span class="section-number">9.1.</span> 
Validations des instances</h2>
+<h3 id="GeoAPI-validators"><span class="section-number">8.2.1.</span> 
Validations des instances</h3>
 <p>
 GeoAPI peut valider une instance de ses interfaces en vérifiant que certaines 
contraintes sont respectées.
 Certaines contraintes ne peuvent pas être exprimées dans la signature de la 
méthode. Ces contraintes sont
@@ -3228,7 +3225,7 @@ Cette approche nécessite de créer une
 
 
 
-<h2 id="GeoAPI-tests"><span class="section-number">9.2.</span> Exécution des 
tests pré-définis</h2>
+<h3 id="GeoAPI-tests"><span class="section-number">8.2.2.</span> Exécution des 
tests pré-définis</h3>
 <p>
 Des classes de tests JUnit sont définies dans des sous-paquets de <code 
class="GeoAPI">org.opengis.test</code>.
 Toutes les classes de tests portent un nom se terminant en "<code>Test</code>".



Reply via email to