Testing behaviour of lookup and service loader
authorJaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 10:08:25 +0200
changeset 248b3aab65cde53
parent 247 bf59a878e45e
child 249 a3a5034a7b8f
Testing behaviour of lookup and service loader
samples/componentinjection/anagram-modular/build.xml
samples/componentinjection/anagram-modular/nbproject/project.xml
samples/componentinjection/anagram-modular/src-app-serviceloader/org/apidesign/anagram/app/serviceloader/AnagramsWithServiceLoader.java
samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/app/lookup/AnagramsWithLookupTest.java
samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/app/serviceloader/AnagramsWithServiceLoaderTest.java
samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/gui/AnagramsTestBase.java
     1.1 --- a/samples/componentinjection/anagram-modular/build.xml	Sat Jun 14 10:08:21 2008 +0200
     1.2 +++ b/samples/componentinjection/anagram-modular/build.xml	Sat Jun 14 10:08:25 2008 +0200
     1.3 @@ -47,10 +47,14 @@
     1.4              <param name="version" value="app-serviceloader"/>
     1.5              <param name="cp" value="build/api/classes:build/word-static/classes:build/scrambler-simple/classes:build/gui/classes"/>
     1.6          </antcall>
     1.7 +        <antcall target="-build-one">
     1.8 +            <param name="version" value="test"/>
     1.9 +            <param name="cp" value="build/api/classes:build/gui/classes:build/app-serviceloader/classes:build/app-lookup/classes:${junit.jar}:${nbjunit.jar}:${insane.jar}"/>
    1.10 +        </antcall>
    1.11          
    1.12      </target>
    1.13      
    1.14 -    <target name="test" depends="build">
    1.15 +    <target name="run" depends="build">
    1.16          <echo level="info" message="Running registerXYZ version"/>
    1.17          <antcall target="-run-one">
    1.18              <param name="version" value="app-register"/>
    1.19 @@ -89,17 +93,27 @@
    1.20          </antcall>
    1.21          <antcall target="-run-one">
    1.22              <param name="version" value="app-serviceloader"/>
    1.23 -            <param name="cp" value="build/api/classes:build/word-static/classes:build/scrambler-simple/classes:build/gui/classes"/>
    1.24 +            <param name="cp" value="build/api/classes:build/word-static/classes:build/scrambler-simple/classes:build/gui/classes:${junit.jar}:${nbjunit.jar}:${insane.jar}"/>
    1.25              <param name="main" value="org.apidesign.anagram.app.serviceloader.Main"/>
    1.26          </antcall>
    1.27      </target>
    1.28 -    
    1.29 +
    1.30 +    <target name="test" depends="build">
    1.31 +        <echo level="info" message="Testing using MockServices"/>
    1.32 +        <antcall target="-test-one">
    1.33 +            <param name="version" value="app-test"/>
    1.34 +            <param name="cp" value="build/api/classes:build/gui/classes:build/app-serviceloader/classes:build/app-lookup/classes:${junit.jar}:${nbjunit.jar}:${insane.jar}:../../libs/dist/org-openide-util.jar"/>
    1.35 +        </antcall>
    1.36 +    </target>
    1.37 +        
    1.38      <!-- support methods -->
    1.39      
    1.40      <target name="-libraries">
    1.41          <ant dir="../../libs/"/>
    1.42          
    1.43          <property name="junit.jar" location="../../libs/dist/junit-4.4.jar"/>
    1.44 +        <property name="nbjunit.jar" location="../../libs/dist/org-netbeans-modules-nbjunit.jar"/>
    1.45 +        <property name="insane.jar" location="../../libs/dist/org-netbeans-insane.jar"/>
    1.46      </target>
    1.47  
    1.48      <target name="-run-one">
    1.49 @@ -126,4 +140,22 @@
    1.50              </fileset>
    1.51          </copy>
    1.52      </target>
    1.53 +    <target name="-test-one">
    1.54 +        <fail message="You need to specify API version number" unless="version"/>
    1.55 +        <mkdir dir="build/testresults"/>
    1.56 +        <junit dir="build/test/classes" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true">
    1.57 +            <batchtest todir="build/testresults">
    1.58 +                <fileset dir="build/test/classes">
    1.59 +                    <filename name="**/*Test.class"/>
    1.60 +                </fileset>
    1.61 +            </batchtest>
    1.62 +            <classpath>
    1.63 +                <path path="${cp}"/>
    1.64 +                <path location="build/test/classes"/>
    1.65 +                <path location="${junit.jar}"/>
    1.66 +            </classpath>
    1.67 +            <formatter type="brief" usefile="false"/>
    1.68 +            <formatter type="xml"/>
    1.69 +        </junit>
    1.70 +    </target>
    1.71  </project>
     2.1 --- a/samples/componentinjection/anagram-modular/nbproject/project.xml	Sat Jun 14 10:08:21 2008 +0200
     2.2 +++ b/samples/componentinjection/anagram-modular/nbproject/project.xml	Sat Jun 14 10:08:25 2008 +0200
     2.3 @@ -94,6 +94,9 @@
     2.4                  <action name="clean">
     2.5                      <target>clean</target>
     2.6                  </action>
     2.7 +                <action name="run">
     2.8 +                    <target>run</target>
     2.9 +                </action>
    2.10                  <action name="test">
    2.11                      <target>test</target>
    2.12                  </action>
    2.13 @@ -226,6 +229,7 @@
    2.14                      <ide-action name="build"/>
    2.15                      <ide-action name="rebuild"/>
    2.16                      <ide-action name="clean"/>
    2.17 +                    <ide-action name="run"/>
    2.18                      <ide-action name="test"/>
    2.19                      <ide-action name="debug"/>
    2.20                  </context-menu>
    2.21 @@ -300,7 +304,7 @@
    2.22              </compilation-unit>
    2.23              <compilation-unit>
    2.24                  <package-root>src-test</package-root>
    2.25 -                <classpath mode="compile">src-new-api:../libs/dist/junit-4.4.jar</classpath>
    2.26 +                <classpath mode="compile">src-api:../../libs/dist/junit-4.4.jar::../../libs/dist/org-netbeans-modules-nbjunit.jar:../../libs/dist/org-netbeans-insane.jar:src-gui:../../libs/dist/org-openide-util.jar:src-app-lookup:src-app-serviceloader</classpath>
    2.27                  <source-level>1.5</source-level>
    2.28              </compilation-unit>
    2.29          </java-data>
     3.1 --- a/samples/componentinjection/anagram-modular/src-app-serviceloader/org/apidesign/anagram/app/serviceloader/AnagramsWithServiceLoader.java	Sat Jun 14 10:08:21 2008 +0200
     3.2 +++ b/samples/componentinjection/anagram-modular/src-app-serviceloader/org/apidesign/anagram/app/serviceloader/AnagramsWithServiceLoader.java	Sat Jun 14 10:08:25 2008 +0200
     3.3 @@ -1,5 +1,6 @@
     3.4  package org.apidesign.anagram.app.serviceloader;
     3.5  
     3.6 +import java.util.Iterator;
     3.7  import org.apidesign.anagram.api.Scrambler;
     3.8  import org.apidesign.anagram.api.WordLibrary;
     3.9  import org.apidesign.anagram.gui.Anagrams;
    3.10 @@ -13,12 +14,14 @@
    3.11  
    3.12      @Override
    3.13      protected WordLibrary getWordLibrary() {
    3.14 -        return ServiceLoader.load(WordLibrary.class).iterator().next();
    3.15 +        Iterator<WordLibrary> it = ServiceLoader.load(WordLibrary.class).iterator();
    3.16 +        return it.hasNext() ? it.next() : null;
    3.17      }
    3.18  
    3.19      @Override
    3.20      protected Scrambler getScrambler() {
    3.21 -        return ServiceLoader.load(Scrambler.class).iterator().next();
    3.22 +        Iterator<Scrambler> it = ServiceLoader.load(Scrambler.class).iterator();
    3.23 +        return it.hasNext() ? it.next() : null;
    3.24      }
    3.25  
    3.26  }
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/app/lookup/AnagramsWithLookupTest.java	Sat Jun 14 10:08:25 2008 +0200
     4.3 @@ -0,0 +1,11 @@
     4.4 +package org.apidesign.anagram.app.lookup;
     4.5 +
     4.6 +import org.apidesign.anagram.gui.*;
     4.7 +import org.apidesign.anagram.app.lookup.AnagramsWithLookup;
     4.8 +
     4.9 +public class AnagramsWithLookupTest extends AnagramsTestBase {
    4.10 +    @Override
    4.11 +    protected Anagrams create() {
    4.12 +        return new AnagramsWithLookup();
    4.13 +    }
    4.14 +}
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/app/serviceloader/AnagramsWithServiceLoaderTest.java	Sat Jun 14 10:08:25 2008 +0200
     5.3 @@ -0,0 +1,11 @@
     5.4 +package org.apidesign.anagram.app.serviceloader;
     5.5 +
     5.6 +import org.apidesign.anagram.app.lookup.*;
     5.7 +import org.apidesign.anagram.gui.*;
     5.8 +
     5.9 +public class AnagramsWithServiceLoaderTest extends AnagramsTestBase {
    5.10 +    @Override
    5.11 +    protected Anagrams create() {
    5.12 +        return new AnagramsWithServiceLoader();
    5.13 +    }
    5.14 +}
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/samples/componentinjection/anagram-modular/src-test/org/apidesign/anagram/gui/AnagramsTestBase.java	Sat Jun 14 10:08:25 2008 +0200
     6.3 @@ -0,0 +1,42 @@
     6.4 +package org.apidesign.anagram.gui;
     6.5 +
     6.6 +import org.apidesign.anagram.api.Scrambler;
     6.7 +import org.apidesign.anagram.api.WordLibrary;
     6.8 +import static org.junit.Assert.*;
     6.9 +import org.junit.Test;
    6.10 +import org.netbeans.junit.MockServices;
    6.11 +
    6.12 +public abstract class AnagramsTestBase {
    6.13 +
    6.14 +    protected abstract Anagrams create();
    6.15 +    
    6.16 +    @Test public void testInjectionOfServices() throws Exception {
    6.17 +        Anagrams ui = create();
    6.18 +        
    6.19 +        assertNull("No scrambler injected yet", ui.getScrambler());
    6.20 +        assertNull("No scrambler injected yet", ui.getWordLibrary());
    6.21 +        
    6.22 +        MockServices.setServices(
    6.23 +            ReversingMockScrambler.class, SingleMockLibrary.class
    6.24 +        );
    6.25 +        
    6.26 +        Scrambler s = ui.getScrambler();
    6.27 +        assertNotNull("Now we have scrambler", s);
    6.28 +        assertEquals(
    6.29 +            "It is the mock one", ReversingMockScrambler.class, s.getClass()
    6.30 +        );
    6.31 +        WordLibrary l = ui.getWordLibrary();
    6.32 +        assertNotNull("Now we have library", l);
    6.33 +        assertEquals(
    6.34 +            "It is the mock one", SingleMockLibrary.class, l.getClass()
    6.35 +        );
    6.36 +    }
    6.37 +    
    6.38 +    public static final class ReversingMockScrambler {
    6.39 +        
    6.40 +    }
    6.41 +    
    6.42 +    public static final class SingleMockLibrary {
    6.43 +        
    6.44 +    }
    6.45 +}