From c9e2dd1140672300139f75ec66db0fe297d1ed9d Mon Sep 17 00:00:00 2001 From: Henri Tremblay Date: Fri, 30 Dec 2022 15:21:10 -0500 Subject: [PATCH] Make sure class without a package, like the ones PowerMock creates are working (close #343) --- .../java/org/easymock/internal/ClassProxyFactory.java | 9 +++++---- .../src/test/java/org/itests/PowermockTest.java | 8 ++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/easymock/internal/ClassProxyFactory.java b/core/src/main/java/org/easymock/internal/ClassProxyFactory.java index ce72b459e..f06115b5c 100644 --- a/core/src/main/java/org/easymock/internal/ClassProxyFactory.java +++ b/core/src/main/java/org/easymock/internal/ClassProxyFactory.java @@ -203,18 +203,19 @@ public T createProxy(final Class toMock, InvocationHandler handler, private String classPackage(Class toMock) { // We want to create the mock in the same class as the original class when the class is in default scope - if (isJdkClass(toMock)) { + if (isJdkClassOrWithoutPackage(toMock)) { return "org.easymock.mocks."; } return toMock.getPackage().getName() + "."; } private ClassLoader classLoader(Class toMock) { - return isJdkClass(toMock) ? getClass().getClassLoader() : toMock.getClassLoader(); + return isJdkClassOrWithoutPackage(toMock) ? getClass().getClassLoader() : toMock.getClassLoader(); } - private static boolean isJdkClass(Class toMock) { - return toMock.getPackage().getName().startsWith("java."); + private static boolean isJdkClassOrWithoutPackage(Class toMock) { + Package aPackage = toMock.getPackage(); + return aPackage == null || aPackage.getName().startsWith("java."); // we need to verify for null since some dynamic classes have no package } private ClassLoadingStrategy classLoadingStrategy() { diff --git a/test-integration/src/test/java/org/itests/PowermockTest.java b/test-integration/src/test/java/org/itests/PowermockTest.java index 3b26e77e3..dcbe57e9c 100644 --- a/test-integration/src/test/java/org/itests/PowermockTest.java +++ b/test-integration/src/test/java/org/itests/PowermockTest.java @@ -22,8 +22,11 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import java.net.URL; + import static org.easymock.EasyMock.expect; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import static org.powermock.api.easymock.PowerMock.*; @@ -72,5 +75,10 @@ public void mockType() { assertEquals(getClass(), EasyMockSupport.getMockedClass(mock)); } + @Test + public void mockJDK() { + Object mock = PowerMock.createMock(URL.class); + assertNull(mock.getClass().getPackage()); // the mock will have no package and we expect EasyMock to not crash + } }