Skip to content

Commit

Permalink
Make sure class without a package, like the ones PowerMock creates ar…
Browse files Browse the repository at this point in the history
…e working (close #343)
  • Loading branch information
henri-tremblay committed Dec 30, 2022
1 parent 8eaac71 commit c9e2dd1
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 4 deletions.
Expand Up @@ -203,18 +203,19 @@ public <T> T createProxy(final Class<T> 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 <T> ClassLoader classLoader(Class<T> toMock) {
return isJdkClass(toMock) ? getClass().getClassLoader() : toMock.getClassLoader();
return isJdkClassOrWithoutPackage(toMock) ? getClass().getClassLoader() : toMock.getClassLoader();
}

private static <T> boolean isJdkClass(Class<T> toMock) {
return toMock.getPackage().getName().startsWith("java.");
private static <T> boolean isJdkClassOrWithoutPackage(Class<T> 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<ClassLoader> classLoadingStrategy() {
Expand Down
8 changes: 8 additions & 0 deletions test-integration/src/test/java/org/itests/PowermockTest.java
Expand Up @@ -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.*;

Expand Down Expand Up @@ -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
}
}

0 comments on commit c9e2dd1

Please sign in to comment.