aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core.test/src/org
diff options
context:
space:
mode:
authorMarc R. Hoffmann <hoffmann@mountainminds.com>2012-11-02 22:58:50 +0100
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2012-11-02 22:58:50 +0100
commit1e1df5b34d6c24c422924441ffd569d7570a6d17 (patch)
treebd2118248bf32cf1c4378c598b1e4888e694e2f9 /org.jacoco.core.test/src/org
parentebee6e52c994fbcb5f8c954ca75c5513c9fafaba (diff)
downloadjacoco-1e1df5b34d6c24c422924441ffd569d7570a6d17.tar.gz
Update to ASM 4.1
With ASM 4.1 implicit initial frames are no longer processed as events. This required a rework and simplification of the frame processing logic.
Diffstat (limited to 'org.jacoco.core.test/src/org')
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/internal/instr/FrameTrackerTest.java84
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeInserterTest.java180
2 files changed, 71 insertions, 193 deletions
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/FrameTrackerTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/FrameTrackerTest.java
index 8a7d694a..2b286cbe 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/FrameTrackerTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/FrameTrackerTest.java
@@ -75,7 +75,8 @@ public class FrameTrackerTest {
// Ignore labels inserted by the tracker
}
};
- FrameTracker tracker = new FrameTracker(noLabels, "Test");
+ FrameTracker tracker = new FrameTracker("Test", ACC_STATIC, "test",
+ "()V", noLabels);
before.accept(tracker);
mv.instructions.accept(tracker);
tracker.insertFrame();
@@ -90,47 +91,101 @@ public class FrameTrackerTest {
@Test(expected = IllegalArgumentException.class)
public void testVisitFrameIllegalFrameType() {
- FrameTracker tracker = new FrameTracker(null, "Test");
+ FrameTracker tracker = new FrameTracker("Test", ACC_STATIC, "test",
+ "()V", null);
tracker.visitFrame(F_APPEND, 0, null, 0, null);
}
@Test(expected = IllegalArgumentException.class)
public void testVisitInsnIllegalOpcode() {
- FrameTracker tracker = new FrameTracker(null, "Test");
+ FrameTracker tracker = new FrameTracker("Test", ACC_STATIC, "test",
+ "()V", null);
tracker.visitInsn(GOTO);
}
@Test(expected = IllegalArgumentException.class)
public void testVisitIntInsnIllegalOpcode() {
- FrameTracker tracker = new FrameTracker(null, "Test");
+ FrameTracker tracker = new FrameTracker("Test", ACC_STATIC, "test",
+ "()V", null);
tracker.visitIntInsn(NOP, 0);
}
@Test(expected = IllegalArgumentException.class)
public void testVisitVarInsnIllegalOpcode() {
- FrameTracker tracker = new FrameTracker(null, "Test");
+ FrameTracker tracker = new FrameTracker("Test", ACC_STATIC, "test",
+ "()V", null);
tracker.visitVarInsn(NOP, 0);
}
@Test(expected = IllegalArgumentException.class)
public void testVisitTypeInsnIllegalOpcode() {
- FrameTracker tracker = new FrameTracker(null, "Test");
+ FrameTracker tracker = new FrameTracker("Test", ACC_STATIC, "test",
+ "()V", null);
tracker.visitTypeInsn(NOP, "A");
}
@Test(expected = IllegalArgumentException.class)
public void testVisitFieldInsnIllegalOpcode() {
- FrameTracker tracker = new FrameTracker(null, "Test");
+ FrameTracker tracker = new FrameTracker("Test", ACC_STATIC, "test",
+ "()V", null);
tracker.visitFieldInsn(NOP, "A", "x", "I");
}
@Test(expected = IllegalArgumentException.class)
public void testVisitJumpInsnIllegalOpcode() {
- FrameTracker tracker = new FrameTracker(null, "Test");
+ FrameTracker tracker = new FrameTracker("Test", ACC_STATIC, "test",
+ "()V", null);
tracker.visitJumpInsn(NOP, new Label());
}
@Test
+ public void testArgumentsConstructor() {
+ FrameBuilder expectedFrame = new FrameBuilder();
+ expectedFrame.locals(UNINITIALIZED_THIS);
+ testArguments(0, "<init>", "()V", expectedFrame);
+ }
+
+ @Test
+ public void testArgumentsStatic() {
+ FrameBuilder expectedFrame = new FrameBuilder();
+ testArguments(Opcodes.ACC_STATIC, "test", "()V", expectedFrame);
+ }
+
+ @Test
+ public void testArgumentsStaticIJZ() {
+ FrameBuilder expectedFrame = new FrameBuilder();
+ expectedFrame.locals(INTEGER, LONG, INTEGER);
+ testArguments(Opcodes.ACC_STATIC, "test", "(IJZ)V", expectedFrame);
+ }
+
+ @Test
+ public void testArgumentsStaticLArr() {
+ FrameBuilder expectedFrame = new FrameBuilder();
+ expectedFrame.locals("Foo", "[[S");
+ testArguments(Opcodes.ACC_STATIC, "test", "(LFoo;[[S)V", expectedFrame);
+ }
+
+ @Test
+ public void testArgumentsFD() {
+ FrameBuilder expectedFrame = new FrameBuilder();
+ expectedFrame.locals("Test", FLOAT, DOUBLE);
+ testArguments(0, "test", "(FD)V", expectedFrame);
+ }
+
+ private void testArguments(int access, String name, String desc,
+ FrameBuilder expectedFrame) {
+ MethodRecorder actual = new MethodRecorder();
+ FrameTracker tracker = new FrameTracker("Test", access, name, desc,
+ actual.getVisitor());
+ tracker.insertFrame();
+
+ MethodRecorder expected = new MethodRecorder();
+ expectedFrame.accept(expected.getVisitor());
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
public void testFrameGaps() {
before.locals().stack(INTEGER);
mv.visitVarInsn(ISTORE, 3);
@@ -147,13 +202,6 @@ public class FrameTrackerTest {
}
@Test
- public void AALOAD() {
- before.locals().stack("[Ljava/lang/String;", INTEGER);
- mv.visitInsn(AALOAD);
- after.locals().stack("java/lang/String");
- }
-
- @Test
public void AALOAD_multidim_obj() {
before.locals().stack("[[Ljava/lang/String;", INTEGER);
mv.visitInsn(AALOAD);
@@ -1130,7 +1178,8 @@ public class FrameTrackerTest {
@Test(expected = IllegalArgumentException.class)
public void LDC_invalidType() {
- FrameTracker tracker = new FrameTracker(null, "Test");
+ FrameTracker tracker = new FrameTracker("Test", ACC_STATIC, "test",
+ "()V", null);
tracker.visitLdcInsn(Byte.valueOf((byte) 123));
}
@@ -1320,7 +1369,8 @@ public class FrameTrackerTest {
@Test(expected = IllegalArgumentException.class)
public void NEWARRAY_invalidOperand() {
- FrameTracker tracker = new FrameTracker(null, "Test");
+ FrameTracker tracker = new FrameTracker("Test", ACC_STATIC, "test",
+ "()V", null);
tracker.visitIntInsn(NEWARRAY, -1);
}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeInserterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeInserterTest.java
index d15287e1..f7b548bd 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeInserterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeInserterTest.java
@@ -18,8 +18,6 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.Handle;
-import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
@@ -63,7 +61,6 @@ public class ProbeInserterTest {
actualVisitor, arrayStrategy);
pi.insertProbe(0);
- expectedVisitor.visitLdcInsn("init");
expectedVisitor.visitVarInsn(Opcodes.ALOAD, 0);
expectedVisitor.visitInsn(Opcodes.ICONST_0);
expectedVisitor.visitInsn(Opcodes.ICONST_1);
@@ -76,7 +73,6 @@ public class ProbeInserterTest {
arrayStrategy);
pi.insertProbe(0);
- expectedVisitor.visitLdcInsn("init");
expectedVisitor.visitVarInsn(Opcodes.ALOAD, 1);
expectedVisitor.visitInsn(Opcodes.ICONST_0);
expectedVisitor.visitInsn(Opcodes.ICONST_1);
@@ -89,7 +85,6 @@ public class ProbeInserterTest {
actualVisitor, arrayStrategy);
pi.insertProbe(0);
- expectedVisitor.visitLdcInsn("init");
expectedVisitor.visitVarInsn(Opcodes.ALOAD, 4);
expectedVisitor.visitInsn(Opcodes.ICONST_0);
expectedVisitor.visitInsn(Opcodes.ICONST_1);
@@ -102,7 +97,6 @@ public class ProbeInserterTest {
arrayStrategy);
pi.insertProbe(0);
- expectedVisitor.visitLdcInsn("init");
expectedVisitor.visitVarInsn(Opcodes.ALOAD, 5);
expectedVisitor.visitInsn(Opcodes.ICONST_0);
expectedVisitor.visitInsn(Opcodes.ICONST_1);
@@ -110,47 +104,12 @@ public class ProbeInserterTest {
}
@Test
- public void testVisitProlog() {
- ProbeInserter pi = new ProbeInserter(0, "(I)V", actualVisitor,
- arrayStrategy);
- Label label = new Label();
- pi.visitLabel(label);
- pi.visitLineNumber(123, label);
- pi.visitFrame(Opcodes.F_NEW, 1, new Object[] { "I" }, 0, new Object[0]);
- pi.visitInsn(Opcodes.NOP);
-
- expectedVisitor.visitFrame(Opcodes.F_NEW, 1, new Object[] { "I" }, 0,
- new Object[0]);
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitLabel(label);
- expectedVisitor.visitLineNumber(123, label);
- expectedVisitor.visitInsn(Opcodes.NOP);
- }
-
- @Test
- public void testVisitLabel() {
+ public void testVisitCode() {
ProbeInserter pi = new ProbeInserter(0, "()V", actualVisitor,
arrayStrategy);
- Label label = new Label();
- pi.visitInsn(Opcodes.NOP);
- pi.visitLabel(label);
+ pi.visitCode();
expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitInsn(Opcodes.NOP);
- expectedVisitor.visitLabel(label);
- }
-
- @Test
- public void testVisitLineNumber() {
- ProbeInserter pi = new ProbeInserter(0, "()V", actualVisitor,
- arrayStrategy);
- Label label = new Label();
- pi.visitInsn(Opcodes.NOP);
- pi.visitLineNumber(123, label);
-
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitInsn(Opcodes.NOP);
- expectedVisitor.visitLineNumber(123, label);
}
@Test
@@ -164,7 +123,6 @@ public class ProbeInserterTest {
pi.visitVarInsn(Opcodes.ISTORE, 3);
pi.visitVarInsn(Opcodes.FSTORE, 4);
- expectedVisitor.visitLdcInsn("init");
// Argument variables stay at the same position:
expectedVisitor.visitVarInsn(Opcodes.ALOAD, 0);
expectedVisitor.visitVarInsn(Opcodes.ILOAD, 1);
@@ -185,7 +143,6 @@ public class ProbeInserterTest {
pi.visitIincInsn(3, 103);
pi.visitIincInsn(4, 104);
- expectedVisitor.visitLdcInsn("init");
// Argument variables stay at the same position:
expectedVisitor.visitIincInsn(0, 100);
expectedVisitor.visitIincInsn(1, 101);
@@ -207,7 +164,6 @@ public class ProbeInserterTest {
pi.visitLocalVariable(null, null, null, null, null, 3);
pi.visitLocalVariable(null, null, null, null, null, 4);
- expectedVisitor.visitLdcInsn("init");
// Argument variables stay at the same position:
expectedVisitor.visitLocalVariable(null, null, null, null, null, 0);
expectedVisitor.visitLocalVariable(null, null, null, null, null, 1);
@@ -219,119 +175,13 @@ public class ProbeInserterTest {
}
@Test
- public void testVisitIntInsn() {
- ProbeInserter pi = new ProbeInserter(0, "()V", actualVisitor,
- arrayStrategy);
- pi.visitIntInsn(Opcodes.BIPUSH, 15);
-
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitIntInsn(Opcodes.BIPUSH, 15);
- }
-
- @Test
- public void testVisitTypeInsn() {
- ProbeInserter pi = new ProbeInserter(0, "()V", actualVisitor,
- arrayStrategy);
- pi.visitTypeInsn(Opcodes.NEW, "Foo");
-
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitTypeInsn(Opcodes.NEW, "Foo");
- }
-
- @Test
- public void testVisitFieldInsn() {
- ProbeInserter pi = new ProbeInserter(0, "()V", actualVisitor,
- arrayStrategy);
- pi.visitFieldInsn(Opcodes.GETFIELD, "Foo", "i", "I");
-
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitFieldInsn(Opcodes.GETFIELD, "Foo", "i", "I");
- }
-
- @Test
- public void testVisitMethodInsn() {
- ProbeInserter pi = new ProbeInserter(0, "()V", actualVisitor,
- arrayStrategy);
- pi.visitMethodInsn(Opcodes.INVOKEINTERFACE, "Foo", "doit", "()V");
-
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitMethodInsn(Opcodes.INVOKEINTERFACE, "Foo", "doit",
- "()V");
- }
-
- @Test
- public void testInvokeDynamicInsn() {
- ProbeInserter pi = new ProbeInserter(0, "()V", actualVisitor,
- arrayStrategy);
- Handle handle = new Handle(0, null, null, null);
- pi.visitInvokeDynamicInsn("foo", "()V", handle);
-
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitInvokeDynamicInsn("foo", "()V", handle);
- }
-
- @Test
- public void testVisitJumpInsn() {
- ProbeInserter pi = new ProbeInserter(0, "()V", actualVisitor,
- arrayStrategy);
- Label label = new Label();
- pi.visitJumpInsn(Opcodes.GOTO, label);
-
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitJumpInsn(Opcodes.GOTO, label);
- }
-
- @Test
- public void testVisitLdcInsn() {
- ProbeInserter pi = new ProbeInserter(0, "()V", actualVisitor,
- arrayStrategy);
- pi.visitLdcInsn("JaCoCo");
-
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitLdcInsn("JaCoCo");
- }
-
- @Test
- public void testVisitTableSwitchInsn() {
- ProbeInserter pi = new ProbeInserter(0, "()V", actualVisitor,
- arrayStrategy);
- Label dflt = new Label();
- pi.visitTableSwitchInsn(0, 1, dflt, new Label[0]);
-
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitTableSwitchInsn(0, 1, dflt, new Label[0]);
- }
-
- @Test
- public void testVisitLookupSwitchInsn() {
- ProbeInserter pi = new ProbeInserter(0, "()V", actualVisitor,
- arrayStrategy);
- Label dflt = new Label();
- pi.visitLookupSwitchInsn(dflt, new int[0], new Label[0]);
-
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitLookupSwitchInsn(dflt, new int[0], new Label[0]);
- }
-
- @Test
- public void testVisitMultiANewArrayInsn() {
- ProbeInserter pi = new ProbeInserter(0, "()V", actualVisitor,
- arrayStrategy);
- pi.visitMultiANewArrayInsn("[[[I", 3);
-
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitMultiANewArrayInsn("[[[I", 3);
- }
-
- @Test
public void testVisitMaxs1() {
ProbeInserter pi = new ProbeInserter(0, "(II)V", actualVisitor,
arrayStrategy);
- pi.visitInsn(Opcodes.NOP);
+ pi.visitCode();
pi.visitMaxs(0, 8);
expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitInsn(Opcodes.NOP);
expectedVisitor.visitMaxs(5, 9);
}
@@ -339,11 +189,10 @@ public class ProbeInserterTest {
public void testVisitMaxs2() {
ProbeInserter pi = new ProbeInserter(0, "(II)V", actualVisitor,
arrayStrategy);
- pi.visitInsn(Opcodes.NOP);
+ pi.visitCode();
pi.visitMaxs(10, 8);
expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitInsn(Opcodes.NOP);
expectedVisitor.visitMaxs(13, 9);
}
@@ -352,20 +201,9 @@ public class ProbeInserterTest {
ProbeInserter pi = new ProbeInserter(0, "(J)V", actualVisitor,
arrayStrategy);
- pi.visitFrame(Opcodes.F_NEW, 2, new Object[] { "Foo", Opcodes.LONG },
- 0, new Object[0]);
- pi.visitInsn(Opcodes.NOP);
pi.visitFrame(Opcodes.F_NEW, 3, new Object[] { "Foo", Opcodes.LONG,
"java/lang/String" }, 0, new Object[0]);
- // The first (implicit) frame must not be modified:
- expectedVisitor.visitFrame(Opcodes.F_NEW, 2, new Object[] { "Foo",
- Opcodes.LONG }, 0, new Object[0]);
-
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitInsn(Opcodes.NOP);
-
- // Starting from the second frame on the probe variable is inserted:
expectedVisitor.visitFrame(Opcodes.F_NEW, 4, new Object[] { "Foo",
Opcodes.LONG, "[Z", "java/lang/String" }, 0, new Object[0]);
}
@@ -375,10 +213,6 @@ public class ProbeInserterTest {
ProbeInserter pi = new ProbeInserter(0, "(J)V", actualVisitor,
arrayStrategy);
- pi.visitFrame(Opcodes.F_NEW, 2, new Object[] { "Foo", Opcodes.LONG },
- 0, new Object[0]);
- pi.visitInsn(Opcodes.RETURN);
-
// Such sequences are generated by ASM to replace dead code, see
// http://asm.ow2.org/doc/developer-guide.html#deadcode
pi.visitFrame(Opcodes.F_NEW, 0, new Object[] {}, 1,
@@ -387,12 +221,6 @@ public class ProbeInserterTest {
pi.visitInsn(Opcodes.NOP);
pi.visitInsn(Opcodes.ATHROW);
- // The first (implicit) frame must not be modified:
- expectedVisitor.visitFrame(Opcodes.F_NEW, 2, new Object[] { "Foo",
- Opcodes.LONG }, 0, new Object[0]);
- expectedVisitor.visitLdcInsn("init");
- expectedVisitor.visitInsn(Opcodes.RETURN);
-
// The locals in this frame are filled with TOP up to the probe variable
expectedVisitor.visitFrame(Opcodes.F_NEW, 3, new Object[] {
Opcodes.TOP, Opcodes.TOP, "[Z", }, 1,