aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core.test/src/org/jacoco/core/test
diff options
context:
space:
mode:
authorEvgeny Mandrikov <mandrikov@gmail.com>2012-08-30 22:13:04 +0600
committerEvgeny Mandrikov <mandrikov@gmail.com>2012-08-30 22:13:04 +0600
commite69ba4dbb015949c5d84ba7bbb0b53efac28bb23 (patch)
tree44cbe6d78216fcb3c37c0aca1dc7ed3fc09906fa /org.jacoco.core.test/src/org/jacoco/core/test
parenta888d873ac20357a4a11029bc84c5c4b48e394a3 (diff)
downloadjacoco-e69ba4dbb015949c5d84ba7bbb0b53efac28bb23.tar.gz
Fix EOLs
Diffstat (limited to 'org.jacoco.core.test/src/org/jacoco/core/test')
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java184
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/AnalysisTimeScenario.java104
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java102
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfOutput.java96
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfScenario.java54
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationSizeSzenario.java82
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationTimeScenario.java92
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/PerfOutputWriter.java160
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/PerformanceSuite.java98
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/TimedScenario.java134
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target01.java252
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target02.java54
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target03.java306
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java170
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java278
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java196
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/Source.java232
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/SourceTest.java174
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java246
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Stubs.java214
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target01.java432
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target02.java248
22 files changed, 1954 insertions, 1954 deletions
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java b/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java
index bb216a27..4fa9f69b 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java
@@ -1,92 +1,92 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Loads a single class from a byte array.
- */
-public class TargetLoader extends ClassLoader {
-
- private final String sourcename;
-
- private final byte[] bytes;
-
- private final Class<?> clazz;
-
- public TargetLoader(final String name, final byte[] bytes) {
- super(TargetLoader.class.getClassLoader());
- this.sourcename = name;
- this.bytes = bytes;
- clazz = load(name);
- }
-
- public TargetLoader(final Class<?> source, final byte[] bytes) {
- super(TargetLoader.class.getClassLoader());
- this.sourcename = source.getName();
- this.bytes = bytes;
- clazz = load(source.getName());
- }
-
- private Class<?> load(final String sourcename) {
- try {
- return loadClass(sourcename);
- } catch (ClassNotFoundException e) {
- // must not happen
- throw new RuntimeException(e);
- }
- }
-
- public Class<?> getTargetClass() {
- return clazz;
- }
-
- public Object newTargetInstance() throws InstantiationException,
- IllegalAccessException {
- return clazz.newInstance();
- }
-
- public static InputStream getClassData(Class<?> clazz) {
- final String resource = "/" + clazz.getName().replace('.', '/')
- + ".class";
- return clazz.getResourceAsStream(resource);
- }
-
- public static byte[] getClassDataAsBytes(Class<?> clazz) throws IOException {
- InputStream in = getClassData(clazz);
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- byte[] buffer = new byte[0x100];
- int len;
- while ((len = in.read(buffer)) != -1) {
- out.write(buffer, 0, len);
- }
- in.close();
- return out.toByteArray();
- }
-
- @Override
- protected synchronized Class<?> loadClass(String name, boolean resolve)
- throws ClassNotFoundException {
- if (sourcename.equals(name)) {
- Class<?> c = defineClass(name, bytes, 0, bytes.length);
- if (resolve) {
- resolveClass(c);
- }
- return c;
- }
- return super.loadClass(name, resolve);
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Loads a single class from a byte array.
+ */
+public class TargetLoader extends ClassLoader {
+
+ private final String sourcename;
+
+ private final byte[] bytes;
+
+ private final Class<?> clazz;
+
+ public TargetLoader(final String name, final byte[] bytes) {
+ super(TargetLoader.class.getClassLoader());
+ this.sourcename = name;
+ this.bytes = bytes;
+ clazz = load(name);
+ }
+
+ public TargetLoader(final Class<?> source, final byte[] bytes) {
+ super(TargetLoader.class.getClassLoader());
+ this.sourcename = source.getName();
+ this.bytes = bytes;
+ clazz = load(source.getName());
+ }
+
+ private Class<?> load(final String sourcename) {
+ try {
+ return loadClass(sourcename);
+ } catch (ClassNotFoundException e) {
+ // must not happen
+ throw new RuntimeException(e);
+ }
+ }
+
+ public Class<?> getTargetClass() {
+ return clazz;
+ }
+
+ public Object newTargetInstance() throws InstantiationException,
+ IllegalAccessException {
+ return clazz.newInstance();
+ }
+
+ public static InputStream getClassData(Class<?> clazz) {
+ final String resource = "/" + clazz.getName().replace('.', '/')
+ + ".class";
+ return clazz.getResourceAsStream(resource);
+ }
+
+ public static byte[] getClassDataAsBytes(Class<?> clazz) throws IOException {
+ InputStream in = getClassData(clazz);
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ byte[] buffer = new byte[0x100];
+ int len;
+ while ((len = in.read(buffer)) != -1) {
+ out.write(buffer, 0, len);
+ }
+ in.close();
+ return out.toByteArray();
+ }
+
+ @Override
+ protected synchronized Class<?> loadClass(String name, boolean resolve)
+ throws ClassNotFoundException {
+ if (sourcename.equals(name)) {
+ Class<?> c = defineClass(name, bytes, 0, bytes.length);
+ if (resolve) {
+ resolveClass(c);
+ }
+ return c;
+ }
+ return super.loadClass(name, resolve);
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/AnalysisTimeScenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/AnalysisTimeScenario.java
index ffe3df60..f5a5b6c8 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/AnalysisTimeScenario.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/AnalysisTimeScenario.java
@@ -1,52 +1,52 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.perf;
-
-import org.jacoco.core.analysis.Analyzer;
-import org.jacoco.core.analysis.IClassCoverage;
-import org.jacoco.core.analysis.ICoverageVisitor;
-import org.jacoco.core.data.ExecutionDataStore;
-import org.jacoco.core.test.TargetLoader;
-
-/**
- * Scenario to measure the time taken by the instrumentation process itself.
- */
-public class AnalysisTimeScenario extends TimedScenario {
-
- private final Class<?> target;
-
- private final int count;
-
- protected AnalysisTimeScenario(Class<?> target, int count) {
- super(String.format("analysing %s classes", Integer.valueOf(count)));
- this.target = target;
- this.count = count;
- }
-
- @Override
- protected Runnable getInstrumentedRunnable() throws Exception {
- final byte[] bytes = TargetLoader.getClassDataAsBytes(target);
- final ExecutionDataStore executionData = new ExecutionDataStore();
- ICoverageVisitor visitor = new ICoverageVisitor() {
- public void visitCoverage(IClassCoverage coverage) {
- }
- };
- final Analyzer analyzer = new Analyzer(executionData, visitor);
- return new Runnable() {
- public void run() {
- for (int i = 0; i < count; i++) {
- analyzer.analyzeClass(bytes);
- }
- }
- };
- }
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.perf;
+
+import org.jacoco.core.analysis.Analyzer;
+import org.jacoco.core.analysis.IClassCoverage;
+import org.jacoco.core.analysis.ICoverageVisitor;
+import org.jacoco.core.data.ExecutionDataStore;
+import org.jacoco.core.test.TargetLoader;
+
+/**
+ * Scenario to measure the time taken by the instrumentation process itself.
+ */
+public class AnalysisTimeScenario extends TimedScenario {
+
+ private final Class<?> target;
+
+ private final int count;
+
+ protected AnalysisTimeScenario(Class<?> target, int count) {
+ super(String.format("analysing %s classes", Integer.valueOf(count)));
+ this.target = target;
+ this.count = count;
+ }
+
+ @Override
+ protected Runnable getInstrumentedRunnable() throws Exception {
+ final byte[] bytes = TargetLoader.getClassDataAsBytes(target);
+ final ExecutionDataStore executionData = new ExecutionDataStore();
+ ICoverageVisitor visitor = new ICoverageVisitor() {
+ public void visitCoverage(IClassCoverage coverage) {
+ }
+ };
+ final Analyzer analyzer = new Analyzer(executionData, visitor);
+ return new Runnable() {
+ public void run() {
+ for (int i = 0; i < count; i++) {
+ analyzer.analyzeClass(bytes);
+ }
+ }
+ };
+ }
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java
index 92b219f1..513de2a8 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java
@@ -1,51 +1,51 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.perf;
-
-import org.jacoco.core.instr.Instrumenter;
-import org.jacoco.core.runtime.IRuntime;
-import org.jacoco.core.runtime.LoggerRuntime;
-import org.jacoco.core.test.TargetLoader;
-import org.objectweb.asm.ClassReader;
-
-/**
- * This scenario runs a given scenario twice and reports the execution time:
- * Once on its original version, once in a instrumented version.
- */
-public class ExecuteInstrumentedCodeScenario extends TimedScenario {
-
- private final Class<? extends Runnable> target;
-
- protected ExecuteInstrumentedCodeScenario(String description,
- Class<? extends Runnable> target) {
- super(description);
- this.target = target;
- }
-
- @Override
- protected Runnable getInstrumentedRunnable() throws Exception {
- ClassReader reader = new ClassReader(TargetLoader.getClassData(target));
- IRuntime runtime = new LoggerRuntime();
- runtime.startup();
- final Instrumenter instr = new Instrumenter(runtime);
- final byte[] instrumentedBuffer = instr.instrument(reader);
- final TargetLoader loader = new TargetLoader(target, instrumentedBuffer);
-
- return (Runnable) loader.newTargetInstance();
- }
-
- @Override
- protected Runnable getReferenceRunnable() throws Exception {
- return target.newInstance();
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.perf;
+
+import org.jacoco.core.instr.Instrumenter;
+import org.jacoco.core.runtime.IRuntime;
+import org.jacoco.core.runtime.LoggerRuntime;
+import org.jacoco.core.test.TargetLoader;
+import org.objectweb.asm.ClassReader;
+
+/**
+ * This scenario runs a given scenario twice and reports the execution time:
+ * Once on its original version, once in a instrumented version.
+ */
+public class ExecuteInstrumentedCodeScenario extends TimedScenario {
+
+ private final Class<? extends Runnable> target;
+
+ protected ExecuteInstrumentedCodeScenario(String description,
+ Class<? extends Runnable> target) {
+ super(description);
+ this.target = target;
+ }
+
+ @Override
+ protected Runnable getInstrumentedRunnable() throws Exception {
+ ClassReader reader = new ClassReader(TargetLoader.getClassData(target));
+ IRuntime runtime = new LoggerRuntime();
+ runtime.startup();
+ final Instrumenter instr = new Instrumenter(runtime);
+ final byte[] instrumentedBuffer = instr.instrument(reader);
+ final TargetLoader loader = new TargetLoader(target, instrumentedBuffer);
+
+ return (Runnable) loader.newTargetInstance();
+ }
+
+ @Override
+ protected Runnable getReferenceRunnable() throws Exception {
+ return target.newInstance();
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfOutput.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfOutput.java
index 8a6cafa0..72e1f1eb 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfOutput.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfOutput.java
@@ -1,48 +1,48 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.perf;
-
-/**
- * Interface to report performance figures to.
- */
-public interface IPerfOutput {
-
- /** Indicator for no reference time given */
- public static final long NO_REFERENCE = Long.MIN_VALUE;
-
- /**
- * Reports the result of a time measurement with a optional reference time
- * for comparison.
- *
- * @param description
- * textual description of the test case
- * @param duration
- * duration in nano seconds
- * @param reference
- * optional reference time in nano seconds
- */
- void writeTimeResult(String description, long duration, long reference);
-
- /**
- * Reports the result of a byte size measurement with a optional reference
- * size for comparison.
- *
- * @param description
- * textual description of the test case
- * @param size
- * size in bytes
- * @param reference
- * optional reference size in bytes
- */
- void writeByteResult(String description, long size, long reference);
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.perf;
+
+/**
+ * Interface to report performance figures to.
+ */
+public interface IPerfOutput {
+
+ /** Indicator for no reference time given */
+ public static final long NO_REFERENCE = Long.MIN_VALUE;
+
+ /**
+ * Reports the result of a time measurement with a optional reference time
+ * for comparison.
+ *
+ * @param description
+ * textual description of the test case
+ * @param duration
+ * duration in nano seconds
+ * @param reference
+ * optional reference time in nano seconds
+ */
+ void writeTimeResult(String description, long duration, long reference);
+
+ /**
+ * Reports the result of a byte size measurement with a optional reference
+ * size for comparison.
+ *
+ * @param description
+ * textual description of the test case
+ * @param size
+ * size in bytes
+ * @param reference
+ * optional reference size in bytes
+ */
+ void writeByteResult(String description, long size, long reference);
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfScenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfScenario.java
index ed0d02cb..adfafab2 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfScenario.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfScenario.java
@@ -1,27 +1,27 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.perf;
-
-/**
- * Interface for a performance scenario.
- */
-public interface IPerfScenario {
-
- /**
- * Runs the performance scenario and reports the result to the given
- * interface.
- *
- * @param output
- */
- public void run(IPerfOutput output) throws Exception;
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.perf;
+
+/**
+ * Interface for a performance scenario.
+ */
+public interface IPerfScenario {
+
+ /**
+ * Runs the performance scenario and reports the result to the given
+ * interface.
+ *
+ * @param output
+ */
+ public void run(IPerfOutput output) throws Exception;
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationSizeSzenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationSizeSzenario.java
index 6453f5fd..9568f555 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationSizeSzenario.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationSizeSzenario.java
@@ -1,41 +1,41 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.perf;
-
-import org.jacoco.core.instr.Instrumenter;
-import org.jacoco.core.runtime.IRuntime;
-import org.jacoco.core.runtime.LoggerRuntime;
-import org.jacoco.core.test.TargetLoader;
-import org.objectweb.asm.ClassReader;
-
-/**
- * Scenario to measure the overhead in terms of additional byte code size
- * through instrumentation.
- */
-public class InstrumentationSizeSzenario implements IPerfScenario {
-
- private final Class<?> target;
-
- public InstrumentationSizeSzenario(Class<?> target) {
- this.target = target;
- }
-
- public void run(IPerfOutput output) throws Exception {
- final IRuntime runtime = new LoggerRuntime();
- ClassReader reader = new ClassReader(TargetLoader.getClassData(target));
- final Instrumenter instr = new Instrumenter(runtime);
- instr.instrument(reader);
- output.writeByteResult("instrumented class",
- instr.instrument(reader).length, reader.b.length);
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.perf;
+
+import org.jacoco.core.instr.Instrumenter;
+import org.jacoco.core.runtime.IRuntime;
+import org.jacoco.core.runtime.LoggerRuntime;
+import org.jacoco.core.test.TargetLoader;
+import org.objectweb.asm.ClassReader;
+
+/**
+ * Scenario to measure the overhead in terms of additional byte code size
+ * through instrumentation.
+ */
+public class InstrumentationSizeSzenario implements IPerfScenario {
+
+ private final Class<?> target;
+
+ public InstrumentationSizeSzenario(Class<?> target) {
+ this.target = target;
+ }
+
+ public void run(IPerfOutput output) throws Exception {
+ final IRuntime runtime = new LoggerRuntime();
+ ClassReader reader = new ClassReader(TargetLoader.getClassData(target));
+ final Instrumenter instr = new Instrumenter(runtime);
+ instr.instrument(reader);
+ output.writeByteResult("instrumented class",
+ instr.instrument(reader).length, reader.b.length);
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationTimeScenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationTimeScenario.java
index 581df93c..22503307 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationTimeScenario.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationTimeScenario.java
@@ -1,46 +1,46 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.perf;
-
-import org.jacoco.core.instr.Instrumenter;
-import org.jacoco.core.runtime.LoggerRuntime;
-import org.jacoco.core.test.TargetLoader;
-
-/**
- * Scenario to measure the time taken by the instrumentation process itself.
- */
-public class InstrumentationTimeScenario extends TimedScenario {
-
- private final Class<?> target;
-
- private final int count;
-
- protected InstrumentationTimeScenario(Class<?> target, int count) {
- super(String.format("instrumenting %s classes", Integer.valueOf(count)));
- this.target = target;
- this.count = count;
- }
-
- @Override
- protected Runnable getInstrumentedRunnable() throws Exception {
- final byte[] bytes = TargetLoader.getClassDataAsBytes(target);
- final Instrumenter instr = new Instrumenter(new LoggerRuntime());
- return new Runnable() {
- public void run() {
- for (int i = 0; i < count; i++) {
- instr.instrument(bytes);
- }
- }
- };
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.perf;
+
+import org.jacoco.core.instr.Instrumenter;
+import org.jacoco.core.runtime.LoggerRuntime;
+import org.jacoco.core.test.TargetLoader;
+
+/**
+ * Scenario to measure the time taken by the instrumentation process itself.
+ */
+public class InstrumentationTimeScenario extends TimedScenario {
+
+ private final Class<?> target;
+
+ private final int count;
+
+ protected InstrumentationTimeScenario(Class<?> target, int count) {
+ super(String.format("instrumenting %s classes", Integer.valueOf(count)));
+ this.target = target;
+ this.count = count;
+ }
+
+ @Override
+ protected Runnable getInstrumentedRunnable() throws Exception {
+ final byte[] bytes = TargetLoader.getClassDataAsBytes(target);
+ final Instrumenter instr = new Instrumenter(new LoggerRuntime());
+ return new Runnable() {
+ public void run() {
+ for (int i = 0; i < count; i++) {
+ instr.instrument(bytes);
+ }
+ }
+ };
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerfOutputWriter.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerfOutputWriter.java
index 6586a97e..47652fe8 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerfOutputWriter.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerfOutputWriter.java
@@ -1,80 +1,80 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.perf;
-
-import static java.lang.String.format;
-
-import java.io.PrintWriter;
-
-import org.jacoco.core.JaCoCo;
-
-/**
- * Formatted text output.
- */
-public class PerfOutputWriter implements IPerfOutput {
-
- private final PrintWriter writer;
-
- public PerfOutputWriter(final PrintWriter writer) {
- this.writer = writer;
- writeHeader();
- }
-
- private void writeHeader() {
- writer.printf("JaCoCo Performance Data%n%n");
- writer.printf("JaCoCo Version: %s%n", JaCoCo.VERSION);
- writer.printf("JVM Vendor: %s%n",
- System.getProperty("java.vm.vendor"));
- writer.printf("JVM Version: %s%n%n",
- System.getProperty("java.vm.version"));
- writer.println("scenario instr ref overhead");
- writer.println("----------------------------------------------------------");
- }
-
- public void writeTimeResult(final String description, final long duration,
- final long reference) {
- final double dms = (double) duration / 1000000;
- if (reference == NO_REFERENCE) {
- writeResult(description, dms, "%.2f", "ms");
- } else {
- final double rms = (double) reference / 1000000;
- writeResult(description, dms, rms, "%.2f", "ms");
- }
- }
-
- public void writeByteResult(String description, long size, long reference) {
- if (size == 0) {
- return;
- }
- if (reference == NO_REFERENCE) {
- writeResult(description, size, "%.0f", "bytes");
- } else {
- writeResult(description, size, reference, "%.0f", "bytes");
- }
- }
-
- private void writeResult(final String description, final double subject,
- String fmt, String unit) {
- writer.printf("%-30s%8s %-6s%n", description,
- format(fmt, Double.valueOf(subject)), unit);
- }
-
- private void writeResult(final String description, final double subject,
- final double reference, String fmt, String unit) {
- double overhead = 100 * (subject - reference) / reference;
- writer.printf("%-30s%8s%8s %-6s%4.0f%%%n", description,
- format(fmt, Double.valueOf(subject)),
- format(fmt, Double.valueOf(reference)), unit,
- Double.valueOf(overhead));
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.perf;
+
+import static java.lang.String.format;
+
+import java.io.PrintWriter;
+
+import org.jacoco.core.JaCoCo;
+
+/**
+ * Formatted text output.
+ */
+public class PerfOutputWriter implements IPerfOutput {
+
+ private final PrintWriter writer;
+
+ public PerfOutputWriter(final PrintWriter writer) {
+ this.writer = writer;
+ writeHeader();
+ }
+
+ private void writeHeader() {
+ writer.printf("JaCoCo Performance Data%n%n");
+ writer.printf("JaCoCo Version: %s%n", JaCoCo.VERSION);
+ writer.printf("JVM Vendor: %s%n",
+ System.getProperty("java.vm.vendor"));
+ writer.printf("JVM Version: %s%n%n",
+ System.getProperty("java.vm.version"));
+ writer.println("scenario instr ref overhead");
+ writer.println("----------------------------------------------------------");
+ }
+
+ public void writeTimeResult(final String description, final long duration,
+ final long reference) {
+ final double dms = (double) duration / 1000000;
+ if (reference == NO_REFERENCE) {
+ writeResult(description, dms, "%.2f", "ms");
+ } else {
+ final double rms = (double) reference / 1000000;
+ writeResult(description, dms, rms, "%.2f", "ms");
+ }
+ }
+
+ public void writeByteResult(String description, long size, long reference) {
+ if (size == 0) {
+ return;
+ }
+ if (reference == NO_REFERENCE) {
+ writeResult(description, size, "%.0f", "bytes");
+ } else {
+ writeResult(description, size, reference, "%.0f", "bytes");
+ }
+ }
+
+ private void writeResult(final String description, final double subject,
+ String fmt, String unit) {
+ writer.printf("%-30s%8s %-6s%n", description,
+ format(fmt, Double.valueOf(subject)), unit);
+ }
+
+ private void writeResult(final String description, final double subject,
+ final double reference, String fmt, String unit) {
+ double overhead = 100 * (subject - reference) / reference;
+ writer.printf("%-30s%8s%8s %-6s%4.0f%%%n", description,
+ format(fmt, Double.valueOf(subject)),
+ format(fmt, Double.valueOf(reference)), unit,
+ Double.valueOf(overhead));
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerformanceSuite.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerformanceSuite.java
index d6b2f19d..c51f6260 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerformanceSuite.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerformanceSuite.java
@@ -1,49 +1,49 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.perf;
-
-import java.io.PrintWriter;
-
-import org.jacoco.core.test.perf.targets.Target01;
-import org.jacoco.core.test.perf.targets.Target02;
-import org.jacoco.core.test.perf.targets.Target03;
-
-/**
- * The main test suite.
- */
-public class PerformanceSuite implements IPerfScenario {
-
- public void run(IPerfOutput output) throws Exception {
- new ExecuteInstrumentedCodeScenario("plain method calls",
- Target01.class).run(output);
- new ExecuteInstrumentedCodeScenario("loop only", Target02.class)
- .run(output);
- new ExecuteInstrumentedCodeScenario("game of life", Target03.class)
- .run(output);
- new InstrumentationSizeSzenario(Target03.class).run(output);
- new InstrumentationTimeScenario(Target03.class, 1000).run(output);
- new AnalysisTimeScenario(Target03.class, 1000).run(output);
- }
-
- public static void main(String[] args) throws Exception {
- final PrintWriter writer;
- if (args.length == 0) {
- writer = new PrintWriter(System.out, true);
- } else {
- writer = new PrintWriter(args[0]);
- }
- IPerfOutput output = new PerfOutputWriter(writer);
- new PerformanceSuite().run(output);
- writer.close();
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.perf;
+
+import java.io.PrintWriter;
+
+import org.jacoco.core.test.perf.targets.Target01;
+import org.jacoco.core.test.perf.targets.Target02;
+import org.jacoco.core.test.perf.targets.Target03;
+
+/**
+ * The main test suite.
+ */
+public class PerformanceSuite implements IPerfScenario {
+
+ public void run(IPerfOutput output) throws Exception {
+ new ExecuteInstrumentedCodeScenario("plain method calls",
+ Target01.class).run(output);
+ new ExecuteInstrumentedCodeScenario("loop only", Target02.class)
+ .run(output);
+ new ExecuteInstrumentedCodeScenario("game of life", Target03.class)
+ .run(output);
+ new InstrumentationSizeSzenario(Target03.class).run(output);
+ new InstrumentationTimeScenario(Target03.class, 1000).run(output);
+ new AnalysisTimeScenario(Target03.class, 1000).run(output);
+ }
+
+ public static void main(String[] args) throws Exception {
+ final PrintWriter writer;
+ if (args.length == 0) {
+ writer = new PrintWriter(System.out, true);
+ } else {
+ writer = new PrintWriter(args[0]);
+ }
+ IPerfOutput output = new PerfOutputWriter(writer);
+ new PerformanceSuite().run(output);
+ writer.close();
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/TimedScenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/TimedScenario.java
index a68da4da..5db65a13 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/TimedScenario.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/TimedScenario.java
@@ -1,67 +1,67 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.perf;
-
-/**
- * Base class for execution time test scenarios.
- */
-public abstract class TimedScenario implements IPerfScenario {
-
- private static final int RUNS = 10;
-
- private final String description;
-
- protected TimedScenario(final String description) {
- this.description = description;
- }
-
- public void run(final IPerfOutput output) throws Exception {
- final long time = getMinimumTime(getInstrumentedRunnable());
- final Runnable refRunnable = getReferenceRunnable();
- final long reftime;
- if (refRunnable == null) {
- reftime = IPerfOutput.NO_REFERENCE;
- } else {
- reftime = getMinimumTime(refRunnable);
- }
- output.writeTimeResult(description, time, reftime);
- }
-
- /**
- * Runs the given subject several times and returns the minimum execution
- * time.
- *
- * @param subject
- * @return minimum execution time in nano seconds
- */
- private long getMinimumTime(final Runnable subject) {
- long min = Long.MAX_VALUE;
- for (int i = 0; i < RUNS; i++) {
- final long t = getTime(subject);
- min = Math.min(min, t);
- }
- return min;
- }
-
- private long getTime(final Runnable subject) {
- long start = System.nanoTime();
- subject.run();
- return System.nanoTime() - start;
- }
-
- protected abstract Runnable getInstrumentedRunnable() throws Exception;
-
- protected Runnable getReferenceRunnable() throws Exception {
- return null;
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.perf;
+
+/**
+ * Base class for execution time test scenarios.
+ */
+public abstract class TimedScenario implements IPerfScenario {
+
+ private static final int RUNS = 10;
+
+ private final String description;
+
+ protected TimedScenario(final String description) {
+ this.description = description;
+ }
+
+ public void run(final IPerfOutput output) throws Exception {
+ final long time = getMinimumTime(getInstrumentedRunnable());
+ final Runnable refRunnable = getReferenceRunnable();
+ final long reftime;
+ if (refRunnable == null) {
+ reftime = IPerfOutput.NO_REFERENCE;
+ } else {
+ reftime = getMinimumTime(refRunnable);
+ }
+ output.writeTimeResult(description, time, reftime);
+ }
+
+ /**
+ * Runs the given subject several times and returns the minimum execution
+ * time.
+ *
+ * @param subject
+ * @return minimum execution time in nano seconds
+ */
+ private long getMinimumTime(final Runnable subject) {
+ long min = Long.MAX_VALUE;
+ for (int i = 0; i < RUNS; i++) {
+ final long t = getTime(subject);
+ min = Math.min(min, t);
+ }
+ return min;
+ }
+
+ private long getTime(final Runnable subject) {
+ long start = System.nanoTime();
+ subject.run();
+ return System.nanoTime() - start;
+ }
+
+ protected abstract Runnable getInstrumentedRunnable() throws Exception;
+
+ protected Runnable getReferenceRunnable() throws Exception {
+ return null;
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target01.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target01.java
index 4879b6a0..632c149e 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target01.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target01.java
@@ -1,126 +1,126 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.perf.targets;
-
-/**
- * Plain method calls.
- */
-public class Target01 implements Runnable {
-
- @SuppressWarnings("unused")
- private int c;
-
- // 4 ^ 0 = 1 times
- public void run() {
- m1();
- m1();
- m1();
- m1();
- c++; // some side effect, otherwise the JIT will remove the method
- }
-
- // 4 ^ 1 = 4 times
- public void m1() {
- m2();
- m2();
- m2();
- m2();
- c++; // some side effect, otherwise the JIT will remove the method
- }
-
- // 4 ^ 2 == 16 times
- public void m2() {
- m3();
- m3();
- m3();
- m3();
- c++; // some side effect, otherwise the JIT will remove the method
- }
-
- // 4 ^ 3 == 64 times
- public void m3() {
- m4();
- m4();
- m4();
- m4();
- c++; // some side effect, otherwise the JIT will remove the method
- }
-
- // 4 ^ 4 == 256 times
- public void m4() {
- m5();
- m5();
- m5();
- m5();
- c++; // some side effect, otherwise the JIT will remove the method
- }
-
- // 4 ^ 5 == 1,024 times
- public void m5() {
- m6();
- m6();
- m6();
- m6();
- c++; // some side effect, otherwise the JIT will remove the method
- }
-
- // 4 ^ 6 == 4,096 times
- public void m6() {
- m7();
- m7();
- m7();
- m7();
- c++; // some side effect, otherwise the JIT will remove the method
- }
-
- // 4 ^ 7 == 16,384 times
- public void m7() {
- m8();
- m8();
- m8();
- m8();
- c++; // some side effect, otherwise the JIT will remove the method
- }
-
- // 4 ^ 8 == 65,536 times
- public void m8() {
- m9();
- m9();
- m9();
- m9();
- c++; // some side effect, otherwise the JIT will remove the method
- }
-
- // 4 ^ 9 == 262,144 times
- public void m9() {
- m10();
- m10();
- m10();
- m10();
- c++; // some side effect, otherwise the JIT will remove the method
- }
-
- // 4 ^ 10 == 1,048,576 times
- public void m10() {
- m11();
- m11();
- m11();
- m11();
- c++; // some side effect, otherwise the JIT will remove the method
- }
-
- // 4 ^ 11 == 4,194,304 times
- public void m11() {
- c++; // some side effect, otherwise the JIT will remove the method
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.perf.targets;
+
+/**
+ * Plain method calls.
+ */
+public class Target01 implements Runnable {
+
+ @SuppressWarnings("unused")
+ private int c;
+
+ // 4 ^ 0 = 1 times
+ public void run() {
+ m1();
+ m1();
+ m1();
+ m1();
+ c++; // some side effect, otherwise the JIT will remove the method
+ }
+
+ // 4 ^ 1 = 4 times
+ public void m1() {
+ m2();
+ m2();
+ m2();
+ m2();
+ c++; // some side effect, otherwise the JIT will remove the method
+ }
+
+ // 4 ^ 2 == 16 times
+ public void m2() {
+ m3();
+ m3();
+ m3();
+ m3();
+ c++; // some side effect, otherwise the JIT will remove the method
+ }
+
+ // 4 ^ 3 == 64 times
+ public void m3() {
+ m4();
+ m4();
+ m4();
+ m4();
+ c++; // some side effect, otherwise the JIT will remove the method
+ }
+
+ // 4 ^ 4 == 256 times
+ public void m4() {
+ m5();
+ m5();
+ m5();
+ m5();
+ c++; // some side effect, otherwise the JIT will remove the method
+ }
+
+ // 4 ^ 5 == 1,024 times
+ public void m5() {
+ m6();
+ m6();
+ m6();
+ m6();
+ c++; // some side effect, otherwise the JIT will remove the method
+ }
+
+ // 4 ^ 6 == 4,096 times
+ public void m6() {
+ m7();
+ m7();
+ m7();
+ m7();
+ c++; // some side effect, otherwise the JIT will remove the method
+ }
+
+ // 4 ^ 7 == 16,384 times
+ public void m7() {
+ m8();
+ m8();
+ m8();
+ m8();
+ c++; // some side effect, otherwise the JIT will remove the method
+ }
+
+ // 4 ^ 8 == 65,536 times
+ public void m8() {
+ m9();
+ m9();
+ m9();
+ m9();
+ c++; // some side effect, otherwise the JIT will remove the method
+ }
+
+ // 4 ^ 9 == 262,144 times
+ public void m9() {
+ m10();
+ m10();
+ m10();
+ m10();
+ c++; // some side effect, otherwise the JIT will remove the method
+ }
+
+ // 4 ^ 10 == 1,048,576 times
+ public void m10() {
+ m11();
+ m11();
+ m11();
+ m11();
+ c++; // some side effect, otherwise the JIT will remove the method
+ }
+
+ // 4 ^ 11 == 4,194,304 times
+ public void m11() {
+ c++; // some side effect, otherwise the JIT will remove the method
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target02.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target02.java
index 55ffbfe9..c23b50bc 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target02.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target02.java
@@ -1,27 +1,27 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.perf.targets;
-
-/**
- * Simple Loop.
- */
-public class Target02 implements Runnable {
-
- public void run() {
- @SuppressWarnings("unused")
- int count = 0;
- for (int i = 0; i < 10000000; i++) {
- count++;
- }
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.perf.targets;
+
+/**
+ * Simple Loop.
+ */
+public class Target02 implements Runnable {
+
+ public void run() {
+ @SuppressWarnings("unused")
+ int count = 0;
+ for (int i = 0; i < 10000000; i++) {
+ count++;
+ }
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target03.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target03.java
index 689d275e..124f48ab 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target03.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target03.java
@@ -1,153 +1,153 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.perf.targets;
-
-import java.util.Random;
-
-/**
- * "Game of Life" implementation as a more reference scenario. Obviously the
- * implementation could be more elegant using several classes, but the test
- * runner targets one class only. Also one could think about more efficient
- * implementations which again is not the focus here.
- */
-public class Target03 implements Runnable {
-
- private final int width;
-
- private final int height;
-
- private boolean[][] field;
-
- public Target03(int width, int height) {
- this.width = width;
- this.height = height;
- this.field = createField();
- }
-
- public Target03() {
- this(64, 64);
- }
-
- private boolean[][] createField() {
- boolean[][] f = new boolean[height][];
- for (int i = 0; i < height; i++) {
- f[i] = new boolean[width];
- }
- return f;
- }
-
- public void set(int x, int y, boolean flag) {
- field[wrap(x, width)][wrap(y, height)] = flag;
- }
-
- public boolean get(int x, int y) {
- return field[wrap(x, width)][wrap(y, height)];
- }
-
- public void clear() {
- field = createField();
- }
-
- public void randomFill(long seed, int count) {
- Random r = new Random(seed);
- for (int i = 0; i < count; i++) {
- set(r.nextInt(), r.nextInt(), true);
- }
-
- }
-
- public void tick() {
- boolean[][] next = createField();
- for (int y = 0; y < height; y++) {
- for (int x = 0; x < width; x++) {
- final int n = getNeighbors(x, y);
- if (get(x, y)) {
- next[x][y] = 2 <= n && n <= 3;
- } else {
- next[x][y] = n == 3;
- }
- }
- }
- field = next;
- }
-
- // Neighbor
- private int getNeighbors(int x, int y) {
- int count = 0;
- if (get(x - 1, y - 1)) {
- count++;
- }
- if (get(x + 0, y - 1)) {
- count++;
- }
- if (get(x + 1, y - 1)) {
- count++;
- }
- if (get(x + 1, y + 0)) {
- count++;
- }
- if (get(x + 1, y + 1)) {
- count++;
- }
- if (get(x + 0, y + 1)) {
- count++;
- }
- if (get(x - 1, y + 1)) {
- count++;
- }
- if (get(x - 1, y + 0)) {
- count++;
- }
- return count;
- }
-
- private int wrap(int value, int size) {
- int res = value % size;
- if (res < 0) {
- res += size;
- }
- return res;
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- for (int y = 0; y < height; y++) {
- for (int x = 0; x < width; x++) {
- sb.append(get(x, y) ? 'O' : '.');
- }
- sb.append('\n');
- }
- return sb.toString();
- }
-
- public void run() {
- clear();
- randomFill(123, width * height / 2);
- for (int i = 0; i < 20; i++) {
- tick();
- }
- }
-
- // Demo
- public static void main(String[] args) {
- Target03 t = new Target03(10, 10);
- t.randomFill(123, 20);
-
- for (int i = 0; i < 10; i++) {
- System.out.println("Generation " + i + ":");
- System.out.println(t);
- t.tick();
- }
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.perf.targets;
+
+import java.util.Random;
+
+/**
+ * "Game of Life" implementation as a more reference scenario. Obviously the
+ * implementation could be more elegant using several classes, but the test
+ * runner targets one class only. Also one could think about more efficient
+ * implementations which again is not the focus here.
+ */
+public class Target03 implements Runnable {
+
+ private final int width;
+
+ private final int height;
+
+ private boolean[][] field;
+
+ public Target03(int width, int height) {
+ this.width = width;
+ this.height = height;
+ this.field = createField();
+ }
+
+ public Target03() {
+ this(64, 64);
+ }
+
+ private boolean[][] createField() {
+ boolean[][] f = new boolean[height][];
+ for (int i = 0; i < height; i++) {
+ f[i] = new boolean[width];
+ }
+ return f;
+ }
+
+ public void set(int x, int y, boolean flag) {
+ field[wrap(x, width)][wrap(y, height)] = flag;
+ }
+
+ public boolean get(int x, int y) {
+ return field[wrap(x, width)][wrap(y, height)];
+ }
+
+ public void clear() {
+ field = createField();
+ }
+
+ public void randomFill(long seed, int count) {
+ Random r = new Random(seed);
+ for (int i = 0; i < count; i++) {
+ set(r.nextInt(), r.nextInt(), true);
+ }
+
+ }
+
+ public void tick() {
+ boolean[][] next = createField();
+ for (int y = 0; y < height; y++) {
+ for (int x = 0; x < width; x++) {
+ final int n = getNeighbors(x, y);
+ if (get(x, y)) {
+ next[x][y] = 2 <= n && n <= 3;
+ } else {
+ next[x][y] = n == 3;
+ }
+ }
+ }
+ field = next;
+ }
+
+ // Neighbor
+ private int getNeighbors(int x, int y) {
+ int count = 0;
+ if (get(x - 1, y - 1)) {
+ count++;
+ }
+ if (get(x + 0, y - 1)) {
+ count++;
+ }
+ if (get(x + 1, y - 1)) {
+ count++;
+ }
+ if (get(x + 1, y + 0)) {
+ count++;
+ }
+ if (get(x + 1, y + 1)) {
+ count++;
+ }
+ if (get(x + 0, y + 1)) {
+ count++;
+ }
+ if (get(x - 1, y + 1)) {
+ count++;
+ }
+ if (get(x - 1, y + 0)) {
+ count++;
+ }
+ return count;
+ }
+
+ private int wrap(int value, int size) {
+ int res = value % size;
+ if (res < 0) {
+ res += size;
+ }
+ return res;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ for (int y = 0; y < height; y++) {
+ for (int x = 0; x < width; x++) {
+ sb.append(get(x, y) ? 'O' : '.');
+ }
+ sb.append('\n');
+ }
+ return sb.toString();
+ }
+
+ public void run() {
+ clear();
+ randomFill(123, width * height / 2);
+ for (int i = 0; i < 20; i++) {
+ tick();
+ }
+ }
+
+ // Demo
+ public static void main(String[] args) {
+ Target03 t = new Target03(10, 10);
+ t.randomFill(123, 20);
+
+ for (int i = 0; i < 10; i++) {
+ System.out.println("Generation " + i + ":");
+ System.out.println(t);
+ t.tick();
+ }
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java
index eb1f836a..e59dcf50 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/BooleanExpressionsTest.java
@@ -1,85 +1,85 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.Target02;
-import org.junit.Test;
-
-/**
- * Tests of basic Java boolean expressions.
- */
-public class BooleanExpressionsTest extends ValidationTestBase {
-
- public BooleanExpressionsTest() {
- super(Target02.class);
- }
-
- @Override
- protected void run(final Class<?> targetClass) throws Exception {
- final Object instance = targetClass.newInstance();
- ((Runnable) instance).run();
- }
-
- @Test
- public void testCoverageResult() {
-
- // 1. Boolean comparison result (one case)
- assertLine("booleancmp1", ICounter.PARTLY_COVERED, 1, 1);
-
- // 2. Boolean comparison result (both cases)
- assertLine("booleancmp2", ICounter.FULLY_COVERED, 0, 2);
-
- // 3. And
- assertLine("andFF", ICounter.FULLY_COVERED, 1, 1);
- assertLine("andFT", ICounter.FULLY_COVERED, 1, 1);
- assertLine("andTF", ICounter.FULLY_COVERED, 1, 1);
- assertLine("andTT", ICounter.FULLY_COVERED, 1, 1);
-
- // 4. Conditional And
- assertLine("conditionalandFF", ICounter.PARTLY_COVERED, 3, 1);
- assertLine("conditionalandFT", ICounter.PARTLY_COVERED, 3, 1);
- assertLine("conditionalandTF", ICounter.FULLY_COVERED, 2, 2);
- assertLine("conditionalandTT", ICounter.FULLY_COVERED, 2, 2);
-
- // 5. Or
- assertLine("orFF", ICounter.FULLY_COVERED, 1, 1);
- assertLine("orFT", ICounter.FULLY_COVERED, 1, 1);
- assertLine("orTF", ICounter.FULLY_COVERED, 1, 1);
- assertLine("orTT", ICounter.FULLY_COVERED, 1, 1);
-
- // 6. Conditional Or
- assertLine("conditionalorFF", ICounter.FULLY_COVERED, 2, 2);
- assertLine("conditionalorFT", ICounter.FULLY_COVERED, 2, 2);
- assertLine("conditionalorTF", ICounter.PARTLY_COVERED, 3, 1);
- assertLine("conditionalorTT", ICounter.PARTLY_COVERED, 3, 1);
-
- // 7. Exclusive Or
- assertLine("xorFF", ICounter.FULLY_COVERED, 1, 1);
- assertLine("xorFT", ICounter.FULLY_COVERED, 1, 1);
- assertLine("xorTF", ICounter.FULLY_COVERED, 1, 1);
- assertLine("xorTT", ICounter.FULLY_COVERED, 1, 1);
-
- // 8. Conditional Operator
- assertLine("condT", ICounter.PARTLY_COVERED, 1, 1);
- assertLine("condF", ICounter.PARTLY_COVERED, 1, 1);
-
- // 9. Not (one case)
- assertLine("notT", ICounter.PARTLY_COVERED, 1, 1);
- assertLine("notF", ICounter.PARTLY_COVERED, 1, 1);
-
- // 10. Not (both cases)
- assertLine("notTF", ICounter.FULLY_COVERED, 0, 2);
-
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.Target02;
+import org.junit.Test;
+
+/**
+ * Tests of basic Java boolean expressions.
+ */
+public class BooleanExpressionsTest extends ValidationTestBase {
+
+ public BooleanExpressionsTest() {
+ super(Target02.class);
+ }
+
+ @Override
+ protected void run(final Class<?> targetClass) throws Exception {
+ final Object instance = targetClass.newInstance();
+ ((Runnable) instance).run();
+ }
+
+ @Test
+ public void testCoverageResult() {
+
+ // 1. Boolean comparison result (one case)
+ assertLine("booleancmp1", ICounter.PARTLY_COVERED, 1, 1);
+
+ // 2. Boolean comparison result (both cases)
+ assertLine("booleancmp2", ICounter.FULLY_COVERED, 0, 2);
+
+ // 3. And
+ assertLine("andFF", ICounter.FULLY_COVERED, 1, 1);
+ assertLine("andFT", ICounter.FULLY_COVERED, 1, 1);
+ assertLine("andTF", ICounter.FULLY_COVERED, 1, 1);
+ assertLine("andTT", ICounter.FULLY_COVERED, 1, 1);
+
+ // 4. Conditional And
+ assertLine("conditionalandFF", ICounter.PARTLY_COVERED, 3, 1);
+ assertLine("conditionalandFT", ICounter.PARTLY_COVERED, 3, 1);
+ assertLine("conditionalandTF", ICounter.FULLY_COVERED, 2, 2);
+ assertLine("conditionalandTT", ICounter.FULLY_COVERED, 2, 2);
+
+ // 5. Or
+ assertLine("orFF", ICounter.FULLY_COVERED, 1, 1);
+ assertLine("orFT", ICounter.FULLY_COVERED, 1, 1);
+ assertLine("orTF", ICounter.FULLY_COVERED, 1, 1);
+ assertLine("orTT", ICounter.FULLY_COVERED, 1, 1);
+
+ // 6. Conditional Or
+ assertLine("conditionalorFF", ICounter.FULLY_COVERED, 2, 2);
+ assertLine("conditionalorFT", ICounter.FULLY_COVERED, 2, 2);
+ assertLine("conditionalorTF", ICounter.PARTLY_COVERED, 3, 1);
+ assertLine("conditionalorTT", ICounter.PARTLY_COVERED, 3, 1);
+
+ // 7. Exclusive Or
+ assertLine("xorFF", ICounter.FULLY_COVERED, 1, 1);
+ assertLine("xorFT", ICounter.FULLY_COVERED, 1, 1);
+ assertLine("xorTF", ICounter.FULLY_COVERED, 1, 1);
+ assertLine("xorTT", ICounter.FULLY_COVERED, 1, 1);
+
+ // 8. Conditional Operator
+ assertLine("condT", ICounter.PARTLY_COVERED, 1, 1);
+ assertLine("condF", ICounter.PARTLY_COVERED, 1, 1);
+
+ // 9. Not (one case)
+ assertLine("notT", ICounter.PARTLY_COVERED, 1, 1);
+ assertLine("notF", ICounter.PARTLY_COVERED, 1, 1);
+
+ // 10. Not (both cases)
+ assertLine("notTF", ICounter.FULLY_COVERED, 0, 2);
+
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java
index 5d2a5ab8..a512f93f 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ControlStructuresTest.java
@@ -1,139 +1,139 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.Target01;
-import org.junit.Test;
-
-/**
- * Tests of basic Java control structures.
- */
-public class ControlStructuresTest extends ValidationTestBase {
-
- public ControlStructuresTest() {
- super(Target01.class);
- }
-
- @Override
- protected void run(final Class<?> targetClass) throws Exception {
- final Object instance = targetClass.newInstance();
- ((Runnable) instance).run();
- }
-
- @Test
- public void testCoverageResult() {
-
- // 1. Direct unconditional execution
- assertLine("unconditional", ICounter.FULLY_COVERED);
-
- // 2. Missed if block
- assertLine("iffalse", ICounter.FULLY_COVERED, 1, 1);
- assertLine("missedif", ICounter.NOT_COVERED);
- assertLine("executedelse", ICounter.FULLY_COVERED);
-
- // 3. Executed if block
- assertLine("iftrue", ICounter.FULLY_COVERED, 1, 1);
- assertLine("executedif", ICounter.FULLY_COVERED);
- assertLine("missedelse", ICounter.NOT_COVERED);
-
- // 4. Missed while block
- // ECJ and javac produce different status here
- assertLine("whilefalse", 1, 1);
- assertLine("missedwhile", ICounter.NOT_COVERED);
-
- // 5. Always true while block
- assertLine("whiletrue", ICounter.FULLY_COVERED, 1, 1);
-
- // 6. Executed while block
- assertLine("whiletruefalse", ICounter.FULLY_COVERED, 0, 2);
- assertLine("executedwhile", ICounter.FULLY_COVERED);
-
- // 7. Executed do while block
- assertLine("executeddowhile", ICounter.FULLY_COVERED);
-
- // 8. Missed for block
- assertLine("missedforincrementer", ICounter.PARTLY_COVERED, 1, 1);
- assertLine("missedfor", ICounter.NOT_COVERED);
-
- // 9. Executed for block
- assertLine("executedforincrementer", ICounter.FULLY_COVERED, 0, 2);
- assertLine("executedfor", ICounter.FULLY_COVERED);
-
- // 10. Missed for each block
- assertLine("missedforeachincrementer", ICounter.PARTLY_COVERED, 1, 1);
- assertLine("missedforeach", ICounter.NOT_COVERED);
-
- // 11. Executed for each block
- assertLine("executedforeachincrementer", ICounter.FULLY_COVERED, 0, 2);
- assertLine("executedforeach", ICounter.FULLY_COVERED);
-
- // 12. Table switch with hit
- assertLine("tswitch1", ICounter.FULLY_COVERED, 3, 1);
- assertLine("tswitch1case1", ICounter.NOT_COVERED);
- assertLine("tswitch1case2", ICounter.FULLY_COVERED);
- assertLine("tswitch1case3", ICounter.NOT_COVERED);
- assertLine("tswitch1default", ICounter.NOT_COVERED);
-
- // 13. Continued table switch with hit
- assertLine("tswitch2", ICounter.FULLY_COVERED, 3, 1);
- assertLine("tswitch2case1", ICounter.NOT_COVERED);
- assertLine("tswitch2case2", ICounter.FULLY_COVERED);
- assertLine("tswitch2case3", ICounter.FULLY_COVERED);
- assertLine("tswitch2default", ICounter.FULLY_COVERED);
-
- // 14. Table switch without hit
- assertLine("tswitch2", ICounter.FULLY_COVERED, 3, 1);
- assertLine("tswitch3case1", ICounter.NOT_COVERED);
- assertLine("tswitch3case2", ICounter.NOT_COVERED);
- assertLine("tswitch3case3", ICounter.NOT_COVERED);
- assertLine("tswitch3default", ICounter.FULLY_COVERED);
-
- // 15. Lookup switch with hit
- assertLine("lswitch1", ICounter.FULLY_COVERED, 3, 1);
- assertLine("lswitch1case1", ICounter.NOT_COVERED);
- assertLine("lswitch1case2", ICounter.FULLY_COVERED);
- assertLine("lswitch1case3", ICounter.NOT_COVERED);
- assertLine("lswitch1default", ICounter.NOT_COVERED);
-
- // 16. Continued lookup switch with hit
- assertLine("lswitch2", ICounter.FULLY_COVERED, 3, 1);
- assertLine("lswitch2case1", ICounter.NOT_COVERED);
- assertLine("lswitch2case2", ICounter.FULLY_COVERED);
- assertLine("lswitch2case3", ICounter.FULLY_COVERED);
- assertLine("lswitch2default", ICounter.FULLY_COVERED);
-
- // 17. Lookup switch without hit
- assertLine("lswitch3", ICounter.FULLY_COVERED, 3, 1);
- assertLine("lswitch3case1", ICounter.NOT_COVERED);
- assertLine("lswitch3case2", ICounter.NOT_COVERED);
- assertLine("lswitch3case3", ICounter.NOT_COVERED);
- assertLine("lswitch3default", ICounter.FULLY_COVERED);
-
- // 18. Break statement
- assertLine("executedbreak", ICounter.FULLY_COVERED);
- assertLine("missedafterbreak", ICounter.NOT_COVERED);
-
- // 19. Continue statement
- assertLine("executedcontinue", ICounter.FULLY_COVERED);
- assertLine("missedaftercontinue", ICounter.NOT_COVERED);
-
- // 20. Return statement
- assertLine("return", ICounter.FULLY_COVERED);
- assertLine("afterreturn", ICounter.NOT_COVERED);
-
- // 21. Implicit return
- assertLine("implicitreturn", ICounter.FULLY_COVERED);
-
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.Target01;
+import org.junit.Test;
+
+/**
+ * Tests of basic Java control structures.
+ */
+public class ControlStructuresTest extends ValidationTestBase {
+
+ public ControlStructuresTest() {
+ super(Target01.class);
+ }
+
+ @Override
+ protected void run(final Class<?> targetClass) throws Exception {
+ final Object instance = targetClass.newInstance();
+ ((Runnable) instance).run();
+ }
+
+ @Test
+ public void testCoverageResult() {
+
+ // 1. Direct unconditional execution
+ assertLine("unconditional", ICounter.FULLY_COVERED);
+
+ // 2. Missed if block
+ assertLine("iffalse", ICounter.FULLY_COVERED, 1, 1);
+ assertLine("missedif", ICounter.NOT_COVERED);
+ assertLine("executedelse", ICounter.FULLY_COVERED);
+
+ // 3. Executed if block
+ assertLine("iftrue", ICounter.FULLY_COVERED, 1, 1);
+ assertLine("executedif", ICounter.FULLY_COVERED);
+ assertLine("missedelse", ICounter.NOT_COVERED);
+
+ // 4. Missed while block
+ // ECJ and javac produce different status here
+ assertLine("whilefalse", 1, 1);
+ assertLine("missedwhile", ICounter.NOT_COVERED);
+
+ // 5. Always true while block
+ assertLine("whiletrue", ICounter.FULLY_COVERED, 1, 1);
+
+ // 6. Executed while block
+ assertLine("whiletruefalse", ICounter.FULLY_COVERED, 0, 2);
+ assertLine("executedwhile", ICounter.FULLY_COVERED);
+
+ // 7. Executed do while block
+ assertLine("executeddowhile", ICounter.FULLY_COVERED);
+
+ // 8. Missed for block
+ assertLine("missedforincrementer", ICounter.PARTLY_COVERED, 1, 1);
+ assertLine("missedfor", ICounter.NOT_COVERED);
+
+ // 9. Executed for block
+ assertLine("executedforincrementer", ICounter.FULLY_COVERED, 0, 2);
+ assertLine("executedfor", ICounter.FULLY_COVERED);
+
+ // 10. Missed for each block
+ assertLine("missedforeachincrementer", ICounter.PARTLY_COVERED, 1, 1);
+ assertLine("missedforeach", ICounter.NOT_COVERED);
+
+ // 11. Executed for each block
+ assertLine("executedforeachincrementer", ICounter.FULLY_COVERED, 0, 2);
+ assertLine("executedforeach", ICounter.FULLY_COVERED);
+
+ // 12. Table switch with hit
+ assertLine("tswitch1", ICounter.FULLY_COVERED, 3, 1);
+ assertLine("tswitch1case1", ICounter.NOT_COVERED);
+ assertLine("tswitch1case2", ICounter.FULLY_COVERED);
+ assertLine("tswitch1case3", ICounter.NOT_COVERED);
+ assertLine("tswitch1default", ICounter.NOT_COVERED);
+
+ // 13. Continued table switch with hit
+ assertLine("tswitch2", ICounter.FULLY_COVERED, 3, 1);
+ assertLine("tswitch2case1", ICounter.NOT_COVERED);
+ assertLine("tswitch2case2", ICounter.FULLY_COVERED);
+ assertLine("tswitch2case3", ICounter.FULLY_COVERED);
+ assertLine("tswitch2default", ICounter.FULLY_COVERED);
+
+ // 14. Table switch without hit
+ assertLine("tswitch2", ICounter.FULLY_COVERED, 3, 1);
+ assertLine("tswitch3case1", ICounter.NOT_COVERED);
+ assertLine("tswitch3case2", ICounter.NOT_COVERED);
+ assertLine("tswitch3case3", ICounter.NOT_COVERED);
+ assertLine("tswitch3default", ICounter.FULLY_COVERED);
+
+ // 15. Lookup switch with hit
+ assertLine("lswitch1", ICounter.FULLY_COVERED, 3, 1);
+ assertLine("lswitch1case1", ICounter.NOT_COVERED);
+ assertLine("lswitch1case2", ICounter.FULLY_COVERED);
+ assertLine("lswitch1case3", ICounter.NOT_COVERED);
+ assertLine("lswitch1default", ICounter.NOT_COVERED);
+
+ // 16. Continued lookup switch with hit
+ assertLine("lswitch2", ICounter.FULLY_COVERED, 3, 1);
+ assertLine("lswitch2case1", ICounter.NOT_COVERED);
+ assertLine("lswitch2case2", ICounter.FULLY_COVERED);
+ assertLine("lswitch2case3", ICounter.FULLY_COVERED);
+ assertLine("lswitch2default", ICounter.FULLY_COVERED);
+
+ // 17. Lookup switch without hit
+ assertLine("lswitch3", ICounter.FULLY_COVERED, 3, 1);
+ assertLine("lswitch3case1", ICounter.NOT_COVERED);
+ assertLine("lswitch3case2", ICounter.NOT_COVERED);
+ assertLine("lswitch3case3", ICounter.NOT_COVERED);
+ assertLine("lswitch3default", ICounter.FULLY_COVERED);
+
+ // 18. Break statement
+ assertLine("executedbreak", ICounter.FULLY_COVERED);
+ assertLine("missedafterbreak", ICounter.NOT_COVERED);
+
+ // 19. Continue statement
+ assertLine("executedcontinue", ICounter.FULLY_COVERED);
+ assertLine("missedaftercontinue", ICounter.NOT_COVERED);
+
+ // 20. Return statement
+ assertLine("return", ICounter.FULLY_COVERED);
+ assertLine("afterreturn", ICounter.NOT_COVERED);
+
+ // 21. Implicit return
+ assertLine("implicitreturn", ICounter.FULLY_COVERED);
+
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java
index 1a8a04f0..885ee1a9 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ExceptionsTest.java
@@ -1,98 +1,98 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.Target03;
-import org.junit.Test;
-
-/**
- * Tests of exception based control flow.
- */
-public class ExceptionsTest extends ValidationTestBase {
-
- public ExceptionsTest() {
- super(Target03.class);
- }
-
- @Override
- protected void run(final Class<?> targetClass) throws Exception {
- final Object instance = targetClass.newInstance();
- ((Runnable) instance).run();
- }
-
- @Test
- public void testCoverageResult() {
-
- // 1. Implicit Exception
- // Currently no coverage at all, as we don't see when a block aborts
- // somewhere in the middle.
- assertLine("implicitException.before", ICounter.NOT_COVERED);
- assertLine("implicitException.exception", ICounter.NOT_COVERED);
- assertLine("implicitException.after", ICounter.NOT_COVERED);
-
- // 2. Explicit Exception
- // Full coverage, as we recognize throw statements as block boundaries.
- assertLine("explicitException.before", ICounter.FULLY_COVERED);
- assertLine("explicitException.throw", ICounter.FULLY_COVERED);
-
- // 3. Try/Catch Block Without Exception Thrown
- assertLine("noExceptionTryCatch.beforeBlock", ICounter.FULLY_COVERED);
- assertLine("noExceptionTryCatch.tryBlock", ICounter.FULLY_COVERED);
- assertLine("noExceptionTryCatch.catchBlock", ICounter.NOT_COVERED);
-
- // 4. Try/Catch Block Without a Implicit Exception Thrown
- // As always with implicit exceptions we don't see when a block aborts
- // somewhere in the middle.
- assertLine("implicitExceptionTryCatch.beforeBlock",
- ICounter.FULLY_COVERED);
- assertLine("implicitExceptionTryCatch.before", ICounter.NOT_COVERED);
- assertLine("implicitExceptionTryCatch.exception", ICounter.NOT_COVERED);
- assertLine("implicitExceptionTryCatch.after", ICounter.NOT_COVERED);
- assertLine("implicitExceptionTryCatch.catchBlock",
- ICounter.FULLY_COVERED);
-
- // 5. Try/Catch Block With Exception Thrown Explicitly
- assertLine("explicitExceptionTryCatch.beforeBlock",
- ICounter.FULLY_COVERED);
- assertLine("explicitExceptionTryCatch.before", ICounter.FULLY_COVERED);
- assertLine("explicitExceptionTryCatch.throw", ICounter.FULLY_COVERED);
- assertLine("explicitExceptionTryCatch.catchBlock",
- ICounter.FULLY_COVERED);
-
- // 6. Finally Block Without Exception Thrown
- // Finally block is yellow as the exception path is missing.
- assertLine("noExceptionFinally.beforeBlock", ICounter.FULLY_COVERED);
- assertLine("noExceptionFinally.tryBlock", ICounter.FULLY_COVERED);
- assertLine("noExceptionFinally.finallyBlock", ICounter.PARTLY_COVERED);
-
- // 7. Finally Block With Implicit Exception
- // Finally block is yellow as the non-exception path is missing.
- assertLine("implicitExceptionFinally.beforeBlock",
- ICounter.FULLY_COVERED);
- assertLine("implicitExceptionFinally.before", ICounter.NOT_COVERED);
- assertLine("implicitExceptionFinally.exception", ICounter.NOT_COVERED);
- assertLine("implicitExceptionFinally.after", ICounter.NOT_COVERED);
- assertLine("implicitExceptionFinally.finallyBlock",
- ICounter.PARTLY_COVERED);
-
- // 8. Finally Block With Exception Thrown Explicitly
- assertLine("explicitExceptionFinally.beforeBlock",
- ICounter.FULLY_COVERED);
- assertLine("explicitExceptionFinally.before", ICounter.FULLY_COVERED);
- assertLine("explicitExceptionFinally.throw", ICounter.FULLY_COVERED);
- assertLine("explicitExceptionFinally.finallyBlock",
- ICounter.FULLY_COVERED);
-
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.Target03;
+import org.junit.Test;
+
+/**
+ * Tests of exception based control flow.
+ */
+public class ExceptionsTest extends ValidationTestBase {
+
+ public ExceptionsTest() {
+ super(Target03.class);
+ }
+
+ @Override
+ protected void run(final Class<?> targetClass) throws Exception {
+ final Object instance = targetClass.newInstance();
+ ((Runnable) instance).run();
+ }
+
+ @Test
+ public void testCoverageResult() {
+
+ // 1. Implicit Exception
+ // Currently no coverage at all, as we don't see when a block aborts
+ // somewhere in the middle.
+ assertLine("implicitException.before", ICounter.NOT_COVERED);
+ assertLine("implicitException.exception", ICounter.NOT_COVERED);
+ assertLine("implicitException.after", ICounter.NOT_COVERED);
+
+ // 2. Explicit Exception
+ // Full coverage, as we recognize throw statements as block boundaries.
+ assertLine("explicitException.before", ICounter.FULLY_COVERED);
+ assertLine("explicitException.throw", ICounter.FULLY_COVERED);
+
+ // 3. Try/Catch Block Without Exception Thrown
+ assertLine("noExceptionTryCatch.beforeBlock", ICounter.FULLY_COVERED);
+ assertLine("noExceptionTryCatch.tryBlock", ICounter.FULLY_COVERED);
+ assertLine("noExceptionTryCatch.catchBlock", ICounter.NOT_COVERED);
+
+ // 4. Try/Catch Block Without a Implicit Exception Thrown
+ // As always with implicit exceptions we don't see when a block aborts
+ // somewhere in the middle.
+ assertLine("implicitExceptionTryCatch.beforeBlock",
+ ICounter.FULLY_COVERED);
+ assertLine("implicitExceptionTryCatch.before", ICounter.NOT_COVERED);
+ assertLine("implicitExceptionTryCatch.exception", ICounter.NOT_COVERED);
+ assertLine("implicitExceptionTryCatch.after", ICounter.NOT_COVERED);
+ assertLine("implicitExceptionTryCatch.catchBlock",
+ ICounter.FULLY_COVERED);
+
+ // 5. Try/Catch Block With Exception Thrown Explicitly
+ assertLine("explicitExceptionTryCatch.beforeBlock",
+ ICounter.FULLY_COVERED);
+ assertLine("explicitExceptionTryCatch.before", ICounter.FULLY_COVERED);
+ assertLine("explicitExceptionTryCatch.throw", ICounter.FULLY_COVERED);
+ assertLine("explicitExceptionTryCatch.catchBlock",
+ ICounter.FULLY_COVERED);
+
+ // 6. Finally Block Without Exception Thrown
+ // Finally block is yellow as the exception path is missing.
+ assertLine("noExceptionFinally.beforeBlock", ICounter.FULLY_COVERED);
+ assertLine("noExceptionFinally.tryBlock", ICounter.FULLY_COVERED);
+ assertLine("noExceptionFinally.finallyBlock", ICounter.PARTLY_COVERED);
+
+ // 7. Finally Block With Implicit Exception
+ // Finally block is yellow as the non-exception path is missing.
+ assertLine("implicitExceptionFinally.beforeBlock",
+ ICounter.FULLY_COVERED);
+ assertLine("implicitExceptionFinally.before", ICounter.NOT_COVERED);
+ assertLine("implicitExceptionFinally.exception", ICounter.NOT_COVERED);
+ assertLine("implicitExceptionFinally.after", ICounter.NOT_COVERED);
+ assertLine("implicitExceptionFinally.finallyBlock",
+ ICounter.PARTLY_COVERED);
+
+ // 8. Finally Block With Exception Thrown Explicitly
+ assertLine("explicitExceptionFinally.beforeBlock",
+ ICounter.FULLY_COVERED);
+ assertLine("explicitExceptionFinally.before", ICounter.FULLY_COVERED);
+ assertLine("explicitExceptionFinally.throw", ICounter.FULLY_COVERED);
+ assertLine("explicitExceptionFinally.finallyBlock",
+ ICounter.FULLY_COVERED);
+
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/Source.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/Source.java
index 156fb78d..ec7a5c38 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/Source.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/Source.java
@@ -1,116 +1,116 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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 java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Reads a single source file and allows access to it through special probe
- * comments in the following format <code>//$line-<i>tag</i>$.
- */
-public class Source {
-
- /**
- * Reads the source for the given type from the <code>./src/</code> folder
- * relative to the working directory.
- *
- * @param type
- * type to load the source file for
- * @throws IOException
- * @throws
- */
- public static Source getSourceFor(final Class<?> type) throws IOException {
- String file = "src/" + type.getName().replace('.', '/') + ".java";
- return new Source(new FileReader(file));
- }
-
- private static final Pattern TAG_PATTERN = Pattern
- .compile("\\$line-(.*)\\$");
-
- private final List<String> lines = new ArrayList<String>();
-
- private final Map<String, Integer> tags = new HashMap<String, Integer>();
-
- /**
- * Reads a source file from the given reader.
- *
- * @param reader
- * @throws IOException
- */
- public Source(final Reader reader) throws IOException {
- final BufferedReader buffer = new BufferedReader(reader);
- for (String l = buffer.readLine(); l != null; l = buffer.readLine()) {
- addLine(l);
- }
- buffer.close();
- }
-
- private void addLine(final String l) {
- lines.add(l);
- final Matcher m = TAG_PATTERN.matcher(l);
- if (m.find()) {
- final String tag = m.group(1);
- if (tags.put(tag, Integer.valueOf(lines.size())) != null) {
- throw new IllegalArgumentException("Duplicate tag: " + tag);
- }
- }
- }
-
- /**
- * Returns all lines of the source file as a list.
- *
- * @return all lines of the source file
- */
- public List<String> getLines() {
- return Collections.unmodifiableList(lines);
- }
-
- /**
- * Returns the line with the given number
- *
- * @param nr
- * line number (first line is 1)
- * @return line content
- */
- public String getLine(int nr) {
- return lines.get(nr - 1);
- }
-
- /**
- * Returns the line number with the given tag
- *
- * @param tag
- * tag from a <code>//$line-<i>tag</i>$ marker
- * @return line number (first line is 1)
- * @throws NoSuchElementException
- * if there is no such tag
- */
- public int getLineNumber(String tag) throws NoSuchElementException {
- final Integer nr = tags.get(tag);
- if (nr == null) {
- throw new NoSuchElementException("Unknown tag: " + tag);
- }
- return nr.intValue();
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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 java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Reads a single source file and allows access to it through special probe
+ * comments in the following format <code>//$line-<i>tag</i>$.
+ */
+public class Source {
+
+ /**
+ * Reads the source for the given type from the <code>./src/</code> folder
+ * relative to the working directory.
+ *
+ * @param type
+ * type to load the source file for
+ * @throws IOException
+ * @throws
+ */
+ public static Source getSourceFor(final Class<?> type) throws IOException {
+ String file = "src/" + type.getName().replace('.', '/') + ".java";
+ return new Source(new FileReader(file));
+ }
+
+ private static final Pattern TAG_PATTERN = Pattern
+ .compile("\\$line-(.*)\\$");
+
+ private final List<String> lines = new ArrayList<String>();
+
+ private final Map<String, Integer> tags = new HashMap<String, Integer>();
+
+ /**
+ * Reads a source file from the given reader.
+ *
+ * @param reader
+ * @throws IOException
+ */
+ public Source(final Reader reader) throws IOException {
+ final BufferedReader buffer = new BufferedReader(reader);
+ for (String l = buffer.readLine(); l != null; l = buffer.readLine()) {
+ addLine(l);
+ }
+ buffer.close();
+ }
+
+ private void addLine(final String l) {
+ lines.add(l);
+ final Matcher m = TAG_PATTERN.matcher(l);
+ if (m.find()) {
+ final String tag = m.group(1);
+ if (tags.put(tag, Integer.valueOf(lines.size())) != null) {
+ throw new IllegalArgumentException("Duplicate tag: " + tag);
+ }
+ }
+ }
+
+ /**
+ * Returns all lines of the source file as a list.
+ *
+ * @return all lines of the source file
+ */
+ public List<String> getLines() {
+ return Collections.unmodifiableList(lines);
+ }
+
+ /**
+ * Returns the line with the given number
+ *
+ * @param nr
+ * line number (first line is 1)
+ * @return line content
+ */
+ public String getLine(int nr) {
+ return lines.get(nr - 1);
+ }
+
+ /**
+ * Returns the line number with the given tag
+ *
+ * @param tag
+ * tag from a <code>//$line-<i>tag</i>$ marker
+ * @return line number (first line is 1)
+ * @throws NoSuchElementException
+ * if there is no such tag
+ */
+ public int getLineNumber(String tag) throws NoSuchElementException {
+ final Integer nr = tags.get(tag);
+ if (nr == null) {
+ throw new NoSuchElementException("Unknown tag: " + tag);
+ }
+ return nr.intValue();
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/SourceTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/SourceTest.java
index 9a5e2392..1e7f1e02 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/SourceTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/SourceTest.java
@@ -1,87 +1,87 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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.junit.Assert.assertTrue;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.Arrays;
-import java.util.NoSuchElementException;
-
-import org.junit.Test;
-
-/**
- * Unit tests for {@link Source}.
- */
-public class SourceTest {
-
- @Test
- public void testGetLines1() throws IOException {
- String src = "\na\nbb\n";
- final Source s = new Source(new StringReader(src));
- assertEquals(Arrays.asList("", "a", "bb"), s.getLines());
- }
-
- @Test
- public void testGetLines2() throws IOException {
- String src = "aa\nbb\n;";
- final Source s = new Source(new StringReader(src));
- assertEquals(Arrays.asList("aa", "bb", ";"), s.getLines());
- }
-
- @Test
- public void testGetLines3() throws IOException {
- String src = "xx\r\nyy";
- final Source s = new Source(new StringReader(src));
- assertEquals(Arrays.asList("xx", "yy"), s.getLines());
- }
-
- @Test
- public void testGetLine() throws IOException {
- String src = "Hello\n\nWorld!";
- final Source s = new Source(new StringReader(src));
- assertEquals("Hello", s.getLine(1));
- assertEquals("", s.getLine(2));
- assertEquals("World!", s.getLine(3));
- }
-
- @Test
- public void testGetLineNumber() throws IOException {
- String src = "a\nb$line-tag$\nc\nd\ne$line-tagx$\nf";
- final Source s = new Source(new StringReader(src));
- assertEquals(2, s.getLineNumber("tag"), 0.0);
- }
-
- @Test(expected = NoSuchElementException.class)
- public void testGetLineNumberNegative() throws IOException {
- String src = "a\nb$line-tag$\nc\nd\ne\nf";
- final Source s = new Source(new StringReader(src));
- s.getLineNumber("ag");
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testDuplicateTag() throws IOException {
- String src = "a\nb$line-tag$\nc\nd\ne$line-tag$\nf";
- new Source(new StringReader(src));
- }
-
- @Test
- public void testGetSourceFor() throws IOException {
- final Source s = Source.getSourceFor(SourceTest.class);
- // Here we are. $line-testGetSourceFor$
- final String l = s.getLine(s.getLineNumber("testGetSourceFor"));
- assertTrue(l, l.contains("Here we are."));
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Arrays;
+import java.util.NoSuchElementException;
+
+import org.junit.Test;
+
+/**
+ * Unit tests for {@link Source}.
+ */
+public class SourceTest {
+
+ @Test
+ public void testGetLines1() throws IOException {
+ String src = "\na\nbb\n";
+ final Source s = new Source(new StringReader(src));
+ assertEquals(Arrays.asList("", "a", "bb"), s.getLines());
+ }
+
+ @Test
+ public void testGetLines2() throws IOException {
+ String src = "aa\nbb\n;";
+ final Source s = new Source(new StringReader(src));
+ assertEquals(Arrays.asList("aa", "bb", ";"), s.getLines());
+ }
+
+ @Test
+ public void testGetLines3() throws IOException {
+ String src = "xx\r\nyy";
+ final Source s = new Source(new StringReader(src));
+ assertEquals(Arrays.asList("xx", "yy"), s.getLines());
+ }
+
+ @Test
+ public void testGetLine() throws IOException {
+ String src = "Hello\n\nWorld!";
+ final Source s = new Source(new StringReader(src));
+ assertEquals("Hello", s.getLine(1));
+ assertEquals("", s.getLine(2));
+ assertEquals("World!", s.getLine(3));
+ }
+
+ @Test
+ public void testGetLineNumber() throws IOException {
+ String src = "a\nb$line-tag$\nc\nd\ne$line-tagx$\nf";
+ final Source s = new Source(new StringReader(src));
+ assertEquals(2, s.getLineNumber("tag"), 0.0);
+ }
+
+ @Test(expected = NoSuchElementException.class)
+ public void testGetLineNumberNegative() throws IOException {
+ String src = "a\nb$line-tag$\nc\nd\ne\nf";
+ final Source s = new Source(new StringReader(src));
+ s.getLineNumber("ag");
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testDuplicateTag() throws IOException {
+ String src = "a\nb$line-tag$\nc\nd\ne$line-tag$\nf";
+ new Source(new StringReader(src));
+ }
+
+ @Test
+ public void testGetSourceFor() throws IOException {
+ final Source s = Source.getSourceFor(SourceTest.class);
+ // Here we are. $line-testGetSourceFor$
+ final String l = s.getLine(s.getLineNumber("testGetSourceFor"));
+ assertTrue(l, l.contains("Here we are."));
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java
index ab07913b..0485ac51 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java
@@ -1,123 +1,123 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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 java.util.Collection;
-
-import org.jacoco.core.analysis.Analyzer;
-import org.jacoco.core.analysis.CoverageBuilder;
-import org.jacoco.core.analysis.IClassCoverage;
-import org.jacoco.core.analysis.ICounter;
-import org.jacoco.core.analysis.ILine;
-import org.jacoco.core.analysis.ISourceFileCoverage;
-import org.jacoco.core.data.ExecutionDataStore;
-import org.jacoco.core.instr.Instrumenter;
-import org.jacoco.core.internal.analysis.CounterImpl;
-import org.jacoco.core.runtime.IRuntime;
-import org.jacoco.core.runtime.SystemPropertiesRuntime;
-import org.jacoco.core.test.TargetLoader;
-import org.junit.Before;
-import org.objectweb.asm.ClassReader;
-
-/**
- * Base class for validation tests. It executes the given class under code
- * coverage and provides the coverage results for validation.
- */
-public abstract class ValidationTestBase {
-
- private static final String[] STATUS_NAME = new String[4];
-
- {
- STATUS_NAME[ICounter.EMPTY] = "NO_CODE";
- STATUS_NAME[ICounter.NOT_COVERED] = "NOT_COVERED";
- STATUS_NAME[ICounter.FULLY_COVERED] = "FULLY_COVERED";
- STATUS_NAME[ICounter.PARTLY_COVERED] = "PARTLY_COVERED";
- }
-
- protected final Class<?> target;
-
- protected IClassCoverage classCoverage;
-
- protected ISourceFileCoverage sourceCoverage;
-
- protected Source source;
-
- protected ValidationTestBase(final Class<?> target) {
- this.target = target;
- }
-
- @Before
- public void setup() throws Exception {
- final ClassReader reader = new ClassReader(
- TargetLoader.getClassData(target));
- final ExecutionDataStore store = execute(reader);
- analyze(reader, store);
- source = Source.getSourceFor(target);
- }
-
- private ExecutionDataStore execute(final ClassReader reader)
- throws Exception {
- IRuntime runtime = new SystemPropertiesRuntime();
- runtime.startup();
- final byte[] bytes = new Instrumenter(runtime).instrument(reader);
- final TargetLoader loader = new TargetLoader(target, bytes);
- run(loader.getTargetClass());
- final ExecutionDataStore store = new ExecutionDataStore();
- runtime.collect(store, null, false);
- runtime.shutdown();
- return store;
- }
-
- protected abstract void run(final Class<?> targetClass) throws Exception;
-
- private void analyze(final ClassReader reader,
- final ExecutionDataStore store) {
- final CoverageBuilder builder = new CoverageBuilder();
- final Analyzer analyzer = new Analyzer(store, builder);
- analyzer.analyzeClass(reader);
- final Collection<IClassCoverage> classes = builder.getClasses();
- assertEquals(1, classes.size(), 0.0);
- classCoverage = classes.iterator().next();
- final Collection<ISourceFileCoverage> files = builder.getSourceFiles();
- assertEquals(1, files.size(), 0.0);
- sourceCoverage = files.iterator().next();
- }
-
- protected void assertLine(final String tag, final int status) {
- final int nr = source.getLineNumber(tag);
- final ILine line = sourceCoverage.getLine(nr);
- final String msg = String.format("Status in line %s: %s",
- Integer.valueOf(nr), source.getLine(nr));
- final int insnStatus = line.getInstructionCounter().getStatus();
- assertEquals(msg, STATUS_NAME[status], STATUS_NAME[insnStatus]);
- }
-
- protected void assertLine(final String tag, final int missedBranches,
- final int coveredBranches) {
- final int nr = source.getLineNumber(tag);
- final ILine line = sourceCoverage.getLine(nr);
- final String msg = String.format("Branches in line %s: %s",
- Integer.valueOf(nr), source.getLine(nr));
- assertEquals(msg + " branches",
- CounterImpl.getInstance(missedBranches, coveredBranches),
- line.getBranchCounter());
- }
-
- protected void assertLine(final String tag, final int status,
- final int missedBranches, final int coveredBranches) {
- assertLine(tag, status);
- assertLine(tag, missedBranches, coveredBranches);
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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 java.util.Collection;
+
+import org.jacoco.core.analysis.Analyzer;
+import org.jacoco.core.analysis.CoverageBuilder;
+import org.jacoco.core.analysis.IClassCoverage;
+import org.jacoco.core.analysis.ICounter;
+import org.jacoco.core.analysis.ILine;
+import org.jacoco.core.analysis.ISourceFileCoverage;
+import org.jacoco.core.data.ExecutionDataStore;
+import org.jacoco.core.instr.Instrumenter;
+import org.jacoco.core.internal.analysis.CounterImpl;
+import org.jacoco.core.runtime.IRuntime;
+import org.jacoco.core.runtime.SystemPropertiesRuntime;
+import org.jacoco.core.test.TargetLoader;
+import org.junit.Before;
+import org.objectweb.asm.ClassReader;
+
+/**
+ * Base class for validation tests. It executes the given class under code
+ * coverage and provides the coverage results for validation.
+ */
+public abstract class ValidationTestBase {
+
+ private static final String[] STATUS_NAME = new String[4];
+
+ {
+ STATUS_NAME[ICounter.EMPTY] = "NO_CODE";
+ STATUS_NAME[ICounter.NOT_COVERED] = "NOT_COVERED";
+ STATUS_NAME[ICounter.FULLY_COVERED] = "FULLY_COVERED";
+ STATUS_NAME[ICounter.PARTLY_COVERED] = "PARTLY_COVERED";
+ }
+
+ protected final Class<?> target;
+
+ protected IClassCoverage classCoverage;
+
+ protected ISourceFileCoverage sourceCoverage;
+
+ protected Source source;
+
+ protected ValidationTestBase(final Class<?> target) {
+ this.target = target;
+ }
+
+ @Before
+ public void setup() throws Exception {
+ final ClassReader reader = new ClassReader(
+ TargetLoader.getClassData(target));
+ final ExecutionDataStore store = execute(reader);
+ analyze(reader, store);
+ source = Source.getSourceFor(target);
+ }
+
+ private ExecutionDataStore execute(final ClassReader reader)
+ throws Exception {
+ IRuntime runtime = new SystemPropertiesRuntime();
+ runtime.startup();
+ final byte[] bytes = new Instrumenter(runtime).instrument(reader);
+ final TargetLoader loader = new TargetLoader(target, bytes);
+ run(loader.getTargetClass());
+ final ExecutionDataStore store = new ExecutionDataStore();
+ runtime.collect(store, null, false);
+ runtime.shutdown();
+ return store;
+ }
+
+ protected abstract void run(final Class<?> targetClass) throws Exception;
+
+ private void analyze(final ClassReader reader,
+ final ExecutionDataStore store) {
+ final CoverageBuilder builder = new CoverageBuilder();
+ final Analyzer analyzer = new Analyzer(store, builder);
+ analyzer.analyzeClass(reader);
+ final Collection<IClassCoverage> classes = builder.getClasses();
+ assertEquals(1, classes.size(), 0.0);
+ classCoverage = classes.iterator().next();
+ final Collection<ISourceFileCoverage> files = builder.getSourceFiles();
+ assertEquals(1, files.size(), 0.0);
+ sourceCoverage = files.iterator().next();
+ }
+
+ protected void assertLine(final String tag, final int status) {
+ final int nr = source.getLineNumber(tag);
+ final ILine line = sourceCoverage.getLine(nr);
+ final String msg = String.format("Status in line %s: %s",
+ Integer.valueOf(nr), source.getLine(nr));
+ final int insnStatus = line.getInstructionCounter().getStatus();
+ assertEquals(msg, STATUS_NAME[status], STATUS_NAME[insnStatus]);
+ }
+
+ protected void assertLine(final String tag, final int missedBranches,
+ final int coveredBranches) {
+ final int nr = source.getLineNumber(tag);
+ final ILine line = sourceCoverage.getLine(nr);
+ final String msg = String.format("Branches in line %s: %s",
+ Integer.valueOf(nr), source.getLine(nr));
+ assertEquals(msg + " branches",
+ CounterImpl.getInstance(missedBranches, coveredBranches),
+ line.getBranchCounter());
+ }
+
+ protected void assertLine(final String tag, final int status,
+ final int missedBranches, final int coveredBranches) {
+ assertLine(tag, status);
+ assertLine(tag, missedBranches, coveredBranches);
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Stubs.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Stubs.java
index 110664b5..15889173 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Stubs.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Stubs.java
@@ -1,107 +1,107 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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;
-
-/**
- * Collection of stub methods that are called from the coverage targets. *
- */
-public class Stubs {
-
- /**
- * Exception stub.
- */
- public static class StubException extends RuntimeException {
-
- static final long serialVersionUID = 0L;
-
- }
-
- /**
- * Superclass stub.
- */
- public static class SuperClass {
-
- public SuperClass(boolean arg) {
- }
-
- }
-
- /**
- * Dummy method.
- */
- public static void nop() {
- }
-
- /**
- * Dummy method.
- */
- public static void nop(int i) {
- }
-
- /**
- * Dummy method.
- */
- public static void nop(boolean b) {
- }
-
- /**
- * Dummy method.
- */
- public static void nop(Object o) {
- }
-
- /**
- * @return always <code>true</code>
- */
- public static boolean t() {
- return true;
- }
-
- /**
- * @return always <code>false</code>
- */
- public static boolean f() {
- return false;
- }
-
- /**
- * @return always <code>1</code>
- */
- public static int i1() {
- return 1;
- }
-
- /**
- * @return always <code>3</code>
- */
- public static int i2() {
- return 2;
- }
-
- /**
- * @return always <code>3</code>
- */
- public static int i3() {
- return 3;
- }
-
- /**
- * Always throws a {@link RuntimeException}.
- *
- * @throws StubException
- * always thrown
- */
- public static void ex() throws StubException {
- throw new StubException();
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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;
+
+/**
+ * Collection of stub methods that are called from the coverage targets. *
+ */
+public class Stubs {
+
+ /**
+ * Exception stub.
+ */
+ public static class StubException extends RuntimeException {
+
+ static final long serialVersionUID = 0L;
+
+ }
+
+ /**
+ * Superclass stub.
+ */
+ public static class SuperClass {
+
+ public SuperClass(boolean arg) {
+ }
+
+ }
+
+ /**
+ * Dummy method.
+ */
+ public static void nop() {
+ }
+
+ /**
+ * Dummy method.
+ */
+ public static void nop(int i) {
+ }
+
+ /**
+ * Dummy method.
+ */
+ public static void nop(boolean b) {
+ }
+
+ /**
+ * Dummy method.
+ */
+ public static void nop(Object o) {
+ }
+
+ /**
+ * @return always <code>true</code>
+ */
+ public static boolean t() {
+ return true;
+ }
+
+ /**
+ * @return always <code>false</code>
+ */
+ public static boolean f() {
+ return false;
+ }
+
+ /**
+ * @return always <code>1</code>
+ */
+ public static int i1() {
+ return 1;
+ }
+
+ /**
+ * @return always <code>3</code>
+ */
+ public static int i2() {
+ return 2;
+ }
+
+ /**
+ * @return always <code>3</code>
+ */
+ public static int i3() {
+ return 3;
+ }
+
+ /**
+ * Always throws a {@link RuntimeException}.
+ *
+ * @throws StubException
+ * always thrown
+ */
+ public static void ex() throws StubException {
+ throw new StubException();
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target01.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target01.java
index f26b4805..4ad3e493 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target01.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target01.java
@@ -1,216 +1,216 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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;
-
-import static org.jacoco.core.test.validation.targets.Stubs.f;
-import static org.jacoco.core.test.validation.targets.Stubs.i2;
-import static org.jacoco.core.test.validation.targets.Stubs.nop;
-import static org.jacoco.core.test.validation.targets.Stubs.t;
-
-import java.util.Collections;
-
-/**
- * This target exercises a set of common Java control structures.
- */
-public class Target01 implements Runnable {
-
- public void run() {
-
- // 1. Unconditional execution
- nop(); // $line-unconditional$
-
- // 2. Missed if block
- if (f()) { // $line-iffalse$
- nop(); // $line-missedif$
- } else {
- nop(); // $line-executedelse$
- }
-
- // 3. Executed if block
- if (t()) { // $line-iftrue$
- nop(); // $line-executedif$
- } else {
- nop(); // $line-missedelse$
- }
-
- // 4. Missed while block
- while (f()) { // $line-whilefalse$
- nop(); // $line-missedwhile$
- }
-
- // 5. Always executed while block
- while (t()) { // $line-whiletrue$
- if (t()) {
- break;
- }
- }
-
- // 6. Executed while block
- int i = 0;
- while (i++ < 3) { // $line-whiletruefalse$
- nop(); // $line-executedwhile$
- }
-
- // 7. Executed do while block
- do {
- nop(); // $line-executeddowhile$
- } while (f());
-
- // 8. Missed for block
- for (nop(); f(); nop()) { // $line-missedforincrementer$
- nop(); // $line-missedfor$
- }
-
- // 9. Executed for block
- for (int j = 0; j < 1; j++) { // $line-executedforincrementer$
- nop(); // $line-executedfor$
- }
-
- // 10. Missed for each block
- for (Object o : Collections.emptyList()) { // $line-missedforeachincrementer$
- nop(o); // $line-missedforeach$
- }
-
- // 11. Executed for each block
- for (Object o : Collections.singleton(new Object())) { // $line-executedforeachincrementer$
- nop(o); // $line-executedforeach$
- }
-
- // 12. Table switch with hit
- switch (i2()) { // $line-tswitch1$
- case 1:
- nop(); // $line-tswitch1case1$
- break;
- case 2:
- nop(); // $line-tswitch1case2$
- break;
- case 3:
- nop(); // $line-tswitch1case3$
- break;
- default:
- nop(); // $line-tswitch1default$
- break;
- }
-
- // 13. Continued table switch with hit
- switch (i2()) { // $line-tswitch2$
- case 1:
- nop(); // $line-tswitch2case1$
- case 2:
- nop(); // $line-tswitch2case2$
- case 3:
- nop(); // $line-tswitch2case3$
- default:
- nop(); // $line-tswitch2default$
- }
-
- // 14. Table switch without hit
- switch (i2()) { // $line-tswitch3$
- case 3:
- nop(); // $line-tswitch3case1$
- break;
- case 4:
- nop(); // $line-tswitch3case2$
- break;
- case 5:
- nop(); // $line-tswitch3case3$
- break;
- default:
- nop(); // $line-tswitch3default$
- break;
- }
-
- // 15. Lookup switch with hit
- switch (i2()) { // $line-lswitch1$
- case -123:
- nop(); // $line-lswitch1case1$
- break;
- case 2:
- nop(); // $line-lswitch1case2$
- break;
- case 456:
- nop(); // $line-lswitch1case3$
- break;
- default:
- nop(); // $line-lswitch1default$
- break;
- }
-
- // 16. Continued lookup switch with hit
- switch (i2()) { // $line-lswitch2$
- case -123:
- nop(); // $line-lswitch2case1$
- case 2:
- nop(); // $line-lswitch2case2$
- case 456:
- nop(); // $line-lswitch2case3$
- default:
- nop(); // $line-lswitch2default$
- }
-
- // 17. Lookup switch without hit
- switch (i2()) { // $line-lswitch3$
- case -123:
- nop(); // $line-lswitch3case1$
- break;
- case 456:
- nop(); // $line-lswitch3case2$
- break;
- case 789:
- nop(); // $line-lswitch3case3$
- break;
- default:
- nop(); // $line-lswitch3default$
- break;
- }
-
- // 18. Break statement
- while (true) {
- if (t()) {
- break; // $line-executedbreak$
- }
- nop(); // $line-missedafterbreak$
- }
-
- // 19. Continue statement
- for (int j = 0; j < 1; j++) {
- if (t()) {
- continue; // $line-executedcontinue$
- }
- nop(); // $line-missedaftercontinue$
- }
-
- runReturn();
- runImplicitReturn();
-
- }
-
- private void runReturn() {
-
- // 20. Return statement
- if (t()) {
- return; // $line-return$
- }
- nop(); // $line-afterreturn$
-
- }
-
- private void runImplicitReturn() {
-
- // 21. Implicit return
- } // $line-implicitreturn$
-
- public static void main(String[] args) {
- new Target01().run();
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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;
+
+import static org.jacoco.core.test.validation.targets.Stubs.f;
+import static org.jacoco.core.test.validation.targets.Stubs.i2;
+import static org.jacoco.core.test.validation.targets.Stubs.nop;
+import static org.jacoco.core.test.validation.targets.Stubs.t;
+
+import java.util.Collections;
+
+/**
+ * This target exercises a set of common Java control structures.
+ */
+public class Target01 implements Runnable {
+
+ public void run() {
+
+ // 1. Unconditional execution
+ nop(); // $line-unconditional$
+
+ // 2. Missed if block
+ if (f()) { // $line-iffalse$
+ nop(); // $line-missedif$
+ } else {
+ nop(); // $line-executedelse$
+ }
+
+ // 3. Executed if block
+ if (t()) { // $line-iftrue$
+ nop(); // $line-executedif$
+ } else {
+ nop(); // $line-missedelse$
+ }
+
+ // 4. Missed while block
+ while (f()) { // $line-whilefalse$
+ nop(); // $line-missedwhile$
+ }
+
+ // 5. Always executed while block
+ while (t()) { // $line-whiletrue$
+ if (t()) {
+ break;
+ }
+ }
+
+ // 6. Executed while block
+ int i = 0;
+ while (i++ < 3) { // $line-whiletruefalse$
+ nop(); // $line-executedwhile$
+ }
+
+ // 7. Executed do while block
+ do {
+ nop(); // $line-executeddowhile$
+ } while (f());
+
+ // 8. Missed for block
+ for (nop(); f(); nop()) { // $line-missedforincrementer$
+ nop(); // $line-missedfor$
+ }
+
+ // 9. Executed for block
+ for (int j = 0; j < 1; j++) { // $line-executedforincrementer$
+ nop(); // $line-executedfor$
+ }
+
+ // 10. Missed for each block
+ for (Object o : Collections.emptyList()) { // $line-missedforeachincrementer$
+ nop(o); // $line-missedforeach$
+ }
+
+ // 11. Executed for each block
+ for (Object o : Collections.singleton(new Object())) { // $line-executedforeachincrementer$
+ nop(o); // $line-executedforeach$
+ }
+
+ // 12. Table switch with hit
+ switch (i2()) { // $line-tswitch1$
+ case 1:
+ nop(); // $line-tswitch1case1$
+ break;
+ case 2:
+ nop(); // $line-tswitch1case2$
+ break;
+ case 3:
+ nop(); // $line-tswitch1case3$
+ break;
+ default:
+ nop(); // $line-tswitch1default$
+ break;
+ }
+
+ // 13. Continued table switch with hit
+ switch (i2()) { // $line-tswitch2$
+ case 1:
+ nop(); // $line-tswitch2case1$
+ case 2:
+ nop(); // $line-tswitch2case2$
+ case 3:
+ nop(); // $line-tswitch2case3$
+ default:
+ nop(); // $line-tswitch2default$
+ }
+
+ // 14. Table switch without hit
+ switch (i2()) { // $line-tswitch3$
+ case 3:
+ nop(); // $line-tswitch3case1$
+ break;
+ case 4:
+ nop(); // $line-tswitch3case2$
+ break;
+ case 5:
+ nop(); // $line-tswitch3case3$
+ break;
+ default:
+ nop(); // $line-tswitch3default$
+ break;
+ }
+
+ // 15. Lookup switch with hit
+ switch (i2()) { // $line-lswitch1$
+ case -123:
+ nop(); // $line-lswitch1case1$
+ break;
+ case 2:
+ nop(); // $line-lswitch1case2$
+ break;
+ case 456:
+ nop(); // $line-lswitch1case3$
+ break;
+ default:
+ nop(); // $line-lswitch1default$
+ break;
+ }
+
+ // 16. Continued lookup switch with hit
+ switch (i2()) { // $line-lswitch2$
+ case -123:
+ nop(); // $line-lswitch2case1$
+ case 2:
+ nop(); // $line-lswitch2case2$
+ case 456:
+ nop(); // $line-lswitch2case3$
+ default:
+ nop(); // $line-lswitch2default$
+ }
+
+ // 17. Lookup switch without hit
+ switch (i2()) { // $line-lswitch3$
+ case -123:
+ nop(); // $line-lswitch3case1$
+ break;
+ case 456:
+ nop(); // $line-lswitch3case2$
+ break;
+ case 789:
+ nop(); // $line-lswitch3case3$
+ break;
+ default:
+ nop(); // $line-lswitch3default$
+ break;
+ }
+
+ // 18. Break statement
+ while (true) {
+ if (t()) {
+ break; // $line-executedbreak$
+ }
+ nop(); // $line-missedafterbreak$
+ }
+
+ // 19. Continue statement
+ for (int j = 0; j < 1; j++) {
+ if (t()) {
+ continue; // $line-executedcontinue$
+ }
+ nop(); // $line-missedaftercontinue$
+ }
+
+ runReturn();
+ runImplicitReturn();
+
+ }
+
+ private void runReturn() {
+
+ // 20. Return statement
+ if (t()) {
+ return; // $line-return$
+ }
+ nop(); // $line-afterreturn$
+
+ }
+
+ private void runImplicitReturn() {
+
+ // 21. Implicit return
+ } // $line-implicitreturn$
+
+ public static void main(String[] args) {
+ new Target01().run();
+ }
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target02.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target02.java
index fb626b37..1725f4a5 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target02.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Target02.java
@@ -1,124 +1,124 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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;
-
-import static org.jacoco.core.test.validation.targets.Stubs.f;
-import static org.jacoco.core.test.validation.targets.Stubs.i1;
-import static org.jacoco.core.test.validation.targets.Stubs.i2;
-import static org.jacoco.core.test.validation.targets.Stubs.nop;
-import static org.jacoco.core.test.validation.targets.Stubs.t;
-
-/**
- * This target exercises boolean expressions.
- */
-public class Target02 implements Runnable {
-
- public void run() {
-
- // 1. Boolean comparison result (one case)
- nop(i2() > 3); // $line-booleancmp1$
-
- // 2. Boolean comparison result (both cases)
- for (int i = 0; i < 2; i++) {
- nop(i < 1); // $line-booleancmp2$
- }
-
- // 3. And
- if (f() & f()) { // $line-andFF$
- nop();
- }
- if (f() & t()) { // $line-andFT$
- nop();
- }
- if (t() & f()) { // $line-andTF$
- nop();
- }
- if (t() & t()) { // $line-andTT$
- nop();
- }
-
- // 4. Conditional And
- if (f() && f()) { // $line-conditionalandFF$
- nop();
- }
- if (f() && t()) { // $line-conditionalandFT$
- nop();
- }
- if (t() && f()) { // $line-conditionalandTF$
- nop();
- }
- if (t() && t()) { // $line-conditionalandTT$
- nop();
- }
-
- // 5. Or
- if (f() | f()) { // $line-orFF$
- nop();
- }
- if (f() | t()) { // $line-orFT$
- nop();
- }
- if (t() | f()) { // $line-orTF$
- nop();
- }
- if (t() | t()) { // $line-orTT$
- nop();
- }
-
- // 6. Conditional Or
- if (f() || f()) { // $line-conditionalorFF$
- nop();
- }
- if (f() || t()) { // $line-conditionalorFT$
- nop();
- }
- if (t() || f()) { // $line-conditionalorTF$
- nop();
- }
- if (t() || t()) { // $line-conditionalorTT$
- nop();
- }
-
- // 7. Exclusive Or
- if (f() ^ f()) { // $line-xorFF$
- nop();
- }
- if (f() ^ t()) { // $line-xorFT$
- nop();
- }
- if (t() ^ f()) { // $line-xorTF$
- nop();
- }
- if (t() ^ t()) { // $line-xorTT$
- nop();
- }
-
- // 8. Conditional Operator
- nop(t() ? i1() : i2()); // $line-condT$
- nop(f() ? i1() : i2()); // $line-condF$
-
- // 9. Not (one case)
- nop(!t()); // $line-notT$
- nop(!f()); // $line-notF$
-
- // 10. Not (both cases)
- for (boolean b : new boolean[] { true, false }) {
- nop(!b); // $line-notTF$
- }
-
- }
-
- public static void main(String[] args) {
- new Target02().run();
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2012 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;
+
+import static org.jacoco.core.test.validation.targets.Stubs.f;
+import static org.jacoco.core.test.validation.targets.Stubs.i1;
+import static org.jacoco.core.test.validation.targets.Stubs.i2;
+import static org.jacoco.core.test.validation.targets.Stubs.nop;
+import static org.jacoco.core.test.validation.targets.Stubs.t;
+
+/**
+ * This target exercises boolean expressions.
+ */
+public class Target02 implements Runnable {
+
+ public void run() {
+
+ // 1. Boolean comparison result (one case)
+ nop(i2() > 3); // $line-booleancmp1$
+
+ // 2. Boolean comparison result (both cases)
+ for (int i = 0; i < 2; i++) {
+ nop(i < 1); // $line-booleancmp2$
+ }
+
+ // 3. And
+ if (f() & f()) { // $line-andFF$
+ nop();
+ }
+ if (f() & t()) { // $line-andFT$
+ nop();
+ }
+ if (t() & f()) { // $line-andTF$
+ nop();
+ }
+ if (t() & t()) { // $line-andTT$
+ nop();
+ }
+
+ // 4. Conditional And
+ if (f() && f()) { // $line-conditionalandFF$
+ nop();
+ }
+ if (f() && t()) { // $line-conditionalandFT$
+ nop();
+ }
+ if (t() && f()) { // $line-conditionalandTF$
+ nop();
+ }
+ if (t() && t()) { // $line-conditionalandTT$
+ nop();
+ }
+
+ // 5. Or
+ if (f() | f()) { // $line-orFF$
+ nop();
+ }
+ if (f() | t()) { // $line-orFT$
+ nop();
+ }
+ if (t() | f()) { // $line-orTF$
+ nop();
+ }
+ if (t() | t()) { // $line-orTT$
+ nop();
+ }
+
+ // 6. Conditional Or
+ if (f() || f()) { // $line-conditionalorFF$
+ nop();
+ }
+ if (f() || t()) { // $line-conditionalorFT$
+ nop();
+ }
+ if (t() || f()) { // $line-conditionalorTF$
+ nop();
+ }
+ if (t() || t()) { // $line-conditionalorTT$
+ nop();
+ }
+
+ // 7. Exclusive Or
+ if (f() ^ f()) { // $line-xorFF$
+ nop();
+ }
+ if (f() ^ t()) { // $line-xorFT$
+ nop();
+ }
+ if (t() ^ f()) { // $line-xorTF$
+ nop();
+ }
+ if (t() ^ t()) { // $line-xorTT$
+ nop();
+ }
+
+ // 8. Conditional Operator
+ nop(t() ? i1() : i2()); // $line-condT$
+ nop(f() ? i1() : i2()); // $line-condF$
+
+ // 9. Not (one case)
+ nop(!t()); // $line-notT$
+ nop(!f()); // $line-notF$
+
+ // 10. Not (both cases)
+ for (boolean b : new boolean[] { true, false }) {
+ nop(!b); // $line-notTF$
+ }
+
+ }
+
+ public static void main(String[] args) {
+ new Target02().run();
+ }
+
+}