[
https://issues.jboss.org/browse/JASSIST-205?page=com.atlassian.jira.plugi...
]
Scott Marlow commented on JASSIST-205:
--------------------------------------
Along with the previous comment, the updated failure exception (after reducing the
PowerMock code to pass a minimal replacement string) that goes with it:
{quote}
Exception Details:
Location:
PowerMockTest.testWaitForExitMockMonitors()V @71: iconst_0
Reason:
Type top (current frame, locals[4]) is not assignable to long (stack map, locals[4])
Current Frame:
bci: @68
flags: { }
locals: { 'PowerMockTest', 'java/lang/Object',
'PowerMockTest$MyClassUnderTest', 'java/lang/Object',
top, null, top, null }
stack: { 'java/lang/Object', null }
Stackmap Frame:
bci: @71
flags: { }
locals: { 'PowerMockTest', 'java/lang/Object',
'PowerMockTest$MyClassUnderTest', 'java/lang/Object',
long, long_2nd, top, null }
stack: { }
Bytecode:
0000000: 2a12 3f03 bd00 0212 41b8 0047 1249 b800
0000010: 4f4c 2bb2 0052 a500 04b1 03bd 0002 b800
0000020: 0312 02b8 0004 4cbb 0005 592b b700 064d
0000030: 2b09 3704 4e01 3a07 2d01 a500 032b 4e01
0000040: 3a05 2d01 a500 0303 bd00 02b8 0009 2cb6
0000050: 000a b800 0bb1
Stackmap Table:
append_frame(@26,Object[#2])
full_frame(@61,{Object[#12],Object[#2],Object[#5],Object[#2],Long,Top,Null},{})
full_frame(@71,{Object[#12],Object[#2],Object[#5],Object[#2],Long,Top,Null},{})
{quote}
The string now passed to MethodCall.replace is "{Object classOrInstance = null;
if($0!=null);}"
"VerifyError: Inconsistent stackmap frames" from PowerMock
(using Javassist 3.18)
---------------------------------------------------------------------------------
Key: JASSIST-205
URL:
https://issues.jboss.org/browse/JASSIST-205
Project: Javassist
Issue Type: Bug
Affects Versions: 3.18.0-GA
Environment: jdk1.7.0_21, Win8amd64
Reporter: Ryan Kenney
Assignee: Shigeru Chiba
Attachments: PowerMockDemo.zip, powermockdemoDEBUG.txt, PowerMockTest.class,
PowerMockTest.javap, PowerMockTestCorrectedOffsets.javap, PowerMockTest_jdk8.javap,
TEST-PowerMockTest.xml
Apologies if this is a duplicate of JASSIST-204. I didn't delve into the actual
Javassist APIs used, I'm simply seeing an error in my PowerMock usage. Fortunately,
this ticket provides a very simple test case for reproducibility.
I was prompted to open a Javassist ticket by the following PowerMock ticket:
https://code.google.com/p/powermock/issues/detail?id=355
I'm attaching a very simple maven project with a unit test to demonstrate the
problem.
Here are the guts of the failing unit test:
{code}
@RunWith(PowerMockRunner.class)
@PrepareForTest( {MyClassUnderTest.class} )
public class PowerMockTest {
/**************************************************************************
* Demonstrates an "Inconsistent stackmap frames" exception that results
* from PowerMock 1.5 and JDK 7.
*************************************************************************/
@Test
public void testWaitForExitMockMonitors() throws InterruptedException {
resetAll();
Object mockMonitor = createStrictMock(Object.class);
MyClassUnderTest myClass = new MyClassUnderTest(mockMonitor);
mockMonitor.wait(0);
mockMonitor.notifyAll();
replayAll();
myClass .run();
verifyAll();
}
public static class MyClassUnderTest {
private Object m_monitor;
public MyClassUnderTest(Object monitor) {
m_monitor = monitor;
}
public void run() throws InterruptedException {
m_monitor.wait(0);
m_monitor.notifyAll();
}
}
}
{code}
And here is my error:
{code}
java.lang.VerifyError: Inconsistent stackmap frames at branch target 283 in method
com.scea.dart.cmd.targetcontrol.target.process.PowerMockTest.testWaitForExitMockMonitors()V
at offset 274
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2451)
at java.lang.Class.privateGetPublicMethods(Class.java:2571)
at java.lang.Class.getMethods(Class.java:1429)
at
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.getTestMethods(PowerMockJUnit44RunnerDelegateImpl.java:95)
at
org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.<init>(PowerMockJUnit44RunnerDelegateImpl.java:71)
at
org.powermock.modules.junit4.internal.impl.PowerMockJUnit49RunnerDelegateImpl.<init>(PowerMockJUnit49RunnerDelegateImpl.java:29)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at
org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:143)
at
org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:39)
at
org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createTestDelegators(AbstractTestSuiteChunkerImpl.java:217)
at
org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.<init>(JUnit4TestSuiteChunkerImpl.java:59)
at
org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.<init>(AbstractCommonPowerMockRunner.java:32)
at org.powermock.modules.junit4.PowerMockRunner.<init>(PowerMockRunner.java:33)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31)
at
org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at
org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira