Support for debugging, tests work as expected
authorJaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:52:25 +0200
changeset 48c5742322dbc8
parent 47 f464a16d553a
child 49 294a39765b0b
Support for debugging, tests work as expected
samples/messagedigest/build.xml
samples/messagedigest/nbproject/project.xml
samples/messagedigest/src-bridge/META-INF/services/org.apidesign.spi.security.Digestor
samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToNew.java
samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToOld.java
     1.1 --- a/samples/messagedigest/build.xml	Sat Jun 14 09:52:25 2008 +0200
     1.2 +++ b/samples/messagedigest/build.xml	Sat Jun 14 09:52:25 2008 +0200
     1.3 @@ -19,7 +19,13 @@
     1.4          </antcall>
     1.5      </target>
     1.6      
     1.7 -    <target name="test" depends="build">
     1.8 +    <target name="test">
     1.9 +        <antcall target="-do-test">
    1.10 +            <param name="nodebug" value="true"/>
    1.11 +        </antcall>
    1.12 +    </target>
    1.13 +        
    1.14 +    <target name="-do-test" depends="build">
    1.15          <echo level="info" message="Running the tests with bridge enabled. This should succeeds."/>
    1.16          <antcall target="-run-one">
    1.17              <param name="test.cp" value="build/new-api/classes:build/bridge/classes"/>
    1.18 @@ -37,13 +43,25 @@
    1.19          
    1.20          <property name="junit.jar" location="../libs/dist/junit-4.4.jar"/>
    1.21      </target>
    1.22 +
    1.23 +    <target name="-debug-one" if="netbeans.home" unless="nodebug">
    1.24 +        <nbjpdastart addressproperty="jpda.address" name="MessageDigest and Bridges" transport="dt_socket" >
    1.25 +            <sourcepath path="src-new-api:src-bridge:src-test:build/test/classes"/>
    1.26 +            <classpath path="build/new-api/classes:build/bridge/classes:build/test/classes"/>
    1.27 +        </nbjpdastart>
    1.28 +        <property name="debug1" value="-Xdebug"/>
    1.29 +        <property name="debug2" value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/>
    1.30 +    </target>
    1.31      
    1.32 -    <target name="-run-one">
    1.33 +    <target name="-run-one" depends="-debug-one">
    1.34 +        <property name="debug1" value="-Dn1"/>
    1.35 +        <property name="debug2" value="-Dn2"/>
    1.36 +        <property name="include" value="**/*Test"/>
    1.37          <mkdir dir="build/testresults"/>
    1.38          <junit dir="build/test/classes" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true">
    1.39              <batchtest todir="build/testresults">
    1.40                  <fileset dir="build/test/classes">
    1.41 -                    <filename name="**/*Test.class"/>
    1.42 +                    <filename name="${include}.class"/>
    1.43                  </fileset>
    1.44              </batchtest>
    1.45              <classpath>
    1.46 @@ -53,6 +71,8 @@
    1.47              </classpath>
    1.48              <formatter type="brief" usefile="false"/>
    1.49              <formatter type="xml"/>
    1.50 +            <jvmarg value="${debug1}"/>
    1.51 +            <jvmarg value="${debug2}"/>
    1.52          </junit>
    1.53      </target>
    1.54      
    1.55 @@ -66,6 +86,7 @@
    1.56              destdir="build/${version}/classes" 
    1.57              source="1.5" target="1.5"
    1.58              classpath="${cp}"
    1.59 +            debug="true" debuglevel="lines,vars,source"
    1.60          />
    1.61          <copy todir="build/${version}/classes">
    1.62              <fileset dir="src-${version}">
     2.1 --- a/samples/messagedigest/nbproject/project.xml	Sat Jun 14 09:52:25 2008 +0200
     2.2 +++ b/samples/messagedigest/nbproject/project.xml	Sat Jun 14 09:52:25 2008 +0200
     2.3 @@ -48,6 +48,17 @@
     2.4                      <target>clean</target>
     2.5                      <target>build</target>
     2.6                  </action>
     2.7 +                <action name="debug.single">
     2.8 +                    <target>-do-test</target>
     2.9 +                    <context>
    2.10 +                        <property>include</property>
    2.11 +                        <folder>src-test</folder>
    2.12 +                        <format>relative-path-noext</format>
    2.13 +                        <arity>
    2.14 +                            <one-file-only/>
    2.15 +                        </arity>
    2.16 +                    </context>
    2.17 +                </action>
    2.18              </ide-actions>
    2.19              <export>
    2.20                  <type>folder</type>
    2.21 @@ -87,6 +98,7 @@
    2.22                      <ide-action name="rebuild"/>
    2.23                      <ide-action name="clean"/>
    2.24                      <ide-action name="test"/>
    2.25 +                    <ide-action name="debug"/>
    2.26                  </context-menu>
    2.27              </view>
    2.28              <subprojects/>
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/samples/messagedigest/src-bridge/META-INF/services/org.apidesign.spi.security.Digestor	Sat Jun 14 09:52:25 2008 +0200
     3.3 @@ -0,0 +1,4 @@
     3.4 +# BEGIN: day.end.bridges.FriendMetaInf
     3.5 +# registration in bridge's META-INF/services/
     3.6 +org.apidesign.impl.security.extension.BridgeToNew
     3.7 +# END: day.end.bridges.FriendMetaInf
     4.1 --- a/samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToNew.java	Sat Jun 14 09:52:25 2008 +0200
     4.2 +++ b/samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToNew.java	Sat Jun 14 09:52:25 2008 +0200
     4.3 @@ -18,8 +18,15 @@
     4.4   */
     4.5  // BEGIN: day.end.bridges.BridgeToNew
     4.6  public class BridgeToNew extends Digestor<MessageDigest> {
     4.7 +    /** initializes the other bridge, and allow us to eliminate stack overflow */
     4.8 +    private static final BridgeToOld oldBridge = new BridgeToOld();
     4.9 +    
    4.10      @Override
    4.11      protected MessageDigest create(String algorithm) {
    4.12 +        if (oldBridge.isSearching()) {
    4.13 +            return null;
    4.14 +        }
    4.15 +        
    4.16          try {
    4.17              return MessageDigest.getInstance(algorithm);
    4.18          } catch (NoSuchAlgorithmException ex) {
    4.19 @@ -37,5 +44,9 @@
    4.20      protected void update(MessageDigest data, ByteBuffer input) {
    4.21          data.update(input);
    4.22      }
    4.23 +    
    4.24 +    static {
    4.25 +        new BridgeToOld();
    4.26 +    }
    4.27  }
    4.28  // END: day.end.bridges.BridgeToNew
     5.1 --- a/samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToOld.java	Sat Jun 14 09:52:25 2008 +0200
     5.2 +++ b/samples/messagedigest/src-bridge/org/apidesign/impl/security/extension/BridgeToOld.java	Sat Jun 14 09:52:25 2008 +0200
     5.3 @@ -21,6 +21,7 @@
     5.4   */
     5.5  // BEGIN: day.end.bridges.BridgeToOld
     5.6  public class BridgeToOld extends Provider {
     5.7 +    private ThreadLocal<Boolean> searching = new ThreadLocal<Boolean>();
     5.8  
     5.9      public BridgeToOld() {
    5.10          super("spi.Digestor", 1.0, "");
    5.11 @@ -29,13 +30,19 @@
    5.12      
    5.13      @Override
    5.14      public synchronized Service getService(String type, String algorithm) {
    5.15 -        if ("MessageDigest".equals(type)) {
    5.16 -            Digest dig = Digest.getInstance(algorithm);
    5.17 -            if (dig != null) {
    5.18 -                return new ServiceImpl(dig, this, type, algorithm, "", Collections.<String>emptyList(), Collections.<String,String>emptyMap());
    5.19 +        Boolean prev = searching.get();
    5.20 +        try {
    5.21 +            searching.set(Boolean.TRUE);
    5.22 +            if ("MessageDigest".equals(type)) {
    5.23 +                Digest dig = Digest.getInstance(algorithm);
    5.24 +                if (dig != null) {
    5.25 +                    return new ServiceImpl(dig, this, type, algorithm, "", Collections.<String>emptyList(), Collections.<String,String>emptyMap());
    5.26 +                }
    5.27              }
    5.28 +            return null;
    5.29 +        } finally {
    5.30 +            searching.set(prev);
    5.31          }
    5.32 -        return null;
    5.33      }
    5.34  
    5.35      private static class ServiceImpl<Data> extends Service {
    5.36 @@ -80,5 +87,9 @@
    5.37          
    5.38      }
    5.39  
    5.40 +    boolean isSearching() {
    5.41 +        return Boolean.TRUE.equals(searching.get());
    5.42 +    }
    5.43 +
    5.44  }
    5.45  // END: day.end.bridges.BridgeToOld