aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation
diff options
context:
space:
mode:
authorMarc R. Hoffmann <hoffmann@mountainminds.com>2018-08-02 21:56:26 +0200
committerEvgeny Mandrikov <Godin@users.noreply.github.com>2018-08-02 21:56:26 +0200
commitb2c5ff73d24cc0c57f308f046de008568068b4c8 (patch)
treeede5f93173e1a7f9fc7fe8300b2ba94040a8a46c /org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation
parent65d1aea1bd0f85f8be9bbc5076b7191515fe5f39 (diff)
downloadjacoco-b2c5ff73d24cc0c57f308f046de008568068b4c8.tar.gz
Reorganize validation test packages (#716)
* Use module names as package names * Merge previously separate filter validation tests * Move non-version specific tests to org.jacoco.core.test
Diffstat (limited to 'org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation')
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ClassFileVersionsTest.java195
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ImplicitDefaultConstructorTest.java36
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ResizeInstructionsTest.java171
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/AnnotationInitializerTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/AnnotationInitializerTest.java)7
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BadCycleClassTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/BadCycleClassTest.java)7
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BooleanExpressionsTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java)7
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ClassInitializerTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ClassInitializerTest.java)7
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ConstructorsTest.java63
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructureBeforeSuperConstructorTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ProbesBeforeSuperConstructorTest.java)11
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructuresTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ControlStructuresTest.java)7
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/CyclomaticComplexityTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/CyclomaticComplexityTest.java)2
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumConstructorTest.java63
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumImplicitMethodsTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/EnumImplicitMethodsTest.java)7
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumSwitchTest.java40
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExceptionsTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ExceptionsTest.java)7
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExplicitInitialFrameTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ExplicitInitialFrameTest.java)7
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FieldInitializationInTwoConstructorsTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/FieldInitializationInTwoConstructorsTest.java)7
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FinallyTest.java267
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FramesTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/FramesTest.java)75
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ImplicitFieldInitializationTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ImplicitFieldInitializationTest.java)7
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/InterfaceClassInitializerTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/InterfaceClassInitializerTest.java)7
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/StructuredLockingTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/StructuredLockingTest.java)16
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SynchronizedTest.java74
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SyntheticTest.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/PrivateEmptyDefaultConstructorTest.java)24
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/AnnotationInitializerTarget.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/AnnotationInitializer.java)4
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BadCycleClassTarget.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/BadCycleClass.java)6
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BooleanExpressionsTarget.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target02.java)4
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ClassInitializerTarget.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target05.java)8
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ConstructorsTarget.java77
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructureBeforeSuperConstructorTarget.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target10.java)8
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructuresTarget.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target01.java)4
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumConstructorTarget.java49
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumImplicitMethodsTarget.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/EnumImplicitMethods.java)10
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumSwitchTarget.java42
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExceptionsTarget.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target03.java)4
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExplicitInitialFrameTarget.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target11.java)4
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FieldInitializationInTwoConstructorsTarget.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target09.java)10
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FinallyTarget.java148
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ImplicitFieldInitializationTarget.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target08.java)6
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/InterfaceClassInitializerTarget.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target04.java)4
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/StructuredLockingTarget.java (renamed from org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target12.java)4
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SynchronizedTarget.java60
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SyntheticTarget.java64
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target06.java25
-rw-r--r--org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target07.java27
45 files changed, 1093 insertions, 589 deletions
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ClassFileVersionsTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ClassFileVersionsTest.java
deleted file mode 100644
index 87d78a21..00000000
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ClassFileVersionsTest.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Marc R. Hoffmann - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.test.validation;
-
-import static org.junit.Assert.assertEquals;
-import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
-import static org.objectweb.asm.Opcodes.ACC_SUPER;
-import static org.objectweb.asm.Opcodes.ALOAD;
-import static org.objectweb.asm.Opcodes.F_NEW;
-import static org.objectweb.asm.Opcodes.IFEQ;
-import static org.objectweb.asm.Opcodes.ILOAD;
-import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
-import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
-import static org.objectweb.asm.Opcodes.POP;
-import static org.objectweb.asm.Opcodes.RETURN;
-import static org.objectweb.asm.Opcodes.V1_1;
-import static org.objectweb.asm.Opcodes.V1_2;
-import static org.objectweb.asm.Opcodes.V1_3;
-import static org.objectweb.asm.Opcodes.V1_4;
-import static org.objectweb.asm.Opcodes.V1_5;
-import static org.objectweb.asm.Opcodes.V1_6;
-import static org.objectweb.asm.Opcodes.V1_7;
-import static org.objectweb.asm.Opcodes.V1_8;
-import static org.objectweb.asm.Opcodes.V9;
-
-import java.io.IOException;
-
-import org.jacoco.core.instr.Instrumenter;
-import org.jacoco.core.internal.BytecodeVersion;
-import org.jacoco.core.internal.instr.InstrSupport;
-import org.jacoco.core.runtime.IRuntime;
-import org.jacoco.core.runtime.SystemPropertiesRuntime;
-import org.junit.Test;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * Test class inserted stackmap frames for different class file versions.
- */
-public class ClassFileVersionsTest {
-
- @Test
- public void test_1_1() throws IOException {
- testVersion(V1_1, false);
- }
-
- @Test
- public void test_1_2() throws IOException {
- testVersion(V1_2, false);
- }
-
- @Test
- public void test_1_3() throws IOException {
- testVersion(V1_3, false);
- }
-
- @Test
- public void test_1_4() throws IOException {
- testVersion(V1_4, false);
- }
-
- @Test
- public void test_1_5() throws IOException {
- testVersion(V1_5, false);
- }
-
- @Test
- public void test_1_6() throws IOException {
- testVersion(V1_6, true);
- }
-
- @Test
- public void test_1_7() throws IOException {
- testVersion(V1_7, true);
- }
-
- @Test
- public void test_1_8() throws IOException {
- testVersion(V1_8, true);
- }
-
- @Test
- public void test_9() throws IOException {
- testVersion(V9, true);
- }
-
- @Test
- public void test_10() throws IOException {
- testVersion(BytecodeVersion.V10, true);
- }
-
- private void testVersion(int version, boolean frames) throws IOException {
- final byte[] original = createClass(version, frames);
-
- IRuntime runtime = new SystemPropertiesRuntime();
- Instrumenter instrumenter = new Instrumenter(runtime);
- byte[] instrumented = instrumenter.instrument(original, "TestTarget");
-
- assertFrames(instrumented, frames);
- }
-
- private void assertFrames(byte[] source, final boolean expected) {
- int version = BytecodeVersion.get(source);
- source = BytecodeVersion.downgradeIfNeeded(version, source);
- new ClassReader(source)
- .accept(new ClassVisitor(InstrSupport.ASM_API_VERSION) {
-
- @Override
- public MethodVisitor visitMethod(int access, String name,
- String desc, String signature,
- String[] exceptions) {
- return new MethodVisitor(InstrSupport.ASM_API_VERSION) {
- boolean frames = false;
-
- @Override
- public void visitFrame(int type, int nLocal,
- Object[] local, int nStack,
- Object[] stack) {
- frames = true;
- }
-
- @Override
- public void visitEnd() {
- assertEquals(Boolean.valueOf(expected),
- Boolean.valueOf(frames));
- }
- };
- }
- }, 0);
- }
-
- /**
- * Creates a class that requires a frame before the return statement. Also
- * for this class instrumentation should insert another frame.
- *
- * <code><pre>
- * public class Sample {
- * public Sample(boolean b){
- * if(b){
- * toString();
- * }
- * return;
- * }
- * }
- * </pre></code>
- */
- private byte[] createClass(int version, boolean frames) {
-
- ClassWriter cw = new ClassWriter(0);
- MethodVisitor mv;
-
- cw.visit(version, ACC_PUBLIC + ACC_SUPER, "org/jacoco/test/Sample",
- null, "java/lang/Object", null);
-
- mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(Z)V", null, null);
- mv.visitCode();
- mv.visitVarInsn(ALOAD, 0);
- mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V",
- false);
- mv.visitVarInsn(ILOAD, 1);
- Label l1 = new Label();
- mv.visitJumpInsn(IFEQ, l1);
- mv.visitVarInsn(ALOAD, 0);
- mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "toString",
- "()Ljava/lang/String;", false);
- mv.visitInsn(POP);
- mv.visitLabel(l1);
- if (frames) {
- mv.visitFrame(F_NEW, 2,
- new Object[] { "org/jacoco/test/Sample", Opcodes.INTEGER },
- 0, new Object[] {});
- }
- mv.visitInsn(RETURN);
- mv.visitMaxs(1, 2);
- mv.visitEnd();
-
- cw.visitEnd();
-
- return cw.toByteArray();
- }
-
-}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ImplicitDefaultConstructorTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ImplicitDefaultConstructorTest.java
deleted file mode 100644
index 09872e8d..00000000
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ImplicitDefaultConstructorTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Marc R. Hoffmann - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.test.validation;
-
-import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.Target06;
-import org.junit.Test;
-
-/**
- * Test of a implicit default constructor.
- *
- * @see PrivateEmptyDefaultConstructorTest
- */
-public class ImplicitDefaultConstructorTest extends ValidationTestBase {
-
- public ImplicitDefaultConstructorTest() {
- super(Target06.class);
- }
-
- @Test
- public void testCoverageResult() {
-
- assertLine("classdef", ICounter.FULLY_COVERED);
-
- }
-
-}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ResizeInstructionsTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ResizeInstructionsTest.java
deleted file mode 100644
index fe6d134a..00000000
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ResizeInstructionsTest.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Evgeny Mandrikov - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.test.validation;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
-import org.jacoco.core.instr.Instrumenter;
-import org.jacoco.core.internal.BytecodeVersion;
-import org.jacoco.core.internal.instr.InstrSupport;
-import org.jacoco.core.runtime.IRuntime;
-import org.jacoco.core.runtime.RuntimeData;
-import org.jacoco.core.runtime.SystemPropertiesRuntime;
-import org.jacoco.core.test.TargetLoader;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-public class ResizeInstructionsTest {
-
- private final IRuntime runtime = new SystemPropertiesRuntime();
- private final Instrumenter instrumenter = new Instrumenter(runtime);
-
- private boolean computedCommonSuperClass = false;
-
- @Before
- public void setup() throws Exception {
- runtime.startup(new RuntimeData());
- }
-
- @After
- public void teardown() {
- runtime.shutdown();
- }
-
- private class Inner {
- }
-
- /**
- * Test of ASM bug
- * <a href="https://gitlab.ow2.org/asm/asm/issues/317792">#317792</a>.
- */
- @Test
- public void should_not_loose_InnerClasses_attribute() throws Exception {
- byte[] source = TargetLoader.getClassDataAsBytes(Inner.class);
- final int version = BytecodeVersion.get(source);
- source = BytecodeVersion.downgradeIfNeeded(version, source);
-
- final ClassReader cr = new ClassReader(source);
- final ClassWriter cw = new ClassWriter(0);
- cr.accept(new ClassVisitor(InstrSupport.ASM_API_VERSION, cw) {
- @Override
- public void visitEnd() {
- final MethodVisitor mv = cv.visitMethod(0, "m", "()V", null,
- null);
- mv.visitCode();
- addCauseOfResizeInstructions(mv);
- mv.visitInsn(Opcodes.NOP);
- mv.visitMaxs(2, 1);
- mv.visitEnd();
- super.visitEnd();
- }
- }, 0);
- source = cw.toByteArray();
- BytecodeVersion.set(source, version);
-
- final byte[] bytes = instrumenter.instrument(source, "");
-
- final TargetLoader targetLoader = new TargetLoader();
- final Class<?> outer = targetLoader.add(ResizeInstructionsTest.class,
- TargetLoader.getClassDataAsBytes(ResizeInstructionsTest.class));
- final Class<?> inner = targetLoader.add(Inner.class, bytes);
- assertSame(outer, inner.getEnclosingClass());
- assertNotNull(inner.getEnclosingClass());
- assertSame(outer, inner.getDeclaringClass());
- assertNotNull(inner.getDeclaringClass());
- }
-
- /**
- * Test of ASM bug
- * <a href= "https://gitlab.ow2.org/asm/asm/issues/317630">#317630</a> that
- * caused {@code java.lang.ClassNotFoundException}.
- */
- @Test
- public void should_not_require_computation_of_common_superclass()
- throws Exception {
- final String className = "Example";
-
- final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES) {
- @Override
- protected String getCommonSuperClass(final String type1,
- final String type2) {
- computedCommonSuperClass |= className.equals(type1)
- || className.equals(type2);
- return "java/lang/Object";
- }
- };
- cw.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, className, null,
- "java/lang/Object", null);
- final MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "m", "()V",
- null, null);
- mv.visitCode();
- addCauseOfResizeInstructions(mv);
- addCauseOfGetCommonSuperClass(mv);
- mv.visitMaxs(1, 1);
- mv.visitEnd();
- cw.visitEnd();
- final byte[] original = cw.toByteArray();
- assertTrue(computedCommonSuperClass);
- new TargetLoader().add(className, original);
-
- final byte[] instrumented = instrumenter.instrument(original,
- className);
- new TargetLoader().add(className, instrumented);
- }
-
- /**
- * Adds code that requires
- * {@link ClassWriter#getCommonSuperClass(String, String)}.
- *
- * <pre>
- * Object o = this;
- * while (true) {
- * o = (Integer) null;
- * }
- * </pre>
- */
- private static void addCauseOfGetCommonSuperClass(final MethodVisitor mv) {
- mv.visitVarInsn(Opcodes.ALOAD, 0);
- mv.visitVarInsn(Opcodes.ASTORE, 1);
- Label label = new Label();
- mv.visitLabel(label);
- mv.visitInsn(Opcodes.ACONST_NULL);
- mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Integer");
- mv.visitVarInsn(Opcodes.ASTORE, 1);
- mv.visitJumpInsn(Opcodes.GOTO, label);
- }
-
- /**
- * Adds code that triggers usage of
- * {@link org.objectweb.asm.MethodWriter#COMPUTE_INSERTED_FRAMES} during
- * instrumentation.
- */
- private static void addCauseOfResizeInstructions(final MethodVisitor mv) {
- mv.visitInsn(Opcodes.ICONST_0);
- mv.visitInsn(Opcodes.ICONST_1);
- final Label target = new Label();
- mv.visitJumpInsn(Opcodes.IFLE, target);
- for (int i = 0; i < Short.MAX_VALUE; i++) {
- mv.visitInsn(Opcodes.NOP);
- }
- mv.visitLabel(target);
- }
-
-}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/AnnotationInitializerTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/AnnotationInitializerTest.java
index 60a38339..7286cd13 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/AnnotationInitializerTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/AnnotationInitializerTest.java
@@ -9,10 +9,11 @@
* Evgeny Mandrikov - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.AnnotationInitializer;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.AnnotationInitializerTarget;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
@@ -23,7 +24,7 @@ import static org.junit.Assert.assertEquals;
public class AnnotationInitializerTest extends ValidationTestBase {
public AnnotationInitializerTest() {
- super(AnnotationInitializer.class);
+ super(AnnotationInitializerTarget.class);
}
@Override
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/BadCycleClassTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BadCycleClassTest.java
index aa646ddf..da53f5a0 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/BadCycleClassTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BadCycleClassTest.java
@@ -9,10 +9,11 @@
* Evgeny Mandrikov - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.BadCycleClass;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.BadCycleClassTarget;
import org.junit.Test;
/**
@@ -21,7 +22,7 @@ import org.junit.Test;
public class BadCycleClassTest extends ValidationTestBase {
public BadCycleClassTest() throws Exception {
- super(BadCycleClass.class);
+ super(BadCycleClassTarget.class);
}
@Test
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BooleanExpressionsTest.java
index 64dee474..f91e1c10 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BooleanExpressionsTest.java
@@ -9,10 +9,11 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.Target02;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.BooleanExpressionsTarget;
import org.junit.Test;
/**
@@ -21,7 +22,7 @@ import org.junit.Test;
public class BooleanExpressionsTest extends ValidationTestBase {
public BooleanExpressionsTest() {
- super(Target02.class);
+ super(BooleanExpressionsTarget.class);
}
@Test
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ClassInitializerTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ClassInitializerTest.java
index f87e705c..8df6e8d8 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ClassInitializerTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ClassInitializerTest.java
@@ -9,10 +9,11 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.Target05;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.ClassInitializerTarget;
import org.junit.Test;
/**
@@ -21,7 +22,7 @@ import org.junit.Test;
public class ClassInitializerTest extends ValidationTestBase {
public ClassInitializerTest() {
- super(Target05.class);
+ super(ClassInitializerTarget.class);
}
@Test
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ConstructorsTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ConstructorsTest.java
new file mode 100644
index 00000000..4c3ed6ac
--- /dev/null
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ConstructorsTest.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.java5;
+
+import org.jacoco.core.analysis.ICounter;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.ConstructorsTarget;
+import org.junit.Test;
+
+/**
+ * Tests for different constructors. Private empty constructors without
+ * arguments are filtered.
+ */
+public class ConstructorsTest extends ValidationTestBase {
+
+ public ConstructorsTest() {
+ super(ConstructorsTarget.class);
+ }
+
+ @Test
+ public void testCoverageResult() {
+ // not filtered because not private:
+ assertLine("packageLocal", ICounter.FULLY_COVERED);
+
+ // not filtered because has argument:
+ assertLine("arg", ICounter.FULLY_COVERED);
+
+ // not filtered because not empty - prepares arguments for super
+ // constructor:
+ assertLine("super", ICounter.FULLY_COVERED);
+
+ // not filtered because contains initialization of a field to hold
+ // reference to an instance of outer class that is passed as an
+ // argument:
+ assertLine("inner", ICounter.FULLY_COVERED);
+
+ // not filtered because not empty - contains initialization of
+ // a field:
+ assertLine("innerStatic", ICounter.FULLY_COVERED);
+
+ // not filtered because default constructor for not private inner
+ // classes is not private:
+ assertLine("publicDefault", ICounter.FULLY_COVERED);
+ assertLine("packageLocalDefault", ICounter.FULLY_COVERED);
+
+ assertLine("privateDefault", ICounter.EMPTY);
+
+ assertLine("privateNonEmptyNoArg", ICounter.FULLY_COVERED);
+
+ assertLine("privateEmptyNoArg", ICounter.EMPTY);
+ assertLine("return", ICounter.EMPTY);
+ }
+
+}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ProbesBeforeSuperConstructorTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructureBeforeSuperConstructorTest.java
index 88b1ae54..d381887a 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ProbesBeforeSuperConstructorTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructureBeforeSuperConstructorTest.java
@@ -9,19 +9,20 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.Target10;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.ControlStructureBeforeSuperConstructorTarget;
import org.junit.Test;
/**
* Test of probes before the super constructor call.
*/
-public class ProbesBeforeSuperConstructorTest extends ValidationTestBase {
+public class ControlStructureBeforeSuperConstructorTest extends ValidationTestBase {
- public ProbesBeforeSuperConstructorTest() {
- super(Target10.class);
+ public ControlStructureBeforeSuperConstructorTest() {
+ super(ControlStructureBeforeSuperConstructorTarget.class);
}
@Test
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ControlStructuresTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructuresTest.java
index 37db4c14..768312fc 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ControlStructuresTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructuresTest.java
@@ -9,10 +9,11 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.Target01;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.ControlStructuresTarget;
import org.junit.Test;
/**
@@ -21,7 +22,7 @@ import org.junit.Test;
public class ControlStructuresTest extends ValidationTestBase {
public ControlStructuresTest() {
- super(Target01.class);
+ super(ControlStructuresTarget.class);
}
@Test
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/CyclomaticComplexityTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/CyclomaticComplexityTest.java
index 122612ce..b7b11286 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/CyclomaticComplexityTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/CyclomaticComplexityTest.java
@@ -9,7 +9,7 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import static org.jacoco.core.test.validation.targets.Stubs.nop;
import static org.junit.Assert.assertEquals;
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumConstructorTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumConstructorTest.java
new file mode 100644
index 00000000..28652700
--- /dev/null
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumConstructorTest.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.java5;
+
+import org.jacoco.core.analysis.ICounter;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.EnumConstructorTarget;
+import org.junit.Test;
+
+/**
+ * Test of filtering of enum constructors.
+ */
+public class EnumConstructorTest extends ValidationTestBase {
+
+ public EnumConstructorTest() {
+ super(EnumConstructorTarget.class);
+ }
+
+ /**
+ * {@link EnumConstructorTarget.ImplicitConstructor}
+ */
+ @Test
+ public void implicit_constructor_should_be_filtered() {
+ // without filter next line is partly covered:
+ assertLine("implicitConstructor", ICounter.FULLY_COVERED);
+ }
+
+ /**
+ * {@link EnumConstructorTarget.ExplicitNonEmptyConstructor#ExplicitNonEmptyConstructor()}
+ */
+ @Test
+ public void explicit_non_empty_constructor_should_not_be_filtered() {
+ assertLine("explicitNonEmptyConstructor", ICounter.NOT_COVERED);
+ }
+
+ /**
+ * {@link EnumConstructorTarget.ExplicitEmptyConstructor#ExplicitEmptyConstructor()}
+ */
+ @Test
+ public void explicit_empty_constructor_should_be_filtered() {
+ // without filter next line is not covered:
+ assertLine("explicitEmptyConstructor", ICounter.EMPTY);
+ }
+
+ /**
+ * {@link EnumConstructorTarget.ExplicitEmptyConstructor#ExplicitEmptyConstructor(Object)}
+ */
+ @Test
+ public void explicit_empty_constructor_with_parameters_should_not_be_filtered() {
+ assertLine("explicitEmptyConstructorWithParameter",
+ ICounter.NOT_COVERED);
+ }
+
+}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/EnumImplicitMethodsTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumImplicitMethodsTest.java
index fbd9e540..0f6a8660 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/EnumImplicitMethodsTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumImplicitMethodsTest.java
@@ -9,10 +9,11 @@
* Evgeny Mandrikov - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.EnumImplicitMethods;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.EnumImplicitMethodsTarget;
import org.junit.Test;
/**
@@ -21,7 +22,7 @@ import org.junit.Test;
public class EnumImplicitMethodsTest extends ValidationTestBase {
public EnumImplicitMethodsTest() {
- super(EnumImplicitMethods.class);
+ super(EnumImplicitMethodsTarget.class);
}
@Test
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumSwitchTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumSwitchTest.java
new file mode 100644
index 00000000..fa3c44ca
--- /dev/null
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumSwitchTest.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.java5;
+
+import org.jacoco.core.analysis.ICounter;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.EnumSwitchTarget;
+import org.junit.Test;
+
+/**
+ * Test of filtering of a synthetic class that is generated by javac for a enum
+ * in switch statement.
+ */
+public class EnumSwitchTest extends ValidationTestBase {
+
+ public EnumSwitchTest() {
+ super(EnumSwitchTarget.class);
+ }
+
+ @Test
+ public void testCoverageResult() {
+ if (isJDKCompiler && JAVA_VERSION.isBefore("1.6")) {
+ // class that holds "switch map" is not marked as synthetic when
+ // compiling with javac 1.5
+ assertLine("switch", ICounter.PARTLY_COVERED, 0, 2);
+ } else {
+ assertLine("switch", ICounter.FULLY_COVERED, 0, 2);
+ }
+ }
+
+}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ExceptionsTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExceptionsTest.java
index c68bd374..15e47167 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ExceptionsTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExceptionsTest.java
@@ -9,10 +9,11 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.Target03;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.ExceptionsTarget;
import org.junit.Test;
/**
@@ -21,7 +22,7 @@ import org.junit.Test;
public class ExceptionsTest extends ValidationTestBase {
public ExceptionsTest() {
- super(Target03.class);
+ super(ExceptionsTarget.class);
}
@Test
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ExplicitInitialFrameTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExplicitInitialFrameTest.java
index 1c0a02f1..b04c1a6b 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ExplicitInitialFrameTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExplicitInitialFrameTest.java
@@ -9,10 +9,11 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.Target11;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.ExplicitInitialFrameTarget;
import org.junit.Test;
/**
@@ -21,7 +22,7 @@ import org.junit.Test;
public class ExplicitInitialFrameTest extends ValidationTestBase {
public ExplicitInitialFrameTest() {
- super(Target11.class);
+ super(ExplicitInitialFrameTarget.class);
}
@Test
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/FieldInitializationInTwoConstructorsTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FieldInitializationInTwoConstructorsTest.java
index 6896bf6d..6be37f4d 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/FieldInitializationInTwoConstructorsTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FieldInitializationInTwoConstructorsTest.java
@@ -9,10 +9,11 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.Target09;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.FieldInitializationInTwoConstructorsTarget;
import org.junit.Test;
/**
@@ -22,7 +23,7 @@ public class FieldInitializationInTwoConstructorsTest extends
ValidationTestBase {
public FieldInitializationInTwoConstructorsTest() {
- super(Target09.class);
+ super(FieldInitializationInTwoConstructorsTarget.class);
}
@Test
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FinallyTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FinallyTest.java
new file mode 100644
index 00000000..8531a501
--- /dev/null
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FinallyTest.java
@@ -0,0 +1,267 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.java5;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jacoco.core.analysis.ICounter;
+import org.jacoco.core.internal.BytecodeVersion;
+import org.jacoco.core.test.TargetLoader;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.FinallyTarget;
+import org.junit.Test;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.tree.AbstractInsnNode;
+import org.objectweb.asm.tree.ClassNode;
+import org.objectweb.asm.tree.LineNumberNode;
+import org.objectweb.asm.tree.MethodNode;
+
+/**
+ * Test of filtering of duplicated bytecode that is generated for finally block.
+ */
+public class FinallyTest extends ValidationTestBase {
+
+ public FinallyTest() {
+ super(FinallyTarget.class);
+ }
+
+ /**
+ * {@link FinallyTarget#example(boolean)}
+ */
+ @Test
+ public void example() {
+ if (isJDKCompiler) {
+ assertLine("example.0", ICounter.EMPTY);
+ } else {
+ assertLine("example.0", ICounter.FULLY_COVERED);
+ }
+ assertLine("example.1", ICounter.FULLY_COVERED, 0, 2);
+ assertLine("example.2", ICounter.FULLY_COVERED);
+ assertLine("example.3", ICounter.EMPTY);
+ assertLine("example.4", ICounter.EMPTY);
+ }
+
+ /**
+ * GOTO instructions at the end of duplicates of finally block might have
+ * line number of a last instruction of finally block and hence lead to
+ * unexpected coverage results, like for example in case of ECJ for
+ * {@link FinallyTarget#catchNotExecuted()},
+ * {@link FinallyTarget#emptyCatch()}. So we decided to ignore them, even if
+ * they can correspond to a real break statement.
+ * <p>
+ * See also <a href=
+ * "https://bugs.openjdk.java.net/browse/JDK-8180141">JDK-8180141</a> and
+ * <a href=
+ * "https://bugs.openjdk.java.net/browse/JDK-7008643">JDK-7008643</a>.
+ * <p>
+ * {@link FinallyTarget#breakStatement()}
+ */
+ @Test
+ public void breakStatement() {
+ assertLine("breakStatement", ICounter.EMPTY);
+
+ assertLine("breakStatement.1", ICounter.FULLY_COVERED);
+ assertLine("breakStatement.2", ICounter.EMPTY);
+ }
+
+ /**
+ * {@link FinallyTarget#catchNotExecuted()}
+ */
+ @Test
+ public void catchNotExecuted() {
+ assertLine("catchNotExecuted.catch", ICounter.NOT_COVERED);
+ assertLine("catchNotExecuted.0", ICounter.EMPTY);
+ assertLine("catchNotExecuted.1", ICounter.FULLY_COVERED);
+ assertLine("catchNotExecuted.2", ICounter.EMPTY);
+ }
+
+ /**
+ * {@link FinallyTarget#emptyCatch()}
+ */
+ @Test
+ public void emptyCatch() {
+ assertLine("emptyCatch.0", ICounter.EMPTY);
+ assertLine("emptyCatch.1", ICounter.FULLY_COVERED);
+ assertLine("emptyCatch.2", ICounter.EMPTY);
+ }
+
+ /**
+ * {@link FinallyTarget#twoRegions()}
+ */
+ @Test
+ public void twoRegions() {
+ assertLine("twoRegions.0", ICounter.EMPTY);
+ if (isJDKCompiler && JAVA_VERSION.isBefore("1.8")) {
+ // https://bugs.openjdk.java.net/browse/JDK-7008643
+ assertLine("twoRegions.1", ICounter.PARTLY_COVERED);
+ assertLine("twoRegions.return.1", ICounter.EMPTY);
+ assertLine("twoRegions.return.2", ICounter.EMPTY);
+ } else {
+ assertLine("twoRegions.1", ICounter.FULLY_COVERED);
+ assertLine("twoRegions.return.1", ICounter.FULLY_COVERED);
+ assertLine("twoRegions.return.2", ICounter.NOT_COVERED);
+ }
+ assertLine("twoRegions.2", ICounter.EMPTY);
+
+ assertLine("twoRegions.if", ICounter.FULLY_COVERED);
+ assertLine("twoRegions.region.1", ICounter.FULLY_COVERED);
+ assertLine("twoRegions.region.2", ICounter.NOT_COVERED);
+ }
+
+ /**
+ * {@link FinallyTarget#nested()}
+ */
+ @Test
+ public void nested() {
+ if (isJDKCompiler) {
+ assertLine("nested.0", ICounter.EMPTY);
+ } else {
+ assertLine("nested.0", ICounter.FULLY_COVERED);
+ }
+ assertLine("nested.1", ICounter.EMPTY);
+ assertLine("nested.2", ICounter.FULLY_COVERED);
+ if (isJDKCompiler) {
+ assertLine("nested.3", ICounter.EMPTY);
+ } else {
+ assertLine("nested.3", ICounter.FULLY_COVERED);
+ }
+ assertLine("nested.4", ICounter.FULLY_COVERED);
+ }
+
+ /**
+ * {@link FinallyTarget#emptyTry()}
+ */
+ @Test
+ public void emptyTry() {
+ assertLine("emptyTry.0", ICounter.EMPTY);
+ if (isJDKCompiler && JAVA_VERSION.isBefore("1.8")) {
+ // compiler bug fixed in javac >= 1.8:
+ assertLine("emptyTry.1", ICounter.PARTLY_COVERED);
+ assertLine("emptyTry.2", ICounter.FULLY_COVERED);
+ } else {
+ assertLine("emptyTry.1", ICounter.FULLY_COVERED);
+ assertLine("emptyTry.2", ICounter.EMPTY);
+ }
+ }
+
+ /**
+ * {@link FinallyTarget#alwaysCompletesAbruptly()}
+ */
+ @Test
+ public void alwaysCompletesAbruptly() {
+ if (isJDKCompiler) {
+ // uncovered case:
+ assertLine("alwaysCompletesAbruptly.0", ICounter.EMPTY);
+ assertLine("alwaysCompletesAbruptly.1", ICounter.PARTLY_COVERED);
+ } else {
+ assertLine("alwaysCompletesAbruptly.0", ICounter.PARTLY_COVERED);
+ assertLine("alwaysCompletesAbruptly.1", ICounter.FULLY_COVERED);
+ }
+ assertLine("alwaysCompletesAbruptly.2", ICounter.EMPTY);
+ }
+
+ /**
+ * This test studies placement of GOTO instructions.
+ */
+ @Test
+ public void gotos() throws IOException {
+ byte[] b = TargetLoader.getClassDataAsBytes(FinallyTarget.class);
+ b = BytecodeVersion.downgradeIfNeeded(BytecodeVersion.get(b), b);
+
+ final ClassNode classNode = new ClassNode();
+ new ClassReader(b).accept(classNode, 0);
+ final Set<String> tags = new HashSet<String>();
+ for (final MethodNode m : classNode.methods) {
+ if ("main".equals(m.name)) {
+ // skip it
+ continue;
+ }
+ int lineNumber = -1;
+ for (AbstractInsnNode i = m.instructions
+ .getFirst(); i != null; i = i.getNext()) {
+ if (AbstractInsnNode.LINE == i.getType()) {
+ lineNumber = ((LineNumberNode) i).line;
+ }
+ if (Opcodes.GOTO == i.getOpcode()) {
+ final String line = getSource().getLine(lineNumber);
+ if (line.indexOf('$') < 0) {
+ throw new AssertionError(
+ "No tag at line " + lineNumber);
+ }
+ final String tag = line.substring(
+ line.indexOf('$') + "$line-".length(),
+ line.lastIndexOf('$'));
+ tags.add(tag);
+ }
+ }
+ }
+
+ final Set<String> expected = new HashSet<String>();
+
+ if (isJDKCompiler) {
+ expected.add("example.2");
+ } else {
+ expected.add("example.0");
+ }
+
+ expected.add("breakStatement.for");
+ if (isJDKCompiler) {
+ if (JAVA_VERSION.isBefore("10")) {
+ // https://bugs.openjdk.java.net/browse/JDK-8180141
+ expected.add("breakStatement.1");
+ } else {
+ expected.add("breakStatement");
+ }
+ expected.add("breakStatement.2");
+ } else {
+ expected.add("breakStatement");
+ }
+
+ if (isJDKCompiler) {
+ expected.add("emptyCatch.2");
+ } else {
+ expected.add("emptyCatch");
+ expected.add("emptyCatch.1");
+ }
+
+ if (isJDKCompiler) {
+ expected.add("catchNotExecuted.2");
+ } else {
+ expected.add("catchNotExecuted");
+ expected.add("catchNotExecuted.1");
+ }
+
+ if (isJDKCompiler) {
+ expected.add("nested.5");
+ expected.add("nested.6");
+ } else {
+ expected.add("nested.0");
+ expected.add("nested.3");
+ }
+
+ if (isJDKCompiler && JAVA_VERSION.isBefore("1.8")) {
+ expected.add("emptyTry.2");
+ }
+
+ if (!isJDKCompiler) {
+ expected.add("alwaysCompletesAbruptly.0");
+ }
+
+ assertEquals(expected, tags);
+ }
+
+}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/FramesTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FramesTest.java
index 9ab062b6..2d502c31 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/FramesTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FramesTest.java
@@ -9,7 +9,7 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import static org.junit.Assert.assertEquals;
@@ -23,18 +23,17 @@ import org.jacoco.core.internal.instr.InstrSupport;
import org.jacoco.core.runtime.IRuntime;
import org.jacoco.core.runtime.SystemPropertiesRuntime;
import org.jacoco.core.test.TargetLoader;
-import org.jacoco.core.test.validation.targets.Target01;
-import org.jacoco.core.test.validation.targets.Target02;
-import org.jacoco.core.test.validation.targets.Target03;
-import org.jacoco.core.test.validation.targets.Target04;
-import org.jacoco.core.test.validation.targets.Target05;
-import org.jacoco.core.test.validation.targets.Target06;
-import org.jacoco.core.test.validation.targets.Target07;
-import org.jacoco.core.test.validation.targets.Target08;
-import org.jacoco.core.test.validation.targets.Target09;
-import org.jacoco.core.test.validation.targets.Target10;
-import org.jacoco.core.test.validation.targets.Target11;
-import org.jacoco.core.test.validation.targets.Target12;
+import org.jacoco.core.test.validation.java5.targets.BooleanExpressionsTarget;
+import org.jacoco.core.test.validation.java5.targets.ClassInitializerTarget;
+import org.jacoco.core.test.validation.java5.targets.ConstructorsTarget;
+import org.jacoco.core.test.validation.java5.targets.ControlStructureBeforeSuperConstructorTarget;
+import org.jacoco.core.test.validation.java5.targets.ControlStructuresTarget;
+import org.jacoco.core.test.validation.java5.targets.ExceptionsTarget;
+import org.jacoco.core.test.validation.java5.targets.ExplicitInitialFrameTarget;
+import org.jacoco.core.test.validation.java5.targets.FieldInitializationInTwoConstructorsTarget;
+import org.jacoco.core.test.validation.java5.targets.ImplicitFieldInitializationTarget;
+import org.jacoco.core.test.validation.java5.targets.InterfaceClassInitializerTarget;
+import org.jacoco.core.test.validation.java5.targets.StructuredLockingTarget;
import org.junit.Test;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
@@ -117,63 +116,59 @@ public class FramesTest {
}
@Test
- public void testTarget01() throws IOException {
- testFrames(Target01.class);
+ public void boolean_expressions() throws IOException {
+ testFrames(BooleanExpressionsTarget.class);
}
@Test
- public void testTarget02() throws IOException {
- testFrames(Target02.class);
+ public void class_initializer() throws IOException {
+ testFrames(ClassInitializerTarget.class);
}
@Test
- public void testTarget03() throws IOException {
- testFrames(Target03.class);
+ public void constructors() throws IOException {
+ testFrames(ConstructorsTarget.class);
}
@Test
- public void testTarget04() throws IOException {
- testFrames(Target04.class);
+ public void control_structures() throws IOException {
+ testFrames(ControlStructuresTarget.class);
}
@Test
- public void testTarget05() throws IOException {
- testFrames(Target05.class);
+ public void control_structure_before_super_constructor()
+ throws IOException {
+ testFrames(ControlStructureBeforeSuperConstructorTarget.class);
}
@Test
- public void testTarget06() throws IOException {
- testFrames(Target06.class);
+ public void exceptions() throws IOException {
+ testFrames(ExceptionsTarget.class);
}
@Test
- public void testTarget07() throws IOException {
- testFrames(Target07.class);
+ public void explicit_initial_frame() throws IOException {
+ testFrames(ExplicitInitialFrameTarget.class);
}
@Test
- public void testTarget08() throws IOException {
- testFrames(Target08.class);
+ public void field_initialization_in_two_constructors() throws IOException {
+ testFrames(FieldInitializationInTwoConstructorsTarget.class);
}
@Test
- public void testTarget09() throws IOException {
- testFrames(Target09.class);
+ public void implicit_field_initialization() throws IOException {
+ testFrames(ImplicitFieldInitializationTarget.class);
}
@Test
- public void testTarget10() throws IOException {
- testFrames(Target10.class);
+ public void interface_class_initializer() throws IOException {
+ testFrames(InterfaceClassInitializerTarget.class);
}
@Test
- public void testTarget11() throws IOException {
- testFrames(Target11.class);
- }
-
- @Test
- public void testTarget12() throws IOException {
- testFrames(Target12.class);
+ public void structured_locking() throws IOException {
+ testFrames(StructuredLockingTarget.class);
}
}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ImplicitFieldInitializationTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ImplicitFieldInitializationTest.java
index 769593d7..d87d039b 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/ImplicitFieldInitializationTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ImplicitFieldInitializationTest.java
@@ -9,10 +9,11 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.Target08;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.ImplicitFieldInitializationTarget;
import org.junit.Test;
/**
@@ -21,7 +22,7 @@ import org.junit.Test;
public class ImplicitFieldInitializationTest extends ValidationTestBase {
public ImplicitFieldInitializationTest() {
- super(Target08.class);
+ super(ImplicitFieldInitializationTarget.class);
}
@Test
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/InterfaceClassInitializerTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/InterfaceClassInitializerTest.java
index 5675dbb0..9e13debb 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/InterfaceClassInitializerTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/InterfaceClassInitializerTest.java
@@ -9,10 +9,11 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.Target04;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.InterfaceClassInitializerTarget;
import org.junit.Test;
/**
@@ -21,7 +22,7 @@ import org.junit.Test;
public class InterfaceClassInitializerTest extends ValidationTestBase {
public InterfaceClassInitializerTest() {
- super(Target04.class);
+ super(InterfaceClassInitializerTarget.class);
}
@Override
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/StructuredLockingTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/StructuredLockingTest.java
index 823ab787..8243c4bc 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/StructuredLockingTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/StructuredLockingTest.java
@@ -9,7 +9,7 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -24,7 +24,7 @@ import org.jacoco.core.internal.BytecodeVersion;
import org.jacoco.core.runtime.IRuntime;
import org.jacoco.core.runtime.SystemPropertiesRuntime;
import org.jacoco.core.test.TargetLoader;
-import org.jacoco.core.test.validation.targets.Target12;
+import org.jacoco.core.test.validation.java5.targets.StructuredLockingTarget;
import org.junit.Test;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.Opcodes;
@@ -55,12 +55,9 @@ import org.objectweb.asm.tree.analysis.Interpreter;
public class StructuredLockingTest {
@Test
- public void testTarget12() throws Exception {
- testMonitorExit(Target12.class);
- }
-
- private void testMonitorExit(Class<?> target) throws Exception {
- assertStructuredLocking(TargetLoader.getClassDataAsBytes(target));
+ public void testMonitorExit() throws Exception {
+ assertStructuredLocking(TargetLoader
+ .getClassDataAsBytes(StructuredLockingTarget.class));
}
private void assertStructuredLocking(byte[] source) throws Exception {
@@ -89,7 +86,8 @@ public class StructuredLockingTest {
}
@Override
- protected Frame<BasicValue> newFrame(Frame<? extends BasicValue> src) {
+ protected Frame<BasicValue> newFrame(
+ Frame<? extends BasicValue> src) {
return new LockFrame(src);
}
};
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SynchronizedTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SynchronizedTest.java
new file mode 100644
index 00000000..c1498be1
--- /dev/null
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SynchronizedTest.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.java5;
+
+import org.jacoco.core.analysis.ICounter;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.SynchronizedTarget;
+import org.junit.Test;
+
+/**
+ * Test of filtering of a bytecode that is generated for a synchronized
+ * statement.
+ */
+public class SynchronizedTest extends ValidationTestBase {
+
+ public SynchronizedTest() {
+ super(SynchronizedTarget.class);
+ }
+
+ /**
+ * {@link SynchronizedTarget#normal()}
+ */
+ @Test
+ public void normal() {
+ assertLine("before", ICounter.FULLY_COVERED);
+ // when compiled with ECJ next line covered partly without filter:
+ assertLine("monitorEnter", ICounter.FULLY_COVERED);
+ assertLine("body", ICounter.FULLY_COVERED);
+ if (isJDKCompiler) {
+ // without filter next line covered partly:
+ assertLine("monitorExit", ICounter.FULLY_COVERED);
+ } else {
+ assertLine("monitorExit", ICounter.EMPTY);
+ }
+ assertLine("after", ICounter.FULLY_COVERED);
+ }
+
+ /**
+ * {@link SynchronizedTarget#explicitException()}
+ */
+ @Test
+ public void explicitException() {
+ assertLine("explicitException.monitorEnter", ICounter.FULLY_COVERED);
+ assertLine("explicitException.exception", ICounter.FULLY_COVERED);
+ // when compiled with javac next line covered fully without filter:
+ assertLine("explicitException.monitorExit", ICounter.EMPTY);
+ }
+
+ /**
+ * {@link SynchronizedTarget#implicitException()}
+ */
+ @Test
+ public void implicitException() {
+ assertLine("implicitException.monitorEnter", isJDKCompiler
+ ? ICounter.FULLY_COVERED : ICounter.PARTLY_COVERED);
+ assertLine("implicitException.exception", ICounter.NOT_COVERED);
+ if (isJDKCompiler) {
+ // without filter next line covered partly:
+ assertLine("implicitException.monitorExit", ICounter.NOT_COVERED);
+ } else {
+ assertLine("implicitException.monitorExit", ICounter.EMPTY);
+ }
+ }
+
+}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/PrivateEmptyDefaultConstructorTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SyntheticTest.java
index 1d144b7d..f1f8372e 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/PrivateEmptyDefaultConstructorTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SyntheticTest.java
@@ -6,33 +6,33 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * Marc R. Hoffmann - initial API and implementation
- *
+ * Evgeny Mandrikov - initial API and implementation
+ *
*******************************************************************************/
-package org.jacoco.core.test.validation;
+package org.jacoco.core.test.validation.java5;
import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.test.validation.targets.Target07;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java5.targets.SyntheticTarget;
import org.junit.Test;
/**
- * Test of a private empty default constructor.
- *
- * @see ImplicitDefaultConstructorTest
+ * Test of filtering of synthetic methods.
*/
-public class PrivateEmptyDefaultConstructorTest extends ValidationTestBase {
+public class SyntheticTest extends ValidationTestBase {
- public PrivateEmptyDefaultConstructorTest() {
- super(Target07.class);
+ public SyntheticTest() {
+ super(SyntheticTarget.class);
}
@Test
public void testCoverageResult() {
+ assertMethodCount(5);
assertLine("classdef", ICounter.EMPTY);
- assertLine("super", ICounter.EMPTY);
- assertLine("constructor", ICounter.EMPTY);
+ assertLine("field", ICounter.EMPTY);
+ assertLine("inner.classdef", ICounter.EMPTY);
}
}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/AnnotationInitializer.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/AnnotationInitializerTarget.java
index f7b9e0af..95171b3b 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/AnnotationInitializer.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/AnnotationInitializerTarget.java
@@ -9,12 +9,12 @@
* Evgeny Mandrikov - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation.targets;
+package org.jacoco.core.test.validation.java5.targets;
/**
* This test target is an annotation with an initializer.
*/
-public @interface AnnotationInitializer {
+public @interface AnnotationInitializerTarget {
Object CONST = new Object(); // $line-const$
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/BadCycleClass.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BadCycleClassTarget.java
index c1826646..27b48dcc 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/BadCycleClass.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BadCycleClassTarget.java
@@ -9,9 +9,11 @@
* Evgeny Mandrikov - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation.targets;
+package org.jacoco.core.test.validation.java5.targets;
-public class BadCycleClass {
+import org.jacoco.core.test.validation.targets.Stubs;
+
+public class BadCycleClassTarget {
public static class Base {
static final Child b = new Child();
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target02.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BooleanExpressionsTarget.java
index 62e22ef9..a0b4ff50 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target02.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BooleanExpressionsTarget.java
@@ -9,7 +9,7 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation.targets;
+package org.jacoco.core.test.validation.java5.targets;
import static org.jacoco.core.test.validation.targets.Stubs.f;
import static org.jacoco.core.test.validation.targets.Stubs.i1;
@@ -20,7 +20,7 @@ import static org.jacoco.core.test.validation.targets.Stubs.t;
/**
* This target exercises boolean expressions.
*/
-public class Target02 {
+public class BooleanExpressionsTarget {
public static void main(String[] args) {
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target05.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ClassInitializerTarget.java
index ef5c3989..a8978362 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target05.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ClassInitializerTarget.java
@@ -9,14 +9,16 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation.targets;
+package org.jacoco.core.test.validation.java5.targets;
import static org.jacoco.core.test.validation.targets.Stubs.i1;
+import org.jacoco.core.test.validation.targets.Stubs;
+
/**
* This test target is a class with a static initializer.
*/
-public class Target05 {
+public class ClassInitializerTarget {
// No code required to initialize these fields:
@@ -42,7 +44,7 @@ public class Target05 {
Stubs.nop(); // $line-staticblock$
}
- private Target05() {
+ private ClassInitializerTarget() {
}
public static void main(String[] args) {
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ConstructorsTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ConstructorsTarget.java
new file mode 100644
index 00000000..99ff020d
--- /dev/null
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ConstructorsTarget.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.java5.targets;
+
+import static org.jacoco.core.test.validation.targets.Stubs.nop;
+
+/**
+ * This test target calls different constructors.
+ */
+public class ConstructorsTarget {
+
+ ConstructorsTarget() { // $line-packageLocal$
+ }
+
+ private ConstructorsTarget(Object arg) { // $line-arg$
+ }
+
+ private static class Super extends ConstructorsTarget {
+ private Super() {
+ super(null); // $line-super$
+ }
+ }
+
+ private class Inner {
+ private Inner() { // $line-inner$
+ }
+ }
+
+ private static class InnerStatic {
+ @SuppressWarnings("unused")
+ private final Object field = this;
+
+ private InnerStatic() { // $line-innerStatic$
+ }
+ }
+
+ public static class PublicDefault { // $line-publicDefault$
+ }
+
+ static class PackageLocalDefault { // $line-packageLocalDefault$
+ }
+
+ private static class PrivateDefault { // $line-privateDefault$
+ }
+
+ private static class PrivateNonEmptyNoArg {
+ private PrivateNonEmptyNoArg() {
+ nop(); // $line-privateNonEmptyNoArg$
+ }
+ }
+
+ private static class PrivateEmptyNoArg {
+ private PrivateEmptyNoArg() { // $line-privateEmptyNoArg$
+ } // $line-return$
+ }
+
+ public static void main(String[] args) {
+ new Super();
+ new ConstructorsTarget().new Inner();
+ new InnerStatic();
+ new PublicDefault();
+ new PackageLocalDefault();
+ new PrivateDefault();
+ new PrivateNonEmptyNoArg();
+ new PrivateEmptyNoArg();
+ }
+
+}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target10.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructureBeforeSuperConstructorTarget.java
index bb4496e9..ffc1d5f7 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target10.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructureBeforeSuperConstructorTarget.java
@@ -9,7 +9,7 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation.targets;
+package org.jacoco.core.test.validation.java5.targets;
import static org.jacoco.core.test.validation.targets.Stubs.f;
import static org.jacoco.core.test.validation.targets.Stubs.t;
@@ -20,14 +20,14 @@ import org.jacoco.core.test.validation.targets.Stubs.SuperClass;
* This test target has a constructor containing control structures before the
* superclass constructor is called.
*/
-public class Target10 extends SuperClass {
+public class ControlStructureBeforeSuperConstructorTarget extends SuperClass {
- public Target10() {
+ public ControlStructureBeforeSuperConstructorTarget() {
super(t() || f()); // $line-super$
}
public static void main(String[] args) {
- new Target10();
+ new ControlStructureBeforeSuperConstructorTarget();
}
}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target01.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructuresTarget.java
index 81d00fa5..3152a8b1 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target01.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructuresTarget.java
@@ -9,7 +9,7 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation.targets;
+package org.jacoco.core.test.validation.java5.targets;
import static org.jacoco.core.test.validation.targets.Stubs.f;
import static org.jacoco.core.test.validation.targets.Stubs.i2;
@@ -21,7 +21,7 @@ import java.util.Collections;
/**
* This target exercises a set of common Java control structures.
*/
-public class Target01 {
+public class ControlStructuresTarget {
public static void main(String[] args) {
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumConstructorTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumConstructorTarget.java
new file mode 100644
index 00000000..7d232bd7
--- /dev/null
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumConstructorTarget.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.java5.targets;
+
+import static org.jacoco.core.test.validation.targets.Stubs.nop;
+
+/**
+ * This test target is an enum constructor.
+ */
+public class EnumConstructorTarget {
+
+ private enum ImplicitConstructor { // $line-implicitConstructor$
+ }
+
+ private enum ExplicitNonEmptyConstructor {
+ ;
+
+ ExplicitNonEmptyConstructor() {
+ nop(); // $line-explicitNonEmptyConstructor$
+ }
+ }
+
+ @SuppressWarnings("unused")
+ private enum ExplicitEmptyConstructor {
+ ;
+
+ ExplicitEmptyConstructor() {
+ } // $line-explicitEmptyConstructor$
+
+ ExplicitEmptyConstructor(Object p) {
+ } // $line-explicitEmptyConstructorWithParameter$
+ }
+
+ public static void main(String[] args) {
+ ImplicitConstructor.values();
+ ExplicitEmptyConstructor.values();
+ ExplicitNonEmptyConstructor.values();
+ }
+
+}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/EnumImplicitMethods.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumImplicitMethodsTarget.java
index afbc46fd..ff589f78 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/EnumImplicitMethods.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumImplicitMethodsTarget.java
@@ -9,9 +9,11 @@
* Evgeny Mandrikov - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation.targets;
+package org.jacoco.core.test.validation.java5.targets;
-public enum EnumImplicitMethods { // $line-classdef$
+import org.jacoco.core.test.validation.targets.Stubs;
+
+public enum EnumImplicitMethodsTarget { // $line-classdef$
CONST(Stubs.f() ? new Object() : new Object()); // $line-const$
@@ -19,11 +21,11 @@ public enum EnumImplicitMethods { // $line-classdef$
} // $line-staticblock$
/**
- * Unlike in {@link Target07 regular classes}, even if enum has explicit
+ * Unlike in {@link ConstructorsTarget regular classes}, even if enum has explicit
* constructor, {@code clinit} method in any case has a reference to the
* line of enum definition.
*/
- EnumImplicitMethods(Object o) { // $line-super$
+ EnumImplicitMethodsTarget(Object o) { // $line-super$
} // $line-constructor$
/**
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumSwitchTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumSwitchTarget.java
new file mode 100644
index 00000000..47447e5a
--- /dev/null
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumSwitchTarget.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.java5.targets;
+
+import static org.jacoco.core.test.validation.targets.Stubs.nop;
+
+/**
+ * This test target is a switch statement with a enum.
+ */
+public class EnumSwitchTarget {
+
+ private enum E {
+ V1, V2
+ }
+
+ private static void example(E e) {
+ switch (e) { // $line-switch$
+ case V1:
+ nop("V1");
+ break;
+ case V2:
+ default:
+ nop("V2");
+ break;
+ }
+ }
+
+ public static void main(String[] args) {
+ example(E.V1);
+ example(E.V2);
+ }
+
+}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target03.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExceptionsTarget.java
index b4418edd..1896e64d 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target03.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExceptionsTarget.java
@@ -9,7 +9,7 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation.targets;
+package org.jacoco.core.test.validation.java5.targets;
import static org.jacoco.core.test.validation.targets.Stubs.ex;
import static org.jacoco.core.test.validation.targets.Stubs.f;
@@ -20,7 +20,7 @@ import org.jacoco.core.test.validation.targets.Stubs.StubException;
/**
* This target produces exception based control flow examples.
*/
-public class Target03 {
+public class ExceptionsTarget {
public static void main(String[] args) {
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target11.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExplicitInitialFrameTarget.java
index d393cb7f..bc089fc7 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target11.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExplicitInitialFrameTarget.java
@@ -9,7 +9,7 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation.targets;
+package org.jacoco.core.test.validation.java5.targets;
import static org.jacoco.core.test.validation.targets.Stubs.f;
import static org.jacoco.core.test.validation.targets.Stubs.nop;
@@ -18,7 +18,7 @@ import static org.jacoco.core.test.validation.targets.Stubs.nop;
* This test target needs an explicit initial frame as the first instruction
* already is a jump target.
*/
-public class Target11 {
+public class ExplicitInitialFrameTarget {
public static void main(String[] args) {
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target09.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FieldInitializationInTwoConstructorsTarget.java
index a8589d1d..58bf6890 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target09.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FieldInitializationInTwoConstructorsTarget.java
@@ -9,26 +9,26 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation.targets;
+package org.jacoco.core.test.validation.java5.targets;
/**
* This test target has instance members with initialization in two
* constructors.
*/
-public class Target09 {
+public class FieldInitializationInTwoConstructorsTarget {
Object field1 = null; // $line-field1$
int field2 = 123; // $line-field2$
- public Target09() {
+ public FieldInitializationInTwoConstructorsTarget() {
} // $line-constr1$
- public Target09(String arg) {
+ public FieldInitializationInTwoConstructorsTarget(String arg) {
} // $line-constr2$
public static void main(String[] args) {
- new Target09();
+ new FieldInitializationInTwoConstructorsTarget();
}
}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FinallyTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FinallyTarget.java
new file mode 100644
index 00000000..2c317e95
--- /dev/null
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FinallyTarget.java
@@ -0,0 +1,148 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.java5.targets;
+
+import static org.jacoco.core.test.validation.targets.Stubs.ex;
+import static org.jacoco.core.test.validation.targets.Stubs.f;
+import static org.jacoco.core.test.validation.targets.Stubs.nop;
+import static org.jacoco.core.test.validation.targets.Stubs.t;
+
+public class FinallyTarget {
+
+ /**
+ * <pre>
+ * InputStream in = null;
+ * try {
+ * in = ...;
+ * ...
+ * } finally {
+ * if (in != null) {
+ * in.close();
+ * }
+ * }
+ * </pre>
+ */
+ private static void example(boolean t) {
+ Object in = null;
+ try {
+ in = open(t);
+ } finally { // $line-example.0$
+ if (in != null) { // $line-example.1$
+ nop(); // $line-example.2$
+ } // $line-example.3$
+ } // $line-example.4$
+ }
+
+ private static Object open(boolean t) {
+ ex(t);
+ return new Object();
+ }
+
+ private static void breakStatement() {
+ for (int i = 0; i < 1; i++) { // $line-breakStatement.for$
+ try {
+ if (f()) {
+ break; // $line-breakStatement$
+ }
+ } finally {
+ nop("finally"); // $line-breakStatement.1$
+ } // $line-breakStatement.2$
+ }
+ }
+
+ private static void catchNotExecuted() {
+ try {
+ nop("try");
+ } catch (Exception e) { // $line-catchNotExecuted$
+ nop("catch"); // $line-catchNotExecuted.catch$
+ } finally { // $line-catchNotExecuted.0$
+ nop("finally"); // $line-catchNotExecuted.1$
+ } // $line-catchNotExecuted.2$
+ }
+
+ private static void emptyCatch() {
+ try {
+ nop("try");
+ } catch (Exception e) { // $line-emptyCatch$
+ // empty
+ } finally { // $line-emptyCatch.0$
+ nop("finally"); // $line-emptyCatch.1$
+ } // $line-emptyCatch.2$
+ }
+
+ private static void twoRegions() {
+ try {
+ // jump to another region associated with same handler:
+ if (t()) { // $line-twoRegions.if$
+ nop(); // $line-twoRegions.region.1$
+ return; // $line-twoRegions.return.1$
+ } else {
+ nop(); // $line-twoRegions.region.2$
+ return; // $line-twoRegions.return.2$
+ }
+ } finally { // $line-twoRegions.0$
+ nop(); // $line-twoRegions.1$
+ } // $line-twoRegions.2$
+ }
+
+ private static void nested() {
+ try {
+ nop();
+ } finally { // $line-nested.0$
+ try { // $line-nested.1$
+ nop(); // $line-nested.2$
+ } finally { // $line-nested.3$
+ nop(); // $line-nested.4$
+ } // $line-nested.5$
+ } // $line-nested.6$
+ }
+
+ private static void emptyTry() {
+ try {
+ // empty
+ } finally { // $line-emptyTry.0$
+ nop(); // $line-emptyTry.1$
+ } // $line-emptyTry.2$
+ }
+
+ @SuppressWarnings("finally")
+ private static void alwaysCompletesAbruptly() {
+ try {
+ nop();
+ } finally { // $line-alwaysCompletesAbruptly.0$
+ return; // $line-alwaysCompletesAbruptly.1$
+ } // $line-alwaysCompletesAbruptly.2$
+ }
+
+ public static void main(String[] args) {
+ example(false);
+ try {
+ example(true);
+ } catch (Exception ignore) {
+ }
+
+ breakStatement();
+
+ catchNotExecuted();
+
+ emptyCatch();
+
+ twoRegions();
+
+ nested();
+
+ emptyTry();
+
+ alwaysCompletesAbruptly();
+ }
+
+}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target08.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ImplicitFieldInitializationTarget.java
index 1fe938aa..6ddf8cbd 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target08.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ImplicitFieldInitializationTarget.java
@@ -9,12 +9,12 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation.targets;
+package org.jacoco.core.test.validation.java5.targets;
/**
* This test target has instance members with implicit initializers.
*/
-public class Target08 { // $line-classdef$
+public class ImplicitFieldInitializationTarget { // $line-classdef$
Object field1; // $line-field1$
@@ -25,7 +25,7 @@ public class Target08 { // $line-classdef$
int field4 = 2000; // $line-field4$
public static void main(String[] args) {
- new Target08();
+ new ImplicitFieldInitializationTarget();
}
}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target04.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/InterfaceClassInitializerTarget.java
index 8384744b..2debf6bd 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target04.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/InterfaceClassInitializerTarget.java
@@ -9,14 +9,14 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation.targets;
+package org.jacoco.core.test.validation.java5.targets;
import static org.jacoco.core.test.validation.targets.Stubs.i1;
/**
* This test target is an interface with a class initializer.
*/
-public interface Target04 {
+public interface InterfaceClassInitializerTarget {
// No code required to initialize these fields:
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target12.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/StructuredLockingTarget.java
index 5ee2e324..1e561ae1 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target12.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/StructuredLockingTarget.java
@@ -9,14 +9,14 @@
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
-package org.jacoco.core.test.validation.targets;
+package org.jacoco.core.test.validation.java5.targets;
import static org.jacoco.core.test.validation.targets.Stubs.nop;
/**
* This target uses synchronized blocks which compile to try/catch statements.
*/
-public class Target12 {
+public class StructuredLockingTarget {
static void simple() {
Object lock1 = new Object();
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SynchronizedTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SynchronizedTarget.java
new file mode 100644
index 00000000..5bea5758
--- /dev/null
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SynchronizedTarget.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.java5.targets;
+
+import static org.jacoco.core.test.validation.targets.Stubs.ex;
+import static org.jacoco.core.test.validation.targets.Stubs.nop;
+
+import org.jacoco.core.test.validation.targets.Stubs.StubException;
+
+/**
+ * This test target is a synchronized statement.
+ */
+public class SynchronizedTarget {
+
+ private static final Object lock = new Object();
+
+ private static void normal() {
+ nop(); // $line-before$
+ synchronized (lock) { // $line-monitorEnter$
+ nop(); // $line-body$
+ } // $line-monitorExit$
+ nop(); // $line-after$
+ }
+
+ private static void explicitException() {
+ synchronized (lock) { // $line-explicitException.monitorEnter$
+ throw new StubException(); // $line-explicitException.exception$
+ } // $line-explicitException.monitorExit$
+ }
+
+ private static void implicitException() {
+ synchronized (lock) { // $line-implicitException.monitorEnter$
+ ex(); // $line-implicitException.exception$
+ } // $line-implicitException.monitorExit$
+ }
+
+ public static void main(String[] args) {
+ normal();
+
+ try {
+ explicitException();
+ } catch (StubException e) {
+ }
+
+ try {
+ implicitException();
+ } catch (StubException e) {
+ }
+ }
+
+}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SyntheticTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SyntheticTarget.java
new file mode 100644
index 00000000..c5cc3fee
--- /dev/null
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SyntheticTarget.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.java5.targets;
+
+/**
+ * This test target results in synthetic methods.
+ */
+public class SyntheticTarget { // $line-classdef$
+
+ private static int counter; // $line-field$
+
+ /**
+ * {@link org.jacoco.core.test.validation.java5.targets.ImplicitDefaultConstructorTarget
+ * Default constructor will refer to a line of class definition}, so that we
+ * define constructor explicitly in order to verify that we filter all other
+ * constructions here that might refer to line of class definition.
+ */
+ private SyntheticTarget() {
+ }
+
+ static class Inner extends SyntheticTarget { // $line-inner.classdef$
+
+ Inner() {
+ }
+
+ /**
+ * Access to private field of outer class causes creation of synthetic
+ * methods in it. In case of javac those methods refer to the line of
+ * outer class definition, in case of ECJ - to the line of field.
+ */
+ private static void inc() {
+ counter = counter + 2;
+ }
+
+ /**
+ * Difference of return type with overridden method causes creation of
+ * synthetic bridge method in this class. In case of javac this method
+ * refers to the line of inner class definition, in case of EJC - to the
+ * first line of file.
+ */
+ @Override
+ public String get() {
+ return null;
+ }
+ }
+
+ public Object get() {
+ return null;
+ }
+
+ public static void main(String[] args) {
+ Inner.inc();
+ }
+
+}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target06.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target06.java
deleted file mode 100644
index f6bc75e8..00000000
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target06.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Marc R. Hoffmann - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.test.validation.targets;
-
-/**
- * This test target is a class with a implicit default constructor.
- *
- * @see Target07 explicit constructor
- */
-public class Target06 { // $line-classdef$
-
- public static void main(String[] args) {
- new Target06();
- }
-
-}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target07.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target07.java
deleted file mode 100644
index 18c3ba52..00000000
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/targets/Target07.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Marc R. Hoffmann - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.test.validation.targets;
-
-/**
- * This test target is a private empty default constructor.
- *
- * @see Target06 implicit constructor
- */
-public class Target07 { // $line-classdef$
-
- private Target07() { // $line-super$
- } // $line-constructor$
-
- public static void main(String[] args) {
- }
-
-}