diff options
-rw-r--r-- | make/build-test.xml | 15 | ||||
-rwxr-xr-x | make/scripts/runtest.sh | 4 | ||||
-rw-r--r-- | src/junit/com/jogamp/common/util/TestVersionSemantics.java | 98 | ||||
-rw-r--r-- | src/junit/com/jogamp/junit/util/VersionSemanticsUtil.java | 127 |
4 files changed, 167 insertions, 77 deletions
diff --git a/make/build-test.xml b/make/build-test.xml index a4ebdb3..bb36243 100644 --- a/make/build-test.xml +++ b/make/build-test.xml @@ -32,9 +32,11 @@ <property name="test.base.dir" value="${gluegen.root}/src/junit" /> <property name="test.junit.rel" value="com/jogamp" /> + <property name="test.junit.util.rel" value="com/jogamp/junit/util" /> <property name="test.junit.generation.rel" value="${test.junit.rel}/gluegen/test/junit/generation" /> <property name="test.junit.generation.dir" value="${test.base.dir}/${test.junit.generation.rel}" /> + <property name="build" location="${project.root}/${rootrel.build}" /> <property name="test.dir" value="${gluegen.root}/${rootrel.build}/test"/> <property name="results" value="${test.dir}/results" /> <property name="build_t" value="${test.dir}/build" /> @@ -60,6 +62,7 @@ <property name="gluegen-rt.jar" location="${gluegen.root}/${rootrel.build}/gluegen-rt.jar" /> <property name="gluegen.lib" value="${gluegen.root}/${rootrel.build}/obj" /> + <property name="gluegen-test-util.jar" location="${build}/gluegen-test-util.jar" /> <property name="TestJarsInJar.jar" location="${gluegen.root}/make/lib/TestJarsInJar.jar" /> <property name="gluegen-test.jar" location="${build_t}/gluegen-test.jar" /> <property name="gluegen-test.apk" location="${build_t}/gluegen-test.apk" /> @@ -85,10 +88,11 @@ <pathelement location="${TestJarsInJar.jar}" /> <pathelement location="${gluegen-rt.jar}" /> <pathelement location="${gluegen.jar}" /> + <pathelement location="${gluegen-test-util.jar}" /> <pathelement location="${gluegen-test.jar}" /> </path> - <property name="junit.run.jars" value="${junit.jar}${path.separator}${ant.jar}${path.separator}${semver.jar}${path.separator}${TestJarsInJar.jar}${path.separator}${gluegen.root}/${rootrel.build}/gluegen-rt.jar${path.separator}${gluegen.root}/${rootrel.build}/gluegen.jar${path.separator}${build_t}/gluegen-test.jar"/> - <property name="junit.run.remote.jars" value="${junit.jar}${path.separator}${env.TARGET_ANT_HOME}/lib/ant.jar${path.separator}${env.TARGET_ANT_HOME}/lib/ant-junit.jar${path.separator}${env.TARGET_ANT_HOME}/lib/ant-junit4.jar${path.separator}${env.TARGET_ANT_HOME}/lib/semantic-versioning/semver.jar${path.separator}${gluegen.root}/make/lib/TestJarsInJar.jar${path.separator}${gluegen.root}/${rootrel.build}/gluegen-rt.jar${path.separator}${gluegen.root}/${rootrel.build}/gluegen.jar${path.separator}${build_t}/gluegen-test.jar"/> + <property name="junit.run.jars" value="${junit.jar}${path.separator}${ant.jar}${path.separator}${semver.jar}${path.separator}${TestJarsInJar.jar}${path.separator}${gluegen.root}/${rootrel.build}/gluegen-rt.jar${path.separator}${gluegen.root}/${rootrel.build}/gluegen.jar${path.separator}${build}/gluegen-test-util.jar${path.separator}${build_t}/gluegen-test.jar"/> + <property name="junit.run.remote.jars" value="${junit.jar}${path.separator}${env.TARGET_ANT_HOME}/lib/ant.jar${path.separator}${env.TARGET_ANT_HOME}/lib/ant-junit.jar${path.separator}${env.TARGET_ANT_HOME}/lib/ant-junit4.jar${path.separator}${semver.jar}${path.separator}${gluegen.root}/make/lib/TestJarsInJar.jar${path.separator}${gluegen.root}/${rootrel.build}/gluegen-rt.jar${path.separator}${gluegen.root}/${rootrel.build}/gluegen.jar${path.separator}${build}/gluegen-test-util.jar${path.separator}${build_t}/gluegen-test.jar"/> <property name="junit.run.remote.apks" value="${gluegen.root}/${rootrel.build}/jogamp-android-launcher.apk${path.separator}${ant-junit-all.apk}${path.separator}${gluegen.root}/${rootrel.build}/gluegen-rt-android-${android.abi}.apk${path.separator}${build_t}/gluegen-test.apk${path.separator}${gluegen.root}/make/lib/TestJarsInJar.apk"/> <property name="stub.includes.dir" value="stub_includes" /> <!-- NOTE: this MUST be relative for FileSet --> @@ -166,9 +170,16 @@ <src path="${build_t.gen}" /> </javac> + <jar destfile="${gluegen-test-util.jar}"> + <fileset dir="${build_t.java}"> + <include name="${test.junit.util.rel}/**/*.class"/> + </fileset> + </jar> + <jar destfile="${gluegen-test.jar}"> <fileset dir="${build_t.java}"> <include name="${test.junit.rel}/**/*.class"/> + <exclude name="${test.junit.util.rel}/**"/> </fileset> <fileset dir="${build_t.lib}"> <include name="*${native.library.suffix}" /> diff --git a/make/scripts/runtest.sh b/make/scripts/runtest.sh index c6bc1b7..c054bc1 100755 --- a/make/scripts/runtest.sh +++ b/make/scripts/runtest.sh @@ -57,8 +57,8 @@ rm -f $LOG #D_ARGS="-Djogamp.debug=all" function onetest() { - USE_CLASSPATH=lib/junit.jar:$ANT_JARS:lib/semantic-versioning/semver.jar:"$builddir"/../make/lib/TestJarsInJar.jar:"$builddir"/gluegen-rt.jar:"$builddir"/gluegen.jar:"$builddir"/test/build/gluegen-test.jar - #USE_CLASSPATH=lib/junit.jar:$ANT_JARS:lib/semantic-versioning/semver.jar:"$builddir"/../make/lib/TestJarsInJar.jar:"$builddir"/gluegen-rt-alt.jar:"$builddir"/gluegen.jar:"$builddir"/test/build/gluegen-test.jar + USE_CLASSPATH=lib/junit.jar:$ANT_JARS:lib/semantic-versioning/semver.jar:"$builddir"/../make/lib/TestJarsInJar.jar:"$builddir"/gluegen-rt.jar:"$builddir"/gluegen.jar:"$builddir"/gluegen-test-util.jar:"$builddir"/test/build/gluegen-test.jar + #USE_CLASSPATH=lib/junit.jar:$ANT_JARS:lib/semantic-versioning/semver.jar:"$builddir"/../make/lib/TestJarsInJar.jar:"$builddir"/gluegen-rt-alt.jar:"$builddir"/gluegen.jar:"$builddir"/gluegen-test-util.jar:"$builddir"/test/build/gluegen-test.jar libspath="$builddir"/test/build/natives #USE_CLASSPATH=lib/junit.jar:$ANT_JARS:"$builddir"/../make/lib/TestJarsInJar.jar:"$builddir"/classes:"$builddir"/test/build/classes #libspath="$builddir"/obj:"$builddir"/test/build/natives: diff --git a/src/junit/com/jogamp/common/util/TestVersionSemantics.java b/src/junit/com/jogamp/common/util/TestVersionSemantics.java index a4f33b2..dba42b5 100644 --- a/src/junit/com/jogamp/common/util/TestVersionSemantics.java +++ b/src/junit/com/jogamp/common/util/TestVersionSemantics.java @@ -29,27 +29,21 @@ package com.jogamp.common.util; import java.io.File; import java.io.IOException; -import java.net.URI; import java.net.URISyntaxException; import java.util.HashSet; -import java.util.Iterator; import java.util.Set; -import org.junit.Assert; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runners.MethodSorters; import org.osjava.jardiff.DiffCriteria; import org.osjava.jardiff.SimpleDiffCriteria; -import org.semver.Comparer; import org.semver.Delta; -import org.semver.Dumper; -import org.semver.Delta.Difference; import com.jogamp.common.GlueGenVersion; -import com.jogamp.common.util.IOUtil; -import com.jogamp.common.util.JarUtil; import com.jogamp.common.util.VersionNumberString; +import com.jogamp.junit.util.JunitTracer; +import com.jogamp.junit.util.VersionSemanticsUtil; /** * Compares a defined previous version with the current version. @@ -70,80 +64,38 @@ import com.jogamp.common.util.VersionNumberString; * @throws URISyntaxException */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) -public class TestVersionSemantics { - public static final String jarFile = "gluegen-rt.jar"; - public static final VersionNumberString preVersion = new VersionNumberString("2.1.5"); - public static final Delta.CompatibilityType expectedCompatibilityType = Delta.CompatibilityType.BACKWARD_COMPATIBLE_USER; +public class TestVersionSemantics extends JunitTracer { + static final String jarFile = "gluegen-rt.jar"; + static final VersionNumberString preVersionNumber = new VersionNumberString("2.1.5"); + static final Delta.CompatibilityType expectedCompatibilityType = Delta.CompatibilityType.BACKWARD_COMPATIBLE_USER; + + static final DiffCriteria diffCriteria = new SimpleDiffCriteria(); + // static final DiffCriteria diffCriteria = new PublicDiffCriteria(); + + static final JogampVersion curVersion = GlueGenVersion.getInstance(); + static final VersionNumberString curVersionNumber = new VersionNumberString(curVersion.getImplementationVersion()); + + static final Set<String> excludes; + static { + excludes = new HashSet<String>(); + excludes.add("jogamp.common.**"); + excludes.add("jogamp.android.**"); + } @Test - public void testVersion01() throws IllegalArgumentException, IOException, URISyntaxException { - - final GlueGenVersion glueGenVersion = GlueGenVersion.getInstance(); - final VersionNumberString curVersion = new VersionNumberString(glueGenVersion.getImplementationVersion()); - - final File previousJar = new File("lib/v"+preVersion.getVersionString()+"/"+jarFile); - - final ClassLoader rootCL = TestVersionSemantics.class.getClassLoader(); - - // Get containing JAR file "TestJarsInJar.jar" and add it to the TempJarCache - final URI currentJarURI = JarUtil.getJarSubURI(GlueGenVersion.class.getName(), rootCL); - final String currentJarLocS = IOUtil.decodeURIIfFilePath(currentJarURI); - final File currentJar = new File(currentJarLocS); - - final DiffCriteria diffCriteria = new SimpleDiffCriteria(); - - final Set<String> includes = new HashSet<String>(); + public void testVersionLatest() throws IllegalArgumentException, IOException, URISyntaxException { - final Set<String> excludes = new HashSet<String>(); - excludes.add("jogamp/**"); + final File previousJar = new File("lib/v"+preVersionNumber.getVersionString()+"/"+jarFile); - final Comparer comparer = new Comparer(diffCriteria, previousJar, currentJar, includes, excludes); - final Delta delta = comparer.diff(); + final ClassLoader currentCL = TestVersionSemantics.class.getClassLoader(); - //Validates that computed and provided compatibility type are compatible. - final Delta.CompatibilityType detectedCompatibilityType = delta.computeCompatibilityType(); - final int comp = detectedCompatibilityType.compareTo(expectedCompatibilityType); - final boolean compOK = 0 >= comp; - final String compS; - if( 0 > comp ) { - compS = "< "; - } else if ( 0 == comp ) { - compS = "=="; - } else { - compS = "> "; - } - - System.err.println("GlueGen Semantic Versioning Test"); - System.err.println("Previous version: "+preVersion+" - "+previousJar.toString()); - System.err.println("Current version: "+curVersion+" - "+currentJar.toString()); - System.err.println("Compat. expected: "+expectedCompatibilityType); - System.err.println("Compat. pre -> cur: "+detectedCompatibilityType); - System.err.println("Compat. result: detected "+compS+" expected -> "+(compOK ? "OK" : "ERROR")); - - final Set<Difference> diffs = delta.getDifferences(); - System.err.println(diffs.size()+" differences!"); - int diffI = 0; - for(final Iterator<Difference> iter = diffs.iterator(); iter.hasNext(); diffI++) { - final Difference diff = iter.next(); - System.err.printf("Diff %4d: %-11s in class %s%n", diffI, diff.getClass().getSimpleName(), diff.getClassName()); - } - Dumper.dump(delta); - - Assert.assertTrue("Current version "+curVersion+" is "+compS+" of previous version "+preVersion, compOK); - - /*** - //Provide version number for previous and current Jar files. - final Version previous = Version.parse(...); - final Version current = Version.parse(...); - - //Validates that current version number is valid based on semantic versioning principles. - final boolean compatible = delta.validate(previous, current); - */ + VersionSemanticsUtil.testVersion(diffCriteria, expectedCompatibilityType, + previousJar, preVersionNumber, + curVersion.getClass(), currentCL, curVersionNumber, excludes); } public static void main(String args[]) throws IOException { String tstname = TestVersionSemantics.class.getName(); org.junit.runner.JUnitCore.main(tstname); } - } diff --git a/src/junit/com/jogamp/junit/util/VersionSemanticsUtil.java b/src/junit/com/jogamp/junit/util/VersionSemanticsUtil.java new file mode 100644 index 0000000..dd5dcd0 --- /dev/null +++ b/src/junit/com/jogamp/junit/util/VersionSemanticsUtil.java @@ -0,0 +1,127 @@ +/** + * Copyright 2014 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ +package com.jogamp.junit.util; + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.junit.Assert; +import org.osjava.jardiff.DiffCriteria; +import org.semver.Comparer; +import org.semver.Delta; +import org.semver.Dumper; +import org.semver.Delta.Difference; + +import com.jogamp.common.util.IOUtil; +import com.jogamp.common.util.JarUtil; +import com.jogamp.common.util.VersionNumberString; + +public class VersionSemanticsUtil { + + public static void testVersion(final DiffCriteria diffCriteria, + final Delta.CompatibilityType expectedCompatibilityType, + final File previousJar, final VersionNumberString preVersionNumber, + final Class<?> currentJarClazz, final ClassLoader currentJarCL, final VersionNumberString curVersionNumber, + final Set<String> excludes) + throws IllegalArgumentException, IOException, URISyntaxException + { + // Get containing JAR file "TestJarsInJar.jar" and add it to the TempJarCache + final URI currentJarURI = JarUtil.getJarSubURI(currentJarClazz.getName(), currentJarCL); + final String currentJarLocS = IOUtil.decodeURIIfFilePath(currentJarURI); + final File currentJar = new File(currentJarLocS); + testVersion(diffCriteria, expectedCompatibilityType, + previousJar, preVersionNumber, + currentJar, curVersionNumber, + excludes); + } + + public static void testVersion(final DiffCriteria diffCriteria, + final Delta.CompatibilityType expectedCompatibilityType, + final File previousJar, final VersionNumberString preVersionNumber, + final File currentJar, final VersionNumberString curVersionNumber, + final Set<String> excludes) + throws IllegalArgumentException, IOException, URISyntaxException + { + final Set<String> includes = new HashSet<String>(); + + final Comparer comparer = new Comparer(diffCriteria, previousJar, currentJar, includes, excludes); + final Delta delta = comparer.diff(); + + //Validates that computed and provided compatibility type are compatible. + final Delta.CompatibilityType detectedCompatibilityType = delta.computeCompatibilityType(); + final int comp = detectedCompatibilityType.compareTo(expectedCompatibilityType); + final boolean compOK = 0 >= comp; + final String compS; + if( 0 > comp ) { + compS = "< "; + } else if ( 0 == comp ) { + compS = "=="; + } else { + compS = "> "; + } + + System.err.println("Semantic Version Test"); + System.err.println("Previous version: "+preVersionNumber+" - "+previousJar.toString()); + System.err.println("Current version: "+curVersionNumber+" - "+currentJar.toString()); + System.err.println("Compat. expected: "+expectedCompatibilityType); + System.err.println("Compat. detected: "+detectedCompatibilityType); + System.err.println("Compat. result: detected "+compS+" expected -> "+(compOK ? "OK" : "ERROR")); + final String resS; + if( compOK ) { + resS = "Current version "+curVersionNumber+" is "+expectedCompatibilityType+" to previous version "+preVersionNumber+", actually "+detectedCompatibilityType; + } else { + resS = "Current version "+curVersionNumber+" is not "+expectedCompatibilityType+" to previous version "+preVersionNumber+", but "+detectedCompatibilityType; + } + System.err.println(resS); + + final Set<Difference> diffs = delta.getDifferences(); + System.err.println(diffs.size()+" differences!"); + int diffI = 0; + for(final Iterator<Difference> iter = diffs.iterator(); iter.hasNext(); diffI++) { + final Difference diff = iter.next(); + System.err.printf("Diff %4d: %-11s in class %s%n", diffI, diff.getClass().getSimpleName(), diff.getClassName()); + } + Dumper.dump(delta); + + Assert.assertTrue(resS, compOK); + + /*** + //Provide version number for previous and current Jar files. + final Version previous = Version.parse(...); + final Version current = Version.parse(...); + + //Validates that current version number is valid based on semantic versioning principles. + final boolean compatible = delta.validate(previous, current); + */ + } +} |