diff options
Diffstat (limited to 'org.jacoco.core.test/src')
10 files changed, 138 insertions, 7 deletions
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodAnalyzerTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodAnalyzerTest.java index c746131e..90f4c05b 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodAnalyzerTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodAnalyzerTest.java @@ -17,6 +17,9 @@ import java.util.ArrayList; import org.jacoco.core.analysis.ILine; import org.jacoco.core.analysis.IMethodCoverage; +import org.jacoco.core.internal.analysis.filter.Filters; +import org.jacoco.core.internal.analysis.filter.IFilter; +import org.jacoco.core.internal.analysis.filter.IFilterOutput; import org.jacoco.core.internal.flow.IProbeIdGenerator; import org.jacoco.core.internal.flow.LabelFlowAnalyzer; import org.jacoco.core.internal.flow.MethodProbesAdapter; @@ -24,6 +27,7 @@ import org.junit.Before; import org.junit.Test; import org.objectweb.asm.Label; import org.objectweb.asm.Opcodes; +import org.objectweb.asm.tree.AbstractInsnNode; import org.objectweb.asm.tree.MethodNode; import org.objectweb.asm.tree.TryCatchBlockNode; import org.objectweb.asm.util.CheckMethodAdapter; @@ -638,15 +642,90 @@ public class MethodAnalyzerTest implements IProbeIdGenerator { assertLine(1004, 0, 1, 0, 0); } + // === Scenario: try/finally === + + private void createTryFinally() { + final Label l0 = new Label(); + final Label l1 = new Label(); + final Label l2 = new Label(); + final Label l3 = new Label(); + + method.visitTryCatchBlock(l0, l2, l2, null); + + method.visitLabel(l0); + method.visitLineNumber(1001, l0); + + method.visitJumpInsn(Opcodes.IFEQ, l1); + // probe[0] + method.visitInsn(Opcodes.RETURN); + method.visitLabel(l1); + // probe[1] + method.visitInsn(Opcodes.RETURN); + + method.visitLabel(l2); + method.visitJumpInsn(Opcodes.IFEQ, l3); + // probe[2] + method.visitInsn(Opcodes.RETURN); + method.visitLabel(l3); + // probe[3] + method.visitInsn(Opcodes.RETURN); + } + + @Test + public void testTryFinallyWithoutFilter() { + createTryFinally(); + probes[0] = true; + probes[3] = true; + runMethodAnalzer(); + assertEquals(4, nextProbeId); + + assertLine(1001, 2, 4, 2, 2); + } + + private static final IFilter TRY_FINALLY_FILTER = new IFilter() { + public void filter(final String className, final String superClassName, + final MethodNode methodNode, final IFilterOutput output) { + final AbstractInsnNode i1 = methodNode.instructions.get(2); + final AbstractInsnNode i2 = methodNode.instructions.get(7); + assertEquals(Opcodes.IFEQ, i1.getOpcode()); + assertEquals(Opcodes.IFEQ, i2.getOpcode()); + output.merge(i1, i2); + // Merging of already merged instructions won't change result: + output.merge(i1, i2); + } + }; + + @Test + public void testTryFinallyMergeSameBranch() { + createTryFinally(); + probes[0] = true; + probes[2] = true; + runMethodAnalzer(TRY_FINALLY_FILTER); + assertLine(1001, 2, 3, 1, 1); + } + + @Test + public void testTryFinallyMergeDifferentBranches() { + createTryFinally(); + probes[0] = true; + probes[3] = true; + runMethodAnalzer(TRY_FINALLY_FILTER); + assertLine(1001, 2, 3, 0, 2); + } + private void runMethodAnalzer() { + runMethodAnalzer(Filters.NONE); + } + + private void runMethodAnalzer(IFilter filter) { LabelFlowAnalyzer.markLabels(method); final MethodAnalyzer analyzer = new MethodAnalyzer("Foo", - "java/lang/Object", "doit", "()V", null, probes); + "java/lang/Object", "doit", "()V", null, probes, filter); final MethodProbesAdapter probesAdapter = new MethodProbesAdapter( analyzer, this); // note that CheckMethodAdapter verifies that this test does not violate // contracts of ASM API - method.accept(new CheckMethodAdapter(probesAdapter)); + analyzer.accept(method, new CheckMethodAdapter(probesAdapter)); result = analyzer.getCoverage(); } diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/EnumFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/EnumFilterTest.java index 149990f5..a46a0d64 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/EnumFilterTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/EnumFilterTest.java @@ -13,6 +13,7 @@ package org.jacoco.core.internal.analysis.filter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; import org.jacoco.core.internal.instr.InstrSupport; import org.junit.Test; @@ -94,4 +95,8 @@ public class EnumFilterTest implements IFilterOutput { this.toInclusive = toInclusive; } + public void merge(final AbstractInsnNode i1, final AbstractInsnNode i2) { + fail(); + } + } diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/LombokGeneratedFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/LombokGeneratedFilterTest.java index 8fae5cc3..e68b3a3c 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/LombokGeneratedFilterTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/LombokGeneratedFilterTest.java @@ -13,6 +13,7 @@ package org.jacoco.core.internal.analysis.filter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; import org.jacoco.core.internal.instr.InstrSupport; import org.junit.Test; @@ -78,4 +79,8 @@ public class LombokGeneratedFilterTest implements IFilterOutput { this.toInclusive = toInclusive; } + public void merge(final AbstractInsnNode i1, final AbstractInsnNode i2) { + fail(); + } + } diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilterTest.java index 90262081..36c57ecb 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilterTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilterTest.java @@ -11,14 +11,15 @@ *******************************************************************************/ package org.jacoco.core.internal.analysis.filter; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + import org.jacoco.core.internal.instr.InstrSupport; import org.junit.Test; import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.AbstractInsnNode; import org.objectweb.asm.tree.MethodNode; -import static org.junit.Assert.assertEquals; - public class PrivateEmptyNoArgConstructorFilterTest implements IFilterOutput { private final IFilter filter = new PrivateEmptyNoArgConstructorFilter(); @@ -48,4 +49,8 @@ public class PrivateEmptyNoArgConstructorFilterTest implements IFilterOutput { this.toInclusive = toInclusive; } + public void merge(final AbstractInsnNode i1, final AbstractInsnNode i2) { + fail(); + } + } diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilterTest.java index 5a7cdefb..96683961 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilterTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilterTest.java @@ -11,6 +11,10 @@ *******************************************************************************/ package org.jacoco.core.internal.analysis.filter; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; + import org.jacoco.core.internal.instr.InstrSupport; import org.junit.Test; import org.objectweb.asm.Label; @@ -18,9 +22,6 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.AbstractInsnNode; import org.objectweb.asm.tree.MethodNode; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - public class StringSwitchJavacFilterTest implements IFilterOutput { private final IFilter filter = new StringSwitchJavacFilter(); @@ -152,4 +153,8 @@ public class StringSwitchJavacFilterTest implements IFilterOutput { this.toInclusive = toInclusive; } + public void merge(final AbstractInsnNode i1, final AbstractInsnNode i2) { + fail(); + } + } diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilterTest.java index b0f5d1b0..a67eaa5f 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilterTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilterTest.java @@ -13,6 +13,7 @@ package org.jacoco.core.internal.analysis.filter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; import org.jacoco.core.internal.instr.InstrSupport; import org.junit.Test; @@ -163,4 +164,8 @@ public class SynchronizedFilterTest implements IFilterOutput { this.toInclusive = toInclusive; } + public void merge(final AbstractInsnNode i1, final AbstractInsnNode i2) { + fail(); + } + } diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SyntheticFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SyntheticFilterTest.java index 319caef5..b8a6e9dd 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SyntheticFilterTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SyntheticFilterTest.java @@ -13,6 +13,7 @@ package org.jacoco.core.internal.analysis.filter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; import org.jacoco.core.internal.instr.InstrSupport; import org.junit.Test; @@ -70,4 +71,8 @@ public class SyntheticFilterTest implements IFilterOutput { this.toInclusive = toInclusive; } + public void merge(final AbstractInsnNode i1, final AbstractInsnNode i2) { + fail(); + } + } diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilterTest.java index d3720505..57e9145b 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilterTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilterTest.java @@ -12,6 +12,7 @@ package org.jacoco.core.internal.analysis.filter; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.List; @@ -621,4 +622,8 @@ public class TryWithResourcesEcjFilterTest implements IFilterOutput { this.to.add(to); } + public void merge(final AbstractInsnNode i1, final AbstractInsnNode i2) { + fail(); + } + } diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilterTest.java index 26b4cfe1..a19cfe2c 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilterTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilterTest.java @@ -12,6 +12,7 @@ package org.jacoco.core.internal.analysis.filter; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.List; @@ -811,4 +812,8 @@ public class TryWithResourcesJavacFilterTest implements IFilterOutput { this.to.add(to); } + public void merge(final AbstractInsnNode i1, final AbstractInsnNode i2) { + fail(); + } + } diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/InstructionTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/InstructionTest.java index a6fb15e8..a6a7ee6d 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/InstructionTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/InstructionTest.java @@ -93,6 +93,18 @@ public class InstructionTest { } @Test + public void merge_should_add_covered_branches_from_another_instruction() { + final Instruction i1 = new Instruction(new InsnNode(Opcodes.NOP), 123); + i1.setCovered(0); + final Instruction i2 = new Instruction(new InsnNode(Opcodes.NOP), 123); + i2.setCovered(1); + i1.merge(i2); + assertEquals("{0, 1}", i1.toString()); + assertEquals(2, i1.getCoveredBranches()); + assertEquals("{1}", i2.toString()); + } + + @Test public void testSetCoveredOnLongSequence() { final Instruction first = new Instruction(new InsnNode(Opcodes.NOP), 0); Instruction next = first; |