>From d300f5ec70007f7554f14031b2af2def5ad3f439 Mon Sep 17 00:00:00 2001 From: Julien Lepiller Date: Wed, 25 Oct 2017 23:05:10 +0200 Subject: [PATCH 16/22] gnu: Add java-powermock-reflect. * gnu/packages/java.scm (java-powermock-reflect): New variable. --- gnu/local.mk | 1 + gnu/packages/java.scm | 38 +++++ .../patches/java-powermock-fix-java-files.patch | 178 +++++++++++++++++++++ 3 files changed, 217 insertions(+) create mode 100644 gnu/packages/patches/java-powermock-fix-java-files.patch diff --git a/gnu/local.mk b/gnu/local.mk index 90dc7aec1..8e562c018 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -744,6 +744,7 @@ dist_patch_DATA = \ %D%/packages/patches/intltool-perl-compatibility.patch \ %D%/packages/patches/isl-0.11.1-aarch64-support.patch \ %D%/packages/patches/jacal-fix-texinfo.patch \ + %D%/packages/patches/java-powermock-fix-java-files.patch \ %D%/packages/patches/jbig2dec-ignore-testtest.patch \ %D%/packages/patches/jbig2dec-CVE-2016-9601.patch \ %D%/packages/patches/jbig2dec-CVE-2017-7885.patch \ diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm index fd242c0f2..a77e76ee3 100644 --- a/gnu/packages/java.scm +++ b/gnu/packages/java.scm @@ -6785,3 +6785,41 @@ programming language. The ulitimate goal of the Xerial project is to manage everything as database, including class objects, text format data, data streams, etc.") (license license:asl2.0))) + +(define-public java-powermock-reflect + (package + (name "java-powermock-reflect") + (version "1.7.3") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/powermock/powermock/" + "archive/powermock-" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0sbgi5vqq7k72wzcdjb20s370vyd4hsbnx71pzb8ishml3gy7fwy")) + (patches + (search-patches "java-powermock-fix-java-files.patch")))) + (build-system ant-build-system) + (arguments + `(#:jar-name "java-powermock-reflect.jar" + #:jdk ,icedtea-8 + #:source-dir "powermock-reflect/src/main/java" + #:test-dir "powermock-reflect/src/test")) + (inputs + `(("java-objenesis" ,java-objenesis))) + (native-inputs + `(("junit" ,java-junit) + ("cglib" ,java-cglib) + ("asm" ,java-asm) + ("hamcrest" ,java-hamcrest-core) + ("assertj" ,java-assertj))) + (home-page "https://github.com/powermock/powermock") + (synopsis "Mock library extension framework") + (description "PowerMock is a framework that extends other mock libraries +such as EasyMock with more powerful capabilities. PowerMock uses a custom +classloader and bytecode manipulation to enable mocking of static methods, +constructors, final classes and methods, private methods, removal of static +initializers and more. By using a custom classloader no changes need to be +done to the IDE or continuous integration servers which simplifies adoption.") + (license license:asl2.0))) diff --git a/gnu/packages/patches/java-powermock-fix-java-files.patch b/gnu/packages/patches/java-powermock-fix-java-files.patch new file mode 100644 index 000000000..6b9581813 --- /dev/null +++ b/gnu/packages/patches/java-powermock-fix-java-files.patch @@ -0,0 +1,178 @@ +This patch fixes build issues caused by the java compiler not finding the +correct types on some statements. + +From 1ac84b58b4383fa118d98c35956d722d11cf449e Mon Sep 17 00:00:00 2001 +From: Julien Lepiller +Date: Tue, 22 Aug 2017 20:40:27 +0200 +Subject: [PATCH] Fix java files. + +--- + .../internal/impl/DelegatingPowerMockRunner.java | 13 +++++++--- + .../java/org/powermock/reflect/WhiteBoxTest.java | 30 +++++++++++----------- + .../reflect/internal/proxy/ClassFactory.java | 6 ++--- + 3 files changed, 27 insertions(+), 22 deletions(-) + +diff --git a/powermock-modules/powermock-module-junit4/src/main/java/org/powermock/modules/junit4/internal/impl/DelegatingPowerMockRunner.java b/powermock-modules/powermock-module-junit4/src/main/java/org/powermock/modules/junit4/internal/impl/DelegatingPowerMockRunner.java +index 301f854..caecbbd 100644 +--- a/powermock-modules/powermock-module-junit4/src/main/java/org/powermock/modules/junit4/internal/impl/DelegatingPowerMockRunner.java ++++ b/powermock-modules/powermock-module-junit4/src/main/java/org/powermock/modules/junit4/internal/impl/DelegatingPowerMockRunner.java +@@ -98,12 +98,17 @@ implements PowerMockJUnitRunnerDelegate, Filterable { + @Override + public Runner call() throws Exception { + try { +- return Whitebox.invokeConstructor( +- testClass.isAnnotationPresent(PowerMockRunnerDelegate.class) +- ? testClass.getAnnotation(PowerMockRunnerDelegate.class).value() +- : PowerMockRunnerDelegate.DefaultJUnitRunner.class, ++ if(testClass.isAnnotationPresent(PowerMockRunnerDelegate.class)) { ++ return Whitebox.invokeConstructor( ++ testClass.getAnnotation(PowerMockRunnerDelegate.class).value(), + new Class[] {Class.class}, + new Object[] {testClass}); ++ } else { ++ return Whitebox.invokeConstructor( ++ PowerMockRunnerDelegate.DefaultJUnitRunner.class, ++ new Class[] {Class.class}, ++ new Object[] {testClass}); ++ } + } catch (ConstructorNotFoundException rootProblem) { + if (testClass.isAnnotationPresent(PowerMockRunnerDelegate.class) + && JUnitVersion.isGreaterThanOrEqualTo("4.5")) { +diff --git a/powermock-reflect/src/test/java/org/powermock/reflect/WhiteBoxTest.java b/powermock-reflect/src/test/java/org/powermock/reflect/WhiteBoxTest.java +index bf1e2e3..0d60487 100644 +--- a/powermock-reflect/src/test/java/org/powermock/reflect/WhiteBoxTest.java ++++ b/powermock-reflect/src/test/java/org/powermock/reflect/WhiteBoxTest.java +@@ -248,7 +248,7 @@ public class WhiteBoxTest { + + @Test + public void testMethodWithPrimitiveAndWrappedInt_primtive_wrapped() throws Exception { +- assertEquals(17, Whitebox.invokeMethod(new ClassWithPrivateMethods(), "methodWithPrimitiveAndWrappedInt", ++ assertEquals((Integer)17, Whitebox.invokeMethod(new ClassWithPrivateMethods(), "methodWithPrimitiveAndWrappedInt", + new Class[]{int.class, Integer.class}, 9, Integer.valueOf(8))); + } + +@@ -257,7 +257,7 @@ public class WhiteBoxTest { + int expected = 123; + Whitebox.setInternalState(ClassWithInternalState.class, "staticState", expected); + assertEquals(expected, ClassWithInternalState.getStaticState()); +- assertEquals(expected, Whitebox.getInternalState(ClassWithInternalState.class, "staticState")); ++ assertEquals(expected, (int)Whitebox.getInternalState(ClassWithInternalState.class, "staticState")); + } + + @Test +@@ -334,25 +334,25 @@ public class WhiteBoxTest { + @Test + public void testInvokeVarArgsMethod_multipleValues() throws Exception { + ClassWithPrivateMethods tested = new ClassWithPrivateMethods(); +- assertEquals(6, Whitebox.invokeMethod(tested, "varArgsMethod", 1, 2, 3)); ++ assertEquals(6, (int)Whitebox.invokeMethod(tested, "varArgsMethod", 1, 2, 3)); + } + + @Test + public void testInvokeVarArgsMethod_noArguments() throws Exception { + ClassWithPrivateMethods tested = new ClassWithPrivateMethods(); +- assertEquals(0, Whitebox.invokeMethod(tested, "varArgsMethod")); ++ assertEquals(0, (int)Whitebox.invokeMethod(tested, "varArgsMethod")); + } + + @Test + public void testInvokeVarArgsMethod_oneArgument() throws Exception { + ClassWithPrivateMethods tested = new ClassWithPrivateMethods(); +- assertEquals(4, Whitebox.invokeMethod(tested, "varArgsMethod", 2)); ++ assertEquals(4, (int)Whitebox.invokeMethod(tested, "varArgsMethod", 2)); + } + + @Test + public void testInvokeVarArgsMethod_invokeVarArgsWithOneArgument() throws Exception { + ClassWithPrivateMethods tested = new ClassWithPrivateMethods(); +- assertEquals(1, Whitebox.invokeMethod(tested, "varArgsMethod", new Class[]{int[].class}, 1)); ++ assertEquals(1, (int)Whitebox.invokeMethod(tested, "varArgsMethod", new Class[]{int[].class}, 1)); + } + + @Test +@@ -376,7 +376,7 @@ public class WhiteBoxTest { + ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState() { + }; + Whitebox.setInternalState(tested, fieldName, value); +- assertEquals(value, Whitebox.getInternalState(tested, fieldName)); ++ assertEquals(value, (int)Whitebox.getInternalState(tested, fieldName)); + } + + @Test +@@ -387,8 +387,8 @@ public class WhiteBoxTest { + ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState() { + }; + Whitebox.setInternalState(tested, fieldName, value); +- assertEquals(value, Whitebox.getInternalState(tested, fieldName)); +- assertEquals(-1, Whitebox.getInternalState(tested, fieldName, ClassWithInternalState.class)); ++ assertEquals(value, (int)Whitebox.getInternalState(tested, fieldName)); ++ assertEquals(-1, (int)Whitebox.getInternalState(tested, fieldName, ClassWithInternalState.class)); + } + + @Test(expected = IllegalArgumentException.class) +@@ -398,7 +398,7 @@ public class WhiteBoxTest { + ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState() { + }; + Whitebox.setInternalState(tested, fieldName, new Object()); +- assertEquals(value, Whitebox.getInternalState(tested, fieldName)); ++ assertEquals(value, (int)Whitebox.getInternalState(tested, fieldName)); + } + + @Test(expected = IllegalArgumentException.class) +@@ -408,7 +408,7 @@ public class WhiteBoxTest { + ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState() { + }; + Whitebox.setInternalState(tested, fieldName, (Object) null); +- assertEquals(value, Whitebox.getInternalState(tested, fieldName)); ++ assertEquals(value, (int)Whitebox.getInternalState(tested, fieldName)); + } + + @Test +@@ -417,8 +417,8 @@ public class WhiteBoxTest { + ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState(); + Whitebox.setInternalState(tested, int.class, value); + assertEquals(value, (int) Whitebox.getInternalState(tested, int.class)); +- assertEquals(value, Whitebox.getInternalState(tested, "anotherInternalState")); +- assertEquals(value, Whitebox.getInternalState(tested, "anotherInternalState", ++ assertEquals(value, (int)Whitebox.getInternalState(tested, "anotherInternalState")); ++ assertEquals(value, (int)Whitebox.getInternalState(tested, "anotherInternalState", + ClassWithChildThatHasInternalState.class)); + } + +@@ -429,7 +429,7 @@ public class WhiteBoxTest { + Whitebox.setInternalState(tested, int.class, value, ClassWithInternalState.class); + assertEquals(42, (int) Whitebox.getInternalState(tested, int.class)); + assertEquals(value, (int) Whitebox.getInternalState(tested, int.class, ClassWithInternalState.class)); +- assertEquals(value, Whitebox.getInternalState(tested, "staticState", ClassWithInternalState.class)); ++ assertEquals(value, (int)Whitebox.getInternalState(tested, "staticState", ClassWithInternalState.class)); + } + + @Test +@@ -619,7 +619,7 @@ public class WhiteBoxTest { + @Test + public void testInvokeMethodWithBothNormalAndVarArgsParameter() throws Exception { + ClassWithPrivateMethods tested = new ClassWithPrivateMethods(); +- assertEquals(4, Whitebox.invokeMethod(tested, "varArgsMethod2", 1, 2, 3)); ++ assertEquals(4, (int)Whitebox.invokeMethod(tested, "varArgsMethod2", 1, 2, 3)); + } + + @Test +diff --git a/powermock-reflect/src/test/java/org/powermock/reflect/internal/proxy/ClassFactory.java b/powermock-reflect/src/test/java/org/powermock/reflect/internal/proxy/ClassFactory.java +index a5e5fda..14b8bbe 100644 +--- a/powermock-reflect/src/test/java/org/powermock/reflect/internal/proxy/ClassFactory.java ++++ b/powermock-reflect/src/test/java/org/powermock/reflect/internal/proxy/ClassFactory.java +@@ -1,8 +1,8 @@ + package org.powermock.reflect.internal.proxy; + +-import net.sf.cglib.asm.ClassWriter; +-import net.sf.cglib.asm.MethodVisitor; +-import net.sf.cglib.asm.Opcodes; ++import org.objectweb.asm.ClassWriter; ++import org.objectweb.asm.MethodVisitor; ++import org.objectweb.asm.Opcodes; + + class ClassFactory implements Opcodes { + +-- +2.14.1 + -- 2.14.3