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