From 64615f17a8c63f692159235e169dbdd14d30b737 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Tue, 13 May 2014 13:06:19 +0200 Subject: Unit Test: Modularize Semantic Version Test / Fix 'excludes' Refactor base semjar unit test class into com.jogamp.junit.util.VersionSemanticsUtil, part of new gluegen-test-util.jar. The new gluegen-test-util.jar shall be used by all other modules to test versioning. --- .../jogamp/common/util/TestVersionSemantics.java | 98 ++++------------ .../jogamp/junit/util/VersionSemanticsUtil.java | 127 +++++++++++++++++++++ 2 files changed, 152 insertions(+), 73 deletions(-) create mode 100644 src/junit/com/jogamp/junit/util/VersionSemanticsUtil.java (limited to 'src/junit/com') 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 excludes; + static { + excludes = new HashSet(); + 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 includes = new HashSet(); + public void testVersionLatest() throws IllegalArgumentException, IOException, URISyntaxException { - final Set excludes = new HashSet(); - 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 diffs = delta.getDifferences(); - System.err.println(diffs.size()+" differences!"); - int diffI = 0; - for(final Iterator 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 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 excludes) + throws IllegalArgumentException, IOException, URISyntaxException + { + final Set includes = new HashSet(); + + 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 diffs = delta.getDifferences(); + System.err.println(diffs.size()+" differences!"); + int diffI = 0; + for(final Iterator 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); + */ + } +} -- cgit v1.2.3