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Â <Â <var>i</var>Â <Â <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 < <var>i</var> < <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>".