aboutsummaryrefslogtreecommitdiffstats
path: root/org.jacoco.report.test
diff options
context:
space:
mode:
Diffstat (limited to 'org.jacoco.report.test')
-rw-r--r--org.jacoco.report.test/pom.xml4
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/DirectorySourceFileLocatorTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/FileMultiReportOutputTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/InputStreamSourceFileLocatorTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/JavaNamesTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/MemoryMultiReportOutput.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/MemoryOutput.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/MultiReportVisitorTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/MultiSourceFileLocatorTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java36
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/ZipMultiReportOutputTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/check/BundleCheckerTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/check/LimitTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/check/RuleTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/check/RulesCheckerTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java8
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/csv/CSVGroupHandlerTest.java4
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/csv/ClassRowWriterTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/csv/DelimitedWriterTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/html/HTMLFormatterTest.java22
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/NormalizedFileNamesTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/ReportOutputFolderTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLDocumentTest.java85
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLElementTest.java209
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLSupport.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/LinkableStub.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/page/BundlePageTest.java111
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ClassPageTest.java110
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/page/MethodItemTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/page/NodePageTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackagePageTest.java62
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackageSourcePageTest.java36
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PageTestBase.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ReportPageTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SessionsPageTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceFilePageTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceHighlighterTest.java54
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/ResourcesTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/StylesTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java56
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java42
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java33
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java38
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/table/SortIndexTest.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java56
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/xml/LocalEntityResolver.java2
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLDocumentTest.java93
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLElementTest.java131
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLGroupVisitorTest.java33
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLSupport.java14
-rw-r--r--org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java52
51 files changed, 781 insertions, 566 deletions
diff --git a/org.jacoco.report.test/pom.xml b/org.jacoco.report.test/pom.xml
index 753267d6..64c0cfa0 100644
--- a/org.jacoco.report.test/pom.xml
+++ b/org.jacoco.report.test/pom.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ Copyright (c) 2009, 2019 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
@@ -15,7 +15,7 @@
<parent>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.tests</artifactId>
- <version>0.8.0</version>
+ <version>0.8.4</version>
<relativePath>../org.jacoco.tests</relativePath>
</parent>
diff --git a/org.jacoco.report.test/src/org/jacoco/report/DirectorySourceFileLocatorTest.java b/org.jacoco.report.test/src/org/jacoco/report/DirectorySourceFileLocatorTest.java
index 9d53c799..a93e5c3a 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/DirectorySourceFileLocatorTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/DirectorySourceFileLocatorTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/FileMultiReportOutputTest.java b/org.jacoco.report.test/src/org/jacoco/report/FileMultiReportOutputTest.java
index 2c465dc9..c78df555 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/FileMultiReportOutputTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/FileMultiReportOutputTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/InputStreamSourceFileLocatorTest.java b/org.jacoco.report.test/src/org/jacoco/report/InputStreamSourceFileLocatorTest.java
index 6529e295..2225d6d7 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/InputStreamSourceFileLocatorTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/InputStreamSourceFileLocatorTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/JavaNamesTest.java b/org.jacoco.report.test/src/org/jacoco/report/JavaNamesTest.java
index e1a93daa..8c9e4a2b 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/JavaNamesTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/JavaNamesTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/MemoryMultiReportOutput.java b/org.jacoco.report.test/src/org/jacoco/report/MemoryMultiReportOutput.java
index bbb9eea2..e687db17 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/MemoryMultiReportOutput.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/MemoryMultiReportOutput.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/MemoryOutput.java b/org.jacoco.report.test/src/org/jacoco/report/MemoryOutput.java
index e6345233..d099babf 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/MemoryOutput.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/MemoryOutput.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/MultiReportVisitorTest.java b/org.jacoco.report.test/src/org/jacoco/report/MultiReportVisitorTest.java
index e9978aad..9f532282 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/MultiReportVisitorTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/MultiReportVisitorTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/MultiSourceFileLocatorTest.java b/org.jacoco.report.test/src/org/jacoco/report/MultiSourceFileLocatorTest.java
index ca0011e9..f91e1a44 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/MultiSourceFileLocatorTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/MultiSourceFileLocatorTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java b/org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java
index 1b9c80b1..d2aace0a 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -13,6 +13,8 @@ package org.jacoco.report;
import java.io.IOException;
import java.io.Reader;
+import java.io.StringReader;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -45,7 +47,7 @@ public class ReportStructureTestDriver {
public Reader getSourceFile(String packageName, String fileName)
throws IOException {
- return null;
+ return new StringReader("");
}
public int getTabWidth() {
@@ -69,7 +71,7 @@ public class ReportStructureTestDriver {
m.increment(CounterImpl.getInstance(3, 5), CounterImpl.COUNTER_0_0, 1);
m.increment(CounterImpl.getInstance(3, 5),
CounterImpl.getInstance(1, 2), 2);
- m.increment(CounterImpl.getInstance(4, 5), CounterImpl.COUNTER_0_0, 3);
+ m.increment(CounterImpl.getInstance(4, 5), CounterImpl.COUNTER_0_0, 4);
m.incrementMethodCounter();
methodCoverage = m;
@@ -84,11 +86,30 @@ public class ReportStructureTestDriver {
sourceFileCoverageImpl.increment(classCoverage);
sourceFileCoverage = sourceFileCoverageImpl;
+ final ClassCoverageImpl emptyClassInNonEmptyPackage = new ClassCoverageImpl(
+ "org/jacoco/example/Empty", 0, false);
+ emptyClassInNonEmptyPackage.setSourceFileName("Empty.java");
+ final SourceFileCoverageImpl emptySourceInNonEmptyPackage = new SourceFileCoverageImpl(
+ "Empty.java", "org/jacoco/example");
+
+ final ClassCoverageImpl emptyClassInEmptyPackage = new ClassCoverageImpl(
+ "empty/Empty", 0, false);
+ emptyClassInEmptyPackage.setSourceFileName("Empty.java");
+ final SourceFileCoverageImpl emptySourceInEmptyPackage = new SourceFileCoverageImpl(
+ "Empty.java", "empty");
+ final PackageCoverageImpl emptyPackage = new PackageCoverageImpl(
+ "empty",
+ Collections.<IClassCoverage> singletonList(
+ emptyClassInEmptyPackage),
+ Collections.<ISourceFileCoverage> singletonList(
+ emptySourceInEmptyPackage));
+
packageCoverage = new PackageCoverageImpl("org/jacoco/example",
- Collections.singleton(classCoverage),
- Collections.singleton(sourceFileCoverage));
+ Arrays.asList(classCoverage, emptyClassInNonEmptyPackage),
+ Arrays.asList(sourceFileCoverage,
+ emptySourceInNonEmptyPackage));
bundleCoverage = new BundleCoverageImpl("bundle",
- Collections.singleton(packageCoverage));
+ Arrays.asList(packageCoverage, emptyPackage));
}
public void sendNestedGroups(IReportVisitor reportVisitor)
@@ -119,7 +140,8 @@ public class ReportStructureTestDriver {
reportVisitor.visitEnd();
}
- public void sendBundle(IReportGroupVisitor groupVisitor) throws IOException {
+ public void sendBundle(IReportGroupVisitor groupVisitor)
+ throws IOException {
groupVisitor.visitBundle(bundleCoverage, sourceFileLocator);
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/ZipMultiReportOutputTest.java b/org.jacoco.report.test/src/org/jacoco/report/ZipMultiReportOutputTest.java
index 4ab6ac88..388ddce4 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/ZipMultiReportOutputTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/ZipMultiReportOutputTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/check/BundleCheckerTest.java b/org.jacoco.report.test/src/org/jacoco/report/check/BundleCheckerTest.java
index 9c0bfa5a..0761f743 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/check/BundleCheckerTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/check/BundleCheckerTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/check/LimitTest.java b/org.jacoco.report.test/src/org/jacoco/report/check/LimitTest.java
index 6ce632c4..07ecdc23 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/check/LimitTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/check/LimitTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/check/RuleTest.java b/org.jacoco.report.test/src/org/jacoco/report/check/RuleTest.java
index db3eaa75..076bfdef 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/check/RuleTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/check/RuleTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/check/RulesCheckerTest.java b/org.jacoco.report.test/src/org/jacoco/report/check/RulesCheckerTest.java
index 7b243b32..de4cd8ad 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/check/RulesCheckerTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/check/RulesCheckerTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java b/org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java
index ac0e61d9..8b16200d 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -64,6 +64,7 @@ public class CSVFormatterTest {
assertEquals(
"group/bundle,org.jacoco.example,FooClass,10,15,1,2,0,3,1,2,0,1",
lines.get(1));
+ assertEquals(2, lines.size());
}
@Test
@@ -77,6 +78,7 @@ public class CSVFormatterTest {
assertEquals(
"report/bundle,org.jacoco.example,FooClass,10,15,1,2,0,3,1,2,0,1",
lines.get(2));
+ assertEquals(3, lines.size());
}
@Test
@@ -84,9 +86,9 @@ public class CSVFormatterTest {
driver.sendBundle(visitor);
final List<String> lines = getLines();
assertEquals(HEADER, lines.get(0));
- assertEquals(
- "bundle,org.jacoco.example,FooClass,10,15,1,2,0,3,1,2,0,1",
+ assertEquals("bundle,org.jacoco.example,FooClass,10,15,1,2,0,3,1,2,0,1",
lines.get(1));
+ assertEquals(2, lines.size());
}
@Test
diff --git a/org.jacoco.report.test/src/org/jacoco/report/csv/CSVGroupHandlerTest.java b/org.jacoco.report.test/src/org/jacoco/report/csv/CSVGroupHandlerTest.java
index 03174067..4e7a1476 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/csv/CSVGroupHandlerTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/csv/CSVGroupHandlerTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -51,6 +51,7 @@ public class CSVGroupHandlerTest {
assertEquals(
"bundle,org.jacoco.example,FooClass,10,15,1,2,0,3,1,2,0,1",
reader.readLine());
+ assertEquals("no more lines expected", null, reader.readLine());
}
@Test
@@ -61,6 +62,7 @@ public class CSVGroupHandlerTest {
assertEquals(
"group/bundle,org.jacoco.example,FooClass,10,15,1,2,0,3,1,2,0,1",
reader.readLine());
+ assertEquals("no more lines expected", null, reader.readLine());
}
private BufferedReader getResultReader() {
diff --git a/org.jacoco.report.test/src/org/jacoco/report/csv/ClassRowWriterTest.java b/org.jacoco.report.test/src/org/jacoco/report/csv/ClassRowWriterTest.java
index 4e2c63d0..e231be45 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/csv/ClassRowWriterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/csv/ClassRowWriterTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/csv/DelimitedWriterTest.java b/org.jacoco.report.test/src/org/jacoco/report/csv/DelimitedWriterTest.java
index 69b10e04..a45f5067 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/csv/DelimitedWriterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/csv/DelimitedWriterTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/html/HTMLFormatterTest.java b/org.jacoco.report.test/src/org/jacoco/report/html/HTMLFormatterTest.java
index b1c03ff2..a26c9095 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/html/HTMLFormatterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/html/HTMLFormatterTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -65,16 +65,36 @@ public class HTMLFormatterTest {
driver.sendGroup(formatter.createVisitor(output));
output.assertFile("index.html");
output.assertFile("bundle/index.html");
+
output.assertFile("bundle/org.jacoco.example/index.html");
+ output.assertFile("bundle/org.jacoco.example/index.source.html");
output.assertFile("bundle/org.jacoco.example/FooClass.html");
+ output.assertFile("bundle/org.jacoco.example/FooClass.java.html");
+ output.assertNoFile("bundle/org.jacoco.example/Empty.html");
+ output.assertNoFile("bundle/org.jacoco.example/Empty.java.html");
+
+ output.assertNoFile("bundle/empty/index.html");
+ output.assertNoFile("bundle/empty/index.source.html");
+ output.assertNoFile("bundle/empty/Empty.html");
+ output.assertNoFile("bundle/empty/Empty.java.html");
}
@Test
public void testStructureWithBundleOnly() throws IOException {
driver.sendBundle(formatter.createVisitor(output));
output.assertFile("index.html");
+
output.assertFile("org.jacoco.example/index.html");
+ output.assertFile("org.jacoco.example/index.source.html");
output.assertFile("org.jacoco.example/FooClass.html");
+ output.assertFile("org.jacoco.example/FooClass.java.html");
+ output.assertNoFile("org.jacoco.example/Empty.html");
+ output.assertNoFile("org.jacoco.example/Empty.java.html");
+
+ output.assertNoFile("empty/index.html");
+ output.assertNoFile("empty/index.source.html");
+ output.assertNoFile("empty/Empty.html");
+ output.assertNoFile("empty/Empty.java.html");
}
@Test
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/NormalizedFileNamesTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/NormalizedFileNamesTest.java
index 0dfb6801..c0396d8e 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/NormalizedFileNamesTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/NormalizedFileNamesTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/ReportOutputFolderTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/ReportOutputFolderTest.java
index 7ff9641c..905fe646 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/ReportOutputFolderTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/ReportOutputFolderTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLDocumentTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLDocumentTest.java
deleted file mode 100644
index 436fe9a9..00000000
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLDocumentTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Marc R. Hoffmann - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.report.internal.html;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.StringWriter;
-
-import org.junit.Test;
-
-/**
- * Unit tests for {@link HTMLDocument}.
- */
-public class HTMLDocumentTest {
-
- @Test
- public void testWriter() throws IOException {
- StringWriter buffer = new StringWriter();
- new HTMLDocument(buffer, "UTF-8").close();
- assertEquals(
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- + "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
- + "<html xmlns=\"http://www.w3.org/1999/xhtml\"/>",
- buffer.toString());
- }
-
- @Test
- public void testStream() throws IOException {
- ByteArrayOutputStream buffer = new ByteArrayOutputStream();
- new HTMLDocument(buffer, "UTF-8").close();
- assertEquals(
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- + "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
- + "<html xmlns=\"http://www.w3.org/1999/xhtml\"/>",
- buffer.toString("UTF-8"));
- }
-
- @Test
- public void testHead() throws IOException {
- StringWriter buffer = new StringWriter();
- final HTMLDocument doc = new HTMLDocument(buffer, "UTF-8");
- doc.head();
- doc.close();
- assertEquals(
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- + "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
- + "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head/></html>",
- buffer.toString());
- }
-
- @Test
- public void testBody() throws IOException {
- StringWriter buffer = new StringWriter();
- final HTMLDocument doc = new HTMLDocument(buffer, "UTF-8");
- doc.body();
- doc.close();
- assertEquals(
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- + "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
- + "<html xmlns=\"http://www.w3.org/1999/xhtml\"><body/></html>",
- buffer.toString());
- }
-
- @Test
- public void testMinimalHTMLDocument() throws Exception {
- StringWriter buffer = new StringWriter();
- final HTMLDocument doc = new HTMLDocument(buffer, "UTF-8");
- doc.head().title();
- doc.body();
- doc.close();
- new HTMLSupport().parse(buffer.toString());
- }
-
-}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLElementTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLElementTest.java
index 2eff51a1..89a04ec9 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLElementTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLElementTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -13,8 +13,8 @@ package org.jacoco.report.internal.html;
import static org.junit.Assert.assertEquals;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.StringWriter;
import org.junit.Before;
import org.junit.Test;
@@ -24,218 +24,215 @@ import org.junit.Test;
*/
public class HTMLElementTest {
- private StringWriter buffer;
+ private static final String PREFIX = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\">";
+
+ private static final String SUFFIX = "</html>";
+
+ private ByteArrayOutputStream buffer;
private HTMLElement root;
@Before
- public void setUp() throws IOException {
- buffer = new StringWriter();
- root = new HTMLElement(buffer, "root") {
- {
- beginOpenTag();
- }
- };
+ public void setup() throws IOException {
+ buffer = new ByteArrayOutputStream();
+ root = new HTMLElement(buffer, "UTF-8");
}
@Test
- public void testMeta() throws IOException {
- root.meta("key", "value");
+ public void should_create_minimal_valid_html_document() throws Exception {
+ root.head().title();
+ root.body();
root.close();
- assertEquals(
- "<root><meta http-equiv=\"key\" content=\"value\"/></root>",
- buffer.toString());
+ new HTMLSupport().parse(buffer);
+ }
+
+ @Test
+ public void head_should_create_head_tag() throws IOException {
+ root.head();
+ assertContent("<head/>");
+ }
+
+ @Test
+ public void meta_should_create_meta_tag_with_attributes()
+ throws IOException {
+ root.meta("key", "value");
+ assertContent("<meta http-equiv=\"key\" content=\"value\"/>");
}
@Test
- public void testLink() throws IOException {
+ public void body_should_create_body_tag() throws IOException {
+ root.body();
+ assertContent("<body/>");
+ }
+
+ @Test
+ public void link_should_create_link_tag_with_attributes()
+ throws IOException {
root.link("stylesheet", "style.css", "text/css");
- root.close();
- assertEquals(
- "<root><link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\"/></root>",
- buffer.toString());
+ assertContent(
+ "<link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\"/>");
}
@Test
- public void testTitle() throws IOException {
+ public void title_should_create_title_tag() throws IOException {
root.title();
- root.close();
- assertEquals("<root><title/></root>", buffer.toString());
+ assertContent("<title/>");
}
@Test
- public void testH1() throws IOException {
+ public void h1_should_create_h1_tag() throws IOException {
root.h1();
- root.close();
- assertEquals("<root><h1/></root>", buffer.toString());
+ assertContent("<h1/>");
}
@Test
- public void testP() throws IOException {
+ public void p_should_create_p_tag() throws IOException {
root.p();
- root.close();
- assertEquals("<root><p/></root>", buffer.toString());
+ assertContent("<p/>");
}
@Test
- public void testSpan1() throws IOException {
+ public void span_should_create_span_tag() throws IOException {
root.span();
- root.close();
- assertEquals("<root><span/></root>", buffer.toString());
+ assertContent("<span/>");
}
@Test
- public void testSpan2() throws IOException {
+ public void span_should_create_span_tag_with_class_attribute()
+ throws IOException {
root.span("abc");
- root.close();
- assertEquals("<root><span class=\"abc\"/></root>", buffer.toString());
+ assertContent("<span class=\"abc\"/>");
}
@Test
- public void testSpan3() throws IOException {
+ public void span_should_create_span_tag_with_class_and_id_attribute()
+ throws IOException {
root.span("abc", "xy");
- root.close();
- assertEquals("<root><span class=\"abc\" id=\"xy\"/></root>",
- buffer.toString());
+ assertContent("<span class=\"abc\" id=\"xy\"/>");
}
@Test
- public void testPre() throws IOException {
+ public void pre_should_create_pre_tag_with_class_attribute()
+ throws IOException {
root.pre("mystyle");
- root.close();
- assertEquals("<root><pre class=\"mystyle\"/></root>", buffer.toString());
+ assertContent("<pre class=\"mystyle\"/>");
}
@Test
- public void testDiv() throws IOException {
+ public void div_should_create_div_tag_with_class_attribute()
+ throws IOException {
root.div("mystyle");
- root.close();
- assertEquals("<root><div class=\"mystyle\"/></root>", buffer.toString());
+ assertContent("<div class=\"mystyle\"/>");
}
@Test
- public void testCode() throws IOException {
+ public void code_should_create_code_tag() throws IOException {
root.code().text("0xCAFEBABE");
- root.close();
- assertEquals("<root><code>0xCAFEBABE</code></root>", buffer.toString());
+ assertContent("<code>0xCAFEBABE</code>");
}
@Test
- public void testA1() throws IOException {
+ public void a_should_create_a_tag_with_href_attribute() throws IOException {
root.a("http://www.jacoco.org/");
- root.close();
- assertEquals("<root><a href=\"http://www.jacoco.org/\"/></root>",
- buffer.toString());
+ assertContent("<a href=\"http://www.jacoco.org/\"/>");
}
@Test
- public void testA2() throws IOException {
+ public void a_should_create_a_tag_with_href_and_class_attribute()
+ throws IOException {
root.a("http://www.jacoco.org/", "extern");
- root.close();
- assertEquals(
- "<root><a href=\"http://www.jacoco.org/\" class=\"extern\"/></root>",
- buffer.toString());
+ assertContent("<a href=\"http://www.jacoco.org/\" class=\"extern\"/>");
}
@Test
- public void testALinkable1() throws IOException {
+ public void a_should_create_span_tag_when_no_link_is_given()
+ throws IOException {
root.a(new LinkableStub(null, "here", null), null);
- root.close();
- assertEquals("<root><span>here</span></root>", buffer.toString());
+ assertContent("<span>here</span>");
}
@Test
- public void testALinkable2() throws IOException {
+ public void a_should_create_span_tag_with_class_attribute_when_no_link_is_given()
+ throws IOException {
root.a(new LinkableStub(null, "here", "blue"), null);
- root.close();
- assertEquals("<root><span class=\"blue\">here</span></root>",
- buffer.toString());
+ assertContent("<span class=\"blue\">here</span>");
}
@Test
- public void testALinkable3() throws IOException {
+ public void a_should_create_a_tag_when_link_is_given() throws IOException {
root.a(new LinkableStub("index.html", "here", null), null);
- root.close();
- assertEquals("<root><a href=\"index.html\">here</a></root>",
- buffer.toString());
+ assertContent("<a href=\"index.html\">here</a>");
}
@Test
- public void testALinkable4() throws IOException {
+ public void a_should_create_a_tag_with_class_attribute_when_link_is_given()
+ throws IOException {
root.a(new LinkableStub("index.html", "here", "red"), null);
- root.close();
- assertEquals(
- "<root><a href=\"index.html\" class=\"red\">here</a></root>",
- buffer.toString());
+ assertContent("<a href=\"index.html\" class=\"red\">here</a>");
}
@Test
- public void testTable() throws IOException {
+ public void table_should_create_table_tag_with_attributes()
+ throws IOException {
root.table("tablestyle");
- root.close();
- assertEquals(
- "<root><table class=\"tablestyle\" cellspacing=\"0\"/></root>",
- buffer.toString());
+ assertContent("<table class=\"tablestyle\" cellspacing=\"0\"/>");
}
@Test
- public void testThead() throws IOException {
+ public void thead_should_create_thead_tag() throws IOException {
root.thead();
- root.close();
- assertEquals("<root><thead/></root>", buffer.toString());
+ assertContent("<thead/>");
}
@Test
- public void testTfoot() throws IOException {
+ public void tfoot_should_create_tfoot_tag() throws IOException {
root.tfoot();
- root.close();
- assertEquals("<root><tfoot/></root>", buffer.toString());
+ assertContent("<tfoot/>");
}
@Test
- public void testTbody() throws IOException {
+ public void tbody_should_create_tbody_tag() throws IOException {
root.tbody();
- root.close();
- assertEquals("<root><tbody/></root>", buffer.toString());
+ assertContent("<tbody/>");
}
@Test
- public void testTr() throws IOException {
+ public void tr_should_create_tr_tag() throws IOException {
root.tr();
- root.close();
- assertEquals("<root><tr/></root>", buffer.toString());
+ assertContent("<tr/>");
}
@Test
- public void testTd1() throws IOException {
+ public void td_should_create_td_tag() throws IOException {
root.td();
- root.close();
- assertEquals("<root><td/></root>", buffer.toString());
+ assertContent("<td/>");
}
@Test
- public void testTd2() throws IOException {
+ public void td_should_create_td_tag_with_class_attribute()
+ throws IOException {
root.td("mystyle");
- root.close();
- assertEquals("<root><td class=\"mystyle\"/></root>", buffer.toString());
+ assertContent("<td class=\"mystyle\"/>");
}
@Test
- public void testImg() throws IOException {
+ public void img_should_create_img_tag_with_attributes() throws IOException {
root.img("sample.gif", 16, 32, "Hello");
- root.close();
- assertEquals(
- "<root><img src=\"sample.gif\" width=\"16\" height=\"32\" title=\"Hello\" alt=\"Hello\"/></root>",
- buffer.toString());
+ assertContent(
+ "<img src=\"sample.gif\" width=\"16\" height=\"32\" title=\"Hello\" alt=\"Hello\"/>");
}
@Test
- public void testScript() throws IOException {
- root.script("text/javascript", "file.js");
+ public void script_should_create_script_tag_with_attributes()
+ throws IOException {
+ root.script("file.js");
+ assertContent(
+ "<script type=\"text/javascript\" src=\"file.js\"></script>");
+ }
+
+ private void assertContent(String expected) throws IOException {
root.close();
- assertEquals(
- "<root><script type=\"text/javascript\" src=\"file.js\"></script></root>",
- buffer.toString());
+ assertEquals(PREFIX + expected + SUFFIX, buffer.toString("UTF-8"));
}
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLSupport.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLSupport.java
index 1e83ebc7..ae3a2976 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLSupport.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLSupport.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/LinkableStub.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/LinkableStub.java
index 799cd794..b80b5acb 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/LinkableStub.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/LinkableStub.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/BundlePageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/BundlePageTest.java
new file mode 100644
index 00000000..716249cf
--- /dev/null
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/BundlePageTest.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.report.internal.html.page;
+
+import org.jacoco.core.analysis.IBundleCoverage;
+import org.jacoco.core.analysis.IClassCoverage;
+import org.jacoco.core.analysis.IPackageCoverage;
+import org.jacoco.core.analysis.ISourceFileCoverage;
+import org.jacoco.core.internal.analysis.BundleCoverageImpl;
+import org.jacoco.core.internal.analysis.ClassCoverageImpl;
+import org.jacoco.core.internal.analysis.CounterImpl;
+import org.jacoco.core.internal.analysis.MethodCoverageImpl;
+import org.jacoco.core.internal.analysis.PackageCoverageImpl;
+import org.junit.Before;
+import org.junit.Test;
+import org.w3c.dom.Document;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Unit tests for {@link BundlePage}.
+ */
+public class BundlePageTest extends PageTestBase {
+
+ @Before
+ @Override
+ public void setup() throws Exception {
+ super.setup();
+ }
+
+ @Test
+ public void should_render_non_empty_packages() throws Exception {
+ final ClassCoverageImpl classCoverage = new ClassCoverageImpl(
+ "example/Class", 0, false);
+ final MethodCoverageImpl methodCoverage = new MethodCoverageImpl("m",
+ "()V", null);
+ methodCoverage.increment(CounterImpl.COUNTER_1_0,
+ CounterImpl.COUNTER_0_0, 42);
+ classCoverage.addMethod(methodCoverage);
+ final IPackageCoverage nonEmptyPackage = new PackageCoverageImpl(
+ "example",
+ Collections.<IClassCoverage> singleton(classCoverage),
+ Collections.<ISourceFileCoverage> emptySet());
+
+ final IPackageCoverage emptyPackage = new PackageCoverageImpl("empty",
+ Collections.<IClassCoverage> emptySet(),
+ Collections.<ISourceFileCoverage> emptySet());
+
+ final IBundleCoverage node = new BundleCoverageImpl("bundle",
+ Arrays.asList(nonEmptyPackage, emptyPackage));
+
+ final BundlePage page = new BundlePage(node, null, null, rootFolder,
+ context);
+ page.render();
+
+ final Document doc = support.parse(output.getFile("index.html"));
+ assertEquals("el_package", support.findStr(doc,
+ "/html/body/table[1]/tbody/tr[1]/td[1]/a/@class"));
+ assertEquals("example", support.findStr(doc,
+ "/html/body/table[1]/tbody/tr[1]/td[1]/a"));
+ assertEquals("1",
+ support.findStr(doc, "count(/html/body/table[1]/tbody/tr)"));
+ }
+
+ @Test
+ public void should_render_message_when_no_class_files_specified()
+ throws Exception {
+ final IBundleCoverage node = new BundleCoverageImpl("bundle",
+ Collections.<IPackageCoverage> emptySet());
+
+ final BundlePage page = new BundlePage(node, null, null, rootFolder,
+ context);
+ page.render();
+
+ final Document doc = support.parse(output.getFile("index.html"));
+ assertEquals("No class files specified.",
+ support.findStr(doc, "/html/body/p"));
+ }
+
+ @Test
+ public void should_render_message_when_all_classes_empty()
+ throws Exception {
+ final ClassCoverageImpl emptyClass = new ClassCoverageImpl(
+ "example/Class", 0, false);
+ final IBundleCoverage node = new BundleCoverageImpl("bundle",
+ Collections.<IClassCoverage> singleton(emptyClass),
+ Collections.<ISourceFileCoverage> emptySet());
+
+ final BundlePage page = new BundlePage(node, null, null, rootFolder,
+ context);
+ page.render();
+
+ final Document doc = support.parse(output.getFile("index.html"));
+ assertEquals(
+ "None of the analyzed classes contain code relevant for code coverage.",
+ support.findStr(doc, "/html/body/p"));
+ }
+
+}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ClassPageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ClassPageTest.java
index 5a296f4b..732d1c0e 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ClassPageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ClassPageTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -17,7 +17,10 @@ import java.io.IOException;
import org.jacoco.core.analysis.IClassCoverage;
import org.jacoco.core.internal.analysis.ClassCoverageImpl;
+import org.jacoco.core.internal.analysis.CounterImpl;
import org.jacoco.core.internal.analysis.MethodCoverageImpl;
+import org.jacoco.report.internal.ReportOutputFolder;
+import org.jacoco.report.internal.html.ILinkable;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Document;
@@ -35,8 +38,10 @@ public class ClassPageTest extends PageTestBase {
@Override
public void setup() throws Exception {
super.setup();
+ final MethodCoverageImpl m = new MethodCoverageImpl("a", "()V", null);
+ m.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 42);
node = new ClassCoverageImpl("org/jacoco/example/Foo", 123, false);
- node.addMethod(new MethodCoverageImpl("a", "()V", null));
+ node.addMethod(m);
node.addMethod(new MethodCoverageImpl("b", "()V", null));
node.addMethod(new MethodCoverageImpl("c", "()V", null));
}
@@ -47,6 +52,7 @@ public class ClassPageTest extends PageTestBase {
page.render();
final Document doc = support.parse(output.getFile("Foo.html"));
+ assertEquals("", support.findStr(doc, "doc/body/p[1]"));
assertEquals("el_method", support.findStr(doc,
"/html/body/table[1]/tbody/tr[1]/td[1]/span/@class"));
assertEquals("a()", support.findStr(doc,
@@ -58,6 +64,106 @@ public class ClassPageTest extends PageTestBase {
}
@Test
+ public void should_generate_message_when_SourceFileName_not_present()
+ throws Exception {
+ page = new ClassPage(node, null, null, rootFolder, context);
+ page.render();
+
+ final Document doc = support.parse(output.getFile("Foo.html"));
+ assertEquals(
+ "Class files must be compiled with debug information to link with source files.",
+ support.findStr(doc, "/html/body/p[1]"));
+ }
+
+ @Test
+ public void should_generate_message_when_SourceFileName_present_but_no_SourceFilePage()
+ throws Exception {
+ node.setSourceFileName("Foo.java");
+
+ page = new ClassPage(node, null, null, rootFolder, context);
+ page.render();
+
+ final Document doc = support.parse(output.getFile("Foo.html"));
+ assertEquals(
+ "Source file \"org/jacoco/example/Foo.java\" was not found during generation of report.",
+ support.findStr(doc, "/html/body/p[1]"));
+ }
+
+ @Test
+ public void should_generate_message_with_default_package_when_SourceFileName_present_but_no_SourceFilePage()
+ throws Exception {
+ final MethodCoverageImpl m = new MethodCoverageImpl("a", "()V", null);
+ m.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 42);
+ node = new ClassCoverageImpl("Foo", 123, false);
+ node.addMethod(m);
+ node.setSourceFileName("Foo.java");
+
+ page = new ClassPage(node, null, null, rootFolder, context);
+ page.render();
+
+ final Document doc = support.parse(output.getFile("Foo.html"));
+ assertEquals(
+ "Source file \"Foo.java\" was not found during generation of report.",
+ support.findStr(doc, "/html/body/p[1]"));
+ }
+
+ @Test
+ public void should_not_generate_message_when_SourceFileName_and_SourceFilePage_present()
+ throws Exception {
+ node.setSourceFileName("Foo.java");
+
+ page = new ClassPage(node, null, new SourceLink(), rootFolder, context);
+ page.render();
+
+ final Document doc = support.parse(output.getFile("Foo.html"));
+ assertEquals("", support.findStr(doc, "/html/body/p[1]"));
+ }
+
+ @Test
+ public void should_generate_message_when_no_lines() throws Exception {
+ node = new ClassCoverageImpl("Foo", 123, false);
+ node.addMethod(new MethodCoverageImpl("m", "()V", null));
+
+ page = new ClassPage(node, null, new SourceLink(), rootFolder, context);
+ page.render();
+
+ final Document doc = support.parse(output.getFile("Foo.html"));
+ assertEquals(
+ "Class files must be compiled with debug information to show line coverage.",
+ support.findStr(doc, "/html/body/p[1]"));
+ }
+
+ @Test
+ public void should_generate_message_when_class_id_mismatch()
+ throws Exception {
+ node = new ClassCoverageImpl("Foo", 123, true);
+ node.addMethod(new MethodCoverageImpl("m", "()V", null));
+
+ page = new ClassPage(node, null, new SourceLink(), rootFolder, context);
+ page.render();
+
+ final Document doc = support.parse(output.getFile("Foo.html"));
+ assertEquals("A different version of class was executed at runtime.",
+ support.findStr(doc, "/html/body/p[1]"));
+ }
+
+ private class SourceLink implements ILinkable {
+
+ public String getLink(final ReportOutputFolder base) {
+ return "Source.java.html";
+ }
+
+ public String getLinkLabel() {
+ return "";
+ }
+
+ public String getLinkStyle() {
+ return null;
+ }
+
+ }
+
+ @Test
public void testGetFileName() throws IOException {
page = new ClassPage(node, null, null, rootFolder, context);
assertEquals("Foo.html", page.getFileName());
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/MethodItemTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/MethodItemTest.java
index ccd3a434..e9a030eb 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/MethodItemTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/MethodItemTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/NodePageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/NodePageTest.java
index 3adfaea5..65affac6 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/NodePageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/NodePageTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackagePageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackagePageTest.java
index 2a0fd275..828f5f51 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackagePageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackagePageTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -22,6 +22,8 @@ import org.jacoco.core.analysis.IClassCoverage;
import org.jacoco.core.analysis.IPackageCoverage;
import org.jacoco.core.analysis.ISourceFileCoverage;
import org.jacoco.core.internal.analysis.ClassCoverageImpl;
+import org.jacoco.core.internal.analysis.CounterImpl;
+import org.jacoco.core.internal.analysis.MethodCoverageImpl;
import org.jacoco.core.internal.analysis.PackageCoverageImpl;
import org.jacoco.core.internal.analysis.SourceFileCoverageImpl;
import org.jacoco.report.ISourceFileLocator;
@@ -30,7 +32,7 @@ import org.junit.Test;
import org.w3c.dom.Document;
/**
- * Unit tests for {@link PackageSourcePage}.
+ * Unit tests for {@link PackagePage}.
*/
public class PackagePageTest extends PageTestBase {
@@ -57,15 +59,48 @@ public class PackagePageTest extends PageTestBase {
}
@Test
+ public void should_render_non_empty_classes() throws Exception {
+ final ClassCoverageImpl nonEmptyClass = new ClassCoverageImpl(
+ "example/NonEmptyClass", 0, false);
+ final MethodCoverageImpl nonEmptyMethod = new MethodCoverageImpl("m",
+ "()V", null);
+ nonEmptyMethod.increment(CounterImpl.COUNTER_1_0,
+ CounterImpl.COUNTER_0_0, 42);
+ nonEmptyClass.addMethod(nonEmptyMethod);
+ final ClassCoverageImpl emptyClass = new ClassCoverageImpl(
+ "example/EmptyClass", 0, false);
+
+ node = new PackageCoverageImpl("example",
+ Arrays.<IClassCoverage> asList(emptyClass, nonEmptyClass),
+ Collections.<ISourceFileCoverage> emptySet());
+
+ page = new PackagePage(node, null, sourceLocator, rootFolder, context);
+ page.render();
+
+ final Document doc = support.parse(output.getFile("index.html"));
+ assertEquals("NonEmptyClass", support.findStr(doc,
+ "/html/body/table[1]/tbody/tr[1]/td[1]/a"));
+ assertEquals("1",
+ support.findStr(doc, "count(/html/body/table[1]/tbody/tr)"));
+ }
+
+ @Test
public void testContentsWithSource() throws Exception {
- IClassCoverage class1 = new ClassCoverageImpl(
+ ClassCoverageImpl class1 = new ClassCoverageImpl(
"org/jacoco/example/Foo1", 0x1000, false);
- IClassCoverage class2 = new ClassCoverageImpl(
+ MethodCoverageImpl method1 = new MethodCoverageImpl("m", "()V", null);
+ method1.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 42);
+ class1.addMethod(method1);
+ ClassCoverageImpl class2 = new ClassCoverageImpl(
"org/jacoco/example/Foo2", 0x2000, false);
+ MethodCoverageImpl method2 = new MethodCoverageImpl("m", "()V", null);
+ method2.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 42);
+ class2.addMethod(method2);
ISourceFileCoverage src1 = new SourceFileCoverageImpl("Src1.java",
"org/jacoco/example");
- node = new PackageCoverageImpl("org/jacoco/example", Arrays.asList(
- class1, class2), Arrays.asList(src1));
+ node = new PackageCoverageImpl("org/jacoco/example",
+ Arrays.<IClassCoverage> asList(class1, class2),
+ Arrays.asList(src1));
page = new PackagePage(node, null, sourceLocator, rootFolder, context);
page.render();
@@ -93,12 +128,19 @@ public class PackagePageTest extends PageTestBase {
@Test
public void testContentsNoSource() throws Exception {
- IClassCoverage class1 = new ClassCoverageImpl(
+ ClassCoverageImpl class1 = new ClassCoverageImpl(
"org/jacoco/example/Foo1", 0x1000, false);
- IClassCoverage class2 = new ClassCoverageImpl(
+ MethodCoverageImpl method1 = new MethodCoverageImpl("m", "()V", null);
+ method1.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 42);
+ class1.addMethod(method1);
+ ClassCoverageImpl class2 = new ClassCoverageImpl(
"org/jacoco/example/Foo2", 0x2000, false);
- node = new PackageCoverageImpl("org/jacoco/example", Arrays.asList(
- class1, class2), Collections.<ISourceFileCoverage> emptyList());
+ MethodCoverageImpl method2 = new MethodCoverageImpl("m", "()V", null);
+ method2.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 42);
+ class2.addMethod(method2);
+ node = new PackageCoverageImpl("org/jacoco/example",
+ Arrays.<IClassCoverage> asList(class1, class2),
+ Collections.<ISourceFileCoverage> emptyList());
page = new PackagePage(node, null, sourceLocator, rootFolder, context);
page.render();
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackageSourcePageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackageSourcePageTest.java
index c39a4982..96db3a59 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackageSourcePageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackageSourcePageTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -24,6 +24,7 @@ import java.util.Collections;
import org.jacoco.core.analysis.IClassCoverage;
import org.jacoco.core.analysis.ISourceFileCoverage;
+import org.jacoco.core.internal.analysis.CounterImpl;
import org.jacoco.core.internal.analysis.PackageCoverageImpl;
import org.jacoco.core.internal.analysis.SourceFileCoverageImpl;
import org.jacoco.report.ISourceFileLocator;
@@ -48,12 +49,16 @@ public class PackageSourcePageTest extends PageTestBase {
@Override
public void setup() throws Exception {
super.setup();
- ISourceFileCoverage src1 = new SourceFileCoverageImpl("Src1.java",
+ SourceFileCoverageImpl src1 = new SourceFileCoverageImpl("Src1.java",
"org/jacoco/example");
- ISourceFileCoverage src2 = new SourceFileCoverageImpl("Src2.java",
+ src1.increment(CounterImpl.COUNTER_1_0,
+ CounterImpl.COUNTER_0_0, 1);
+ SourceFileCoverageImpl src2 = new SourceFileCoverageImpl("Src2.java",
"org/jacoco/example");
+ src2.increment(CounterImpl.COUNTER_1_0,
+ CounterImpl.COUNTER_0_0, 1);
node = new PackageCoverageImpl("org/jacoco/example",
- Collections.<IClassCoverage> emptyList(), Arrays.asList(src1,
+ Collections.<IClassCoverage> emptyList(), Arrays.<ISourceFileCoverage>asList(src1,
src2));
sourceLocator = new ISourceFileLocator() {
@@ -109,6 +114,29 @@ public class PackageSourcePageTest extends PageTestBase {
}
@Test
+ public void should_render_non_empty_sources() throws Exception {
+ final ISourceFileCoverage emptySource = new SourceFileCoverageImpl(
+ "Empty.java", "example");
+ final SourceFileCoverageImpl nonEmptySource = new SourceFileCoverageImpl(
+ "NonEmpty.java", "example");
+ nonEmptySource.increment(CounterImpl.COUNTER_1_0,
+ CounterImpl.COUNTER_0_0, 1);
+ node = new PackageCoverageImpl("example",
+ Collections.<IClassCoverage> emptyList(),
+ Arrays.asList(emptySource, nonEmptySource));
+
+ page = new PackageSourcePage(node, null, sourceLocator, rootFolder,
+ context, packagePageLink);
+ page.render();
+
+ final Document doc = support.parse(output.getFile("index.source.html"));
+ assertEquals("NonEmpty.java", support.findStr(doc,
+ "/html/body/table[1]/tbody/tr[1]/td[1]/span"));
+ assertEquals("1",
+ support.findStr(doc, "count(/html/body/table[1]/tbody/tr)"));
+ }
+
+ @Test
public void testGetSourceFilePages() throws Exception {
page = new PackageSourcePage(node, null, sourceLocator, rootFolder,
context, packagePageLink);
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PageTestBase.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PageTestBase.java
index 40cd983d..8a5574d0 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PageTestBase.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PageTestBase.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ReportPageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ReportPageTest.java
index 1d875f30..0f42bb48 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ReportPageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ReportPageTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SessionsPageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SessionsPageTest.java
index 7983d8d9..2380d572 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SessionsPageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SessionsPageTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceFilePageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceFilePageTest.java
index c0bc72e3..da433542 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceFilePageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceFilePageTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceHighlighterTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceHighlighterTest.java
index ca9d4d70..3ef347de 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceHighlighterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceHighlighterTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -13,14 +13,13 @@ package org.jacoco.report.internal.html.page;
import static org.junit.Assert.assertEquals;
+import java.io.ByteArrayOutputStream;
import java.io.StringReader;
-import java.io.StringWriter;
import java.util.Locale;
import org.jacoco.core.analysis.ICoverageNode.ElementType;
import org.jacoco.core.internal.analysis.CounterImpl;
import org.jacoco.core.internal.analysis.SourceNodeImpl;
-import org.jacoco.report.internal.html.HTMLDocument;
import org.jacoco.report.internal.html.HTMLElement;
import org.jacoco.report.internal.html.HTMLSupport;
import org.jacoco.report.internal.html.resources.Styles;
@@ -35,9 +34,9 @@ public class SourceHighlighterTest {
private HTMLSupport htmlSupport;
- private StringWriter buffer;
+ private ByteArrayOutputStream buffer;
- private HTMLDocument html;
+ private HTMLElement html;
private HTMLElement parent;
@@ -49,8 +48,8 @@ public class SourceHighlighterTest {
public void setup() throws Exception {
htmlSupport = new HTMLSupport();
source = new SourceNodeImpl(ElementType.SOURCEFILE, "Foo.java");
- buffer = new StringWriter();
- html = new HTMLDocument(buffer, "UTF-8");
+ buffer = new ByteArrayOutputStream();
+ html = new HTMLElement(buffer, "UTF-8");
html.head().title();
parent = html.body();
sourceHighlighter = new SourceHighlighter(Locale.US);
@@ -60,8 +59,7 @@ public class SourceHighlighterTest {
public void testDefaultTabWidth() throws Exception {
final String src = "\tA";
sourceHighlighter.render(parent, source, new StringReader(src));
- html.close();
- final Document doc = htmlSupport.parse(buffer.toString());
+ final Document doc = parseDoc();
// Assert that we no longer replace tabs with spaces
assertEquals("\tA\n", htmlSupport.findStr(doc, "//pre/text()"));
@@ -70,8 +68,7 @@ public class SourceHighlighterTest {
@Test
public void testDefaultLanguage() throws Exception {
sourceHighlighter.render(parent, source, new StringReader(""));
- html.close();
- final Document doc = htmlSupport.parse(buffer.toString());
+ final Document doc = parseDoc();
assertEquals("source lang-java linenums",
htmlSupport.findStr(doc, "//pre/@class"));
}
@@ -80,8 +77,7 @@ public class SourceHighlighterTest {
public void testSetLanguage() throws Exception {
sourceHighlighter.setLanguage("scala");
sourceHighlighter.render(parent, source, new StringReader(""));
- html.close();
- final Document doc = htmlSupport.parse(buffer.toString());
+ final Document doc = parseDoc();
assertEquals("source lang-scala linenums",
htmlSupport.findStr(doc, "//pre/@class"));
}
@@ -94,8 +90,7 @@ public class SourceHighlighterTest {
source.increment(CounterImpl.COUNTER_0_1, CounterImpl.COUNTER_0_0, 2);
source.increment(CounterImpl.COUNTER_0_1, CounterImpl.COUNTER_0_0, 3);
sourceHighlighter.render(parent, source, new StringReader(src));
- html.close();
- final Document doc = htmlSupport.parse(buffer.toString());
+ final Document doc = parseDoc();
assertEquals(Styles.NOT_COVERED,
htmlSupport.findStr(doc, "//pre/span[text() = 'A']/@class"));
assertEquals(Styles.PARTLY_COVERED,
@@ -109,18 +104,16 @@ public class SourceHighlighterTest {
@Test
public void testHighlightNone() throws Exception {
sourceHighlighter.highlight(parent, source.getLine(1), 1);
- html.close();
- final Document doc = htmlSupport.parse(buffer.toString());
+ final Document doc = parseDoc();
assertEquals("", htmlSupport.findStr(doc, "//pre"));
}
@Test
public void testHighlightBranchesFC() throws Exception {
- source.increment(CounterImpl.COUNTER_0_1,
- CounterImpl.getInstance(0, 5), 1);
+ source.increment(CounterImpl.COUNTER_0_1, CounterImpl.getInstance(0, 5),
+ 1);
sourceHighlighter.highlight(parent.pre(null), source.getLine(1), 1);
- html.close();
- final Document doc = htmlSupport.parse(buffer.toString());
+ final Document doc = parseDoc();
assertEquals("fc bfc", htmlSupport.findStr(doc, "//pre/span/@class"));
assertEquals("All 5 branches covered.",
htmlSupport.findStr(doc, "//pre/span/@title"));
@@ -128,11 +121,10 @@ public class SourceHighlighterTest {
@Test
public void testHighlightBranchesPC() throws Exception {
- source.increment(CounterImpl.COUNTER_0_1,
- CounterImpl.getInstance(2, 3), 1);
+ source.increment(CounterImpl.COUNTER_0_1, CounterImpl.getInstance(2, 3),
+ 1);
sourceHighlighter.highlight(parent.pre(null), source.getLine(1), 1);
- html.close();
- final Document doc = htmlSupport.parse(buffer.toString());
+ final Document doc = parseDoc();
assertEquals("pc bpc", htmlSupport.findStr(doc, "//pre/span/@class"));
assertEquals("2 of 5 branches missed.",
htmlSupport.findStr(doc, "//pre/span/@title"));
@@ -140,14 +132,18 @@ public class SourceHighlighterTest {
@Test
public void testHighlightBranchesNC() throws Exception {
- source.increment(CounterImpl.COUNTER_0_1,
- CounterImpl.getInstance(5, 0), 1);
+ source.increment(CounterImpl.COUNTER_0_1, CounterImpl.getInstance(5, 0),
+ 1);
sourceHighlighter.highlight(parent.pre(null), source.getLine(1), 1);
- html.close();
- final Document doc = htmlSupport.parse(buffer.toString());
+ final Document doc = parseDoc();
assertEquals("pc bnc", htmlSupport.findStr(doc, "//pre/span/@class"));
assertEquals("All 5 branches missed.",
htmlSupport.findStr(doc, "//pre/span/@title"));
}
+ private Document parseDoc() throws Exception {
+ html.close();
+ return htmlSupport.parse(buffer);
+ }
+
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/ResourcesTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/ResourcesTest.java
index 9dd7dea9..1e61cebc 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/ResourcesTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/ResourcesTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/StylesTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/StylesTest.java
index e0eea6e3..fdf54756 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/StylesTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/StylesTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java
index 97e7658e..8623eee7 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -26,7 +26,6 @@ import org.jacoco.core.analysis.ICoverageNode.ElementType;
import org.jacoco.core.internal.analysis.CounterImpl;
import org.jacoco.report.MemoryMultiReportOutput;
import org.jacoco.report.internal.ReportOutputFolder;
-import org.jacoco.report.internal.html.HTMLDocument;
import org.jacoco.report.internal.html.HTMLElement;
import org.jacoco.report.internal.html.HTMLSupport;
import org.jacoco.report.internal.html.resources.Resources;
@@ -46,7 +45,7 @@ public class BarColumnTest {
private Resources resources;
- private HTMLDocument doc;
+ private HTMLElement html;
private HTMLElement td;
@@ -59,9 +58,9 @@ public class BarColumnTest {
output = new MemoryMultiReportOutput();
root = new ReportOutputFolder(output);
resources = new Resources(root);
- doc = new HTMLDocument(root.createFile("Test.html"), "UTF-8");
- doc.head().title();
- td = doc.body().table("somestyle").tr().td();
+ html = new HTMLElement(root.createFile("Test.html"), "UTF-8");
+ html.head().title();
+ td = html.body().table("somestyle").tr().td();
support = new HTMLSupport();
column = new BarColumn(CounterEntity.LINE, Locale.ENGLISH);
}
@@ -76,14 +75,13 @@ public class BarColumnTest {
public void testInit() throws Exception {
final ITableItem i = createItem(6, 24);
assertTrue(column.init(Arrays.asList(i), i.getNode()));
- doc.close();
+ html.close();
}
@Test
public void testFooter() throws Exception {
column.footer(td, createNode(15, 5), resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("15 of 20",
support.findStr(doc, "/html/body/table/tr/td/text()"));
}
@@ -94,8 +92,7 @@ public class BarColumnTest {
final ITableItem i2 = createItem(6, 24);
column.init(Arrays.asList(i1, i2), createNode(21, 29));
column.item(td, i1, resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("2",
support.findStr(doc, "count(/html/body/table/tr[1]/td/img)"));
@@ -105,16 +102,16 @@ public class BarColumnTest {
support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@src"));
assertEquals("15",
support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@alt"));
- assertEquals("60",
- support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@width"));
+ assertEquals("60", support.findStr(doc,
+ "/html/body/table/tr[1]/td/img[1]/@width"));
// green bar
assertEquals("jacoco-resources/greenbar.gif",
support.findStr(doc, "/html/body/table/tr[1]/td/img[2]/@src"));
assertEquals("5",
support.findStr(doc, "/html/body/table/tr[1]/td/img[2]/@alt"));
- assertEquals("20",
- support.findStr(doc, "/html/body/table/tr[1]/td/img[2]/@width"));
+ assertEquals("20", support.findStr(doc,
+ "/html/body/table/tr[1]/td/img[2]/@width"));
}
@Test
@@ -122,8 +119,7 @@ public class BarColumnTest {
final ITableItem i1 = createItem(20, 0);
column.init(Arrays.asList(i1), createNode(20, 0));
column.item(td, i1, resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("1",
support.findStr(doc, "count(/html/body/table/tr[1]/td/img)"));
@@ -133,8 +129,8 @@ public class BarColumnTest {
support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@src"));
assertEquals("20",
support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@alt"));
- assertEquals("120",
- support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@width"));
+ assertEquals("120", support.findStr(doc,
+ "/html/body/table/tr[1]/td/img[1]/@width"));
}
@Test
@@ -142,8 +138,7 @@ public class BarColumnTest {
final ITableItem i1 = createItem(00, 20);
column.init(Arrays.asList(i1), createNode(00, 20));
column.item(td, i1, resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("1",
support.findStr(doc, "count(/html/body/table/tr[1]/td/img)"));
@@ -153,8 +148,8 @@ public class BarColumnTest {
support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@src"));
assertEquals("20",
support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@alt"));
- assertEquals("120",
- support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@width"));
+ assertEquals("120", support.findStr(doc,
+ "/html/body/table/tr[1]/td/img[1]/@width"));
}
@Test
@@ -162,8 +157,7 @@ public class BarColumnTest {
final ITableItem i1 = createItem(00, 00);
column.init(Arrays.asList(i1), createNode(00, 00));
column.item(td, i1, resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("0",
support.findStr(doc, "count(/html/body/table/tr[1]/td/img)"));
@@ -175,8 +169,7 @@ public class BarColumnTest {
final ITableItem i1 = createItem(0, 123456);
col.init(Arrays.asList(i1), createNode(00, 20));
col.item(td, i1, resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("123\u00a0456",
support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@alt"));
@@ -190,7 +183,7 @@ public class BarColumnTest {
assertTrue(c.compare(i1, i2) < 0);
assertTrue(c.compare(i2, i1) > 0);
assertEquals(0, c.compare(i1, i1));
- doc.close();
+ html.close();
}
@Test
@@ -201,7 +194,7 @@ public class BarColumnTest {
assertTrue(c.compare(i1, i2) < 0);
assertTrue(c.compare(i2, i1) > 0);
assertEquals(0, c.compare(i1, i1));
- doc.close();
+ html.close();
}
private ITableItem createItem(final int missed, final int covered) {
@@ -233,4 +226,9 @@ public class BarColumnTest {
};
}
+ private Document parseDoc() throws Exception {
+ html.close();
+ return support.parse(output.getFile("Test.html"));
+ }
+
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java
index 7c68e118..8311128f 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -28,7 +28,6 @@ import org.jacoco.core.analysis.ICoverageNode.ElementType;
import org.jacoco.core.internal.analysis.CounterImpl;
import org.jacoco.report.MemoryMultiReportOutput;
import org.jacoco.report.internal.ReportOutputFolder;
-import org.jacoco.report.internal.html.HTMLDocument;
import org.jacoco.report.internal.html.HTMLElement;
import org.jacoco.report.internal.html.HTMLSupport;
import org.jacoco.report.internal.html.resources.Resources;
@@ -48,7 +47,7 @@ public class CounterColumnTest {
private Resources resources;
- private HTMLDocument doc;
+ private HTMLElement html;
private HTMLElement td;
@@ -61,9 +60,9 @@ public class CounterColumnTest {
output = new MemoryMultiReportOutput();
root = new ReportOutputFolder(output);
resources = new Resources(root);
- doc = new HTMLDocument(root.createFile("Test.html"), "UTF-8");
- doc.head().title();
- td = doc.body().table("somestyle").tr().td();
+ html = new HTMLElement(root.createFile("Test.html"), "UTF-8");
+ html.head().title();
+ td = html.body().table("somestyle").tr().td();
support = new HTMLSupport();
locale = Locale.ENGLISH;
}
@@ -80,7 +79,7 @@ public class CounterColumnTest {
locale);
final ITableItem item = createItem(0, 3);
assertTrue(column.init(Arrays.asList(item), item.getNode()));
- doc.close();
+ html.close();
}
@Test
@@ -89,7 +88,7 @@ public class CounterColumnTest {
locale);
final ITableItem item = createItem(0, 0);
assertFalse(column.init(Arrays.asList(item), createNode(1, 0)));
- doc.close();
+ html.close();
}
@Test
@@ -99,8 +98,7 @@ public class CounterColumnTest {
final ITableItem item = createItem(100, 50);
column.init(Collections.singletonList(item), item.getNode());
column.item(td, item, resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("150",
support.findStr(doc, "/html/body/table/tr/td[1]/text()"));
}
@@ -112,8 +110,7 @@ public class CounterColumnTest {
final ITableItem item = createItem(100, 50);
column.init(Collections.singletonList(item), item.getNode());
column.item(td, item, resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("100",
support.findStr(doc, "/html/body/table/tr/td[1]/text()"));
}
@@ -125,8 +122,7 @@ public class CounterColumnTest {
final ITableItem item = createItem(100, 50);
column.init(Collections.singletonList(item), item.getNode());
column.item(td, item, resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("50",
support.findStr(doc, "/html/body/table/tr/td[1]/text()"));
}
@@ -138,8 +134,7 @@ public class CounterColumnTest {
final ITableItem item = createItem(1000, 0);
column.init(Collections.singletonList(item), item.getNode());
column.item(td, item, resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("1.000",
support.findStr(doc, "/html/body/table/tr/td[1]/text()"));
}
@@ -151,8 +146,7 @@ public class CounterColumnTest {
final ITableItem item = createItem(20, 60);
column.init(Collections.singletonList(item), item.getNode());
column.footer(td, item.getNode(), resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("80",
support.findStr(doc, "/html/body/table/tr/td[1]/text()"));
}
@@ -167,7 +161,7 @@ public class CounterColumnTest {
assertEquals(0, c.compare(i1, i1));
assertTrue(c.compare(i1, i2) > 0);
assertTrue(c.compare(i2, i1) < 0);
- doc.close();
+ html.close();
}
@Test
@@ -180,7 +174,7 @@ public class CounterColumnTest {
assertEquals(0, c.compare(i1, i1));
assertTrue(c.compare(i1, i2) > 0);
assertTrue(c.compare(i2, i1) < 0);
- doc.close();
+ html.close();
}
@Test
@@ -193,7 +187,7 @@ public class CounterColumnTest {
assertEquals(0, c.compare(i1, i1));
assertTrue(c.compare(i1, i2) > 0);
assertTrue(c.compare(i2, i1) < 0);
- doc.close();
+ html.close();
}
private ITableItem createItem(final int missed, final int covered) {
@@ -224,4 +218,10 @@ public class CounterColumnTest {
}
};
}
+
+ private Document parseDoc() throws Exception {
+ html.close();
+ return support.parse(output.getFile("Test.html"));
+ }
+
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java
index adf4e243..f13ef470 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -21,7 +21,6 @@ import org.jacoco.core.analysis.ICoverageNode;
import org.jacoco.core.analysis.ICoverageNode.ElementType;
import org.jacoco.report.MemoryMultiReportOutput;
import org.jacoco.report.internal.ReportOutputFolder;
-import org.jacoco.report.internal.html.HTMLDocument;
import org.jacoco.report.internal.html.HTMLElement;
import org.jacoco.report.internal.html.HTMLSupport;
import org.jacoco.report.internal.html.resources.Resources;
@@ -41,7 +40,7 @@ public class LabelColumnTest {
private Resources resources;
- private HTMLDocument doc;
+ private HTMLElement html;
private HTMLElement td;
@@ -54,9 +53,9 @@ public class LabelColumnTest {
output = new MemoryMultiReportOutput();
root = new ReportOutputFolder(output);
resources = new Resources(root);
- doc = new HTMLDocument(root.createFile("Test.html"), "UTF-8");
- doc.head().title();
- td = doc.body().table("somestyle").tr().td();
+ html = new HTMLElement(root.createFile("Test.html"), "UTF-8");
+ html.head().title();
+ td = html.body().table("somestyle").tr().td();
support = new HTMLSupport();
column = new LabelColumn();
}
@@ -70,15 +69,14 @@ public class LabelColumnTest {
@Test
public void testInit() throws Exception {
assertTrue(column.init(null, null));
- doc.close();
+ html.close();
}
@Test
public void testFooter() throws Exception {
column.footer(td, new CoverageNodeImpl(ElementType.GROUP, "Foo"),
resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("Total",
support.findStr(doc, "/html/body/table/tr/td/text()"));
}
@@ -86,8 +84,7 @@ public class LabelColumnTest {
@Test
public void testItemWithoutLink() throws Exception {
column.item(td, createItem("Abc", null), resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("Abc",
support.findStr(doc, "/html/body/table/tr/td/span/text()"));
assertEquals("el_group",
@@ -97,8 +94,7 @@ public class LabelColumnTest {
@Test
public void testItemWithLink() throws Exception {
column.item(td, createItem("Def", "def.html"), resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("Def",
support.findStr(doc, "/html/body/table/tr/td/a/text()"));
assertEquals("def.html",
@@ -112,7 +108,7 @@ public class LabelColumnTest {
final ITableItem i1 = createItem("abcdef", null);
final ITableItem i2 = createItem("aBcDeF", null);
assertEquals(0, column.getComparator().compare(i1, i2));
- doc.close();
+ html.close();
}
@Test
@@ -121,11 +117,12 @@ public class LabelColumnTest {
final ITableItem i2 = createItem("world", null);
assertTrue(column.getComparator().compare(i1, i2) < 0);
assertTrue(column.getComparator().compare(i2, i1) > 0);
- doc.close();
+ html.close();
}
private ITableItem createItem(final String name, final String link) {
- final ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP, name);
+ final ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP,
+ name);
return new ITableItem() {
public String getLinkLabel() {
return name;
@@ -145,4 +142,8 @@ public class LabelColumnTest {
};
}
+ private Document parseDoc() throws Exception {
+ html.close();
+ return support.parse(output.getFile("Test.html"));
+ }
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java
index bff3d970..3028e005 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -25,7 +25,6 @@ import org.jacoco.core.analysis.ICoverageNode.ElementType;
import org.jacoco.core.internal.analysis.CounterImpl;
import org.jacoco.report.MemoryMultiReportOutput;
import org.jacoco.report.internal.ReportOutputFolder;
-import org.jacoco.report.internal.html.HTMLDocument;
import org.jacoco.report.internal.html.HTMLElement;
import org.jacoco.report.internal.html.HTMLSupport;
import org.jacoco.report.internal.html.resources.Resources;
@@ -45,7 +44,7 @@ public class PercentageColumnTest {
private Resources resources;
- private HTMLDocument doc;
+ private HTMLElement html;
private HTMLElement td;
@@ -58,9 +57,9 @@ public class PercentageColumnTest {
output = new MemoryMultiReportOutput();
root = new ReportOutputFolder(output);
resources = new Resources(root);
- doc = new HTMLDocument(root.createFile("Test.html"), "UTF-8");
- doc.head().title();
- td = doc.body().table("somestyle").tr().td();
+ html = new HTMLElement(root.createFile("Test.html"), "UTF-8");
+ html.head().title();
+ td = html.body().table("somestyle").tr().td();
support = new HTMLSupport();
column = new PercentageColumn(CounterEntity.LINE, Locale.ENGLISH);
}
@@ -74,15 +73,14 @@ public class PercentageColumnTest {
@Test
public void testInit() throws Exception {
assertTrue(column.init(null, null));
- doc.close();
+ html.close();
}
@Test
public void testItem1() throws Exception {
final ITableItem item = createItem(100, 50);
column.item(td, item, resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("33%",
support.findStr(doc, "/html/body/table/tr/td[1]/text()"));
}
@@ -91,8 +89,7 @@ public class PercentageColumnTest {
public void testItem2() throws Exception {
final ITableItem item = createItem(0, 0);
column.item(td, item, resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("n/a",
support.findStr(doc, "/html/body/table/tr/td[1]/text()"));
}
@@ -101,8 +98,7 @@ public class PercentageColumnTest {
public void testRounding() throws Exception {
final ITableItem item = createItem(1, 199);
column.item(td, item, resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("99%",
support.findStr(doc, "/html/body/table/tr/td[1]/text()"));
}
@@ -113,8 +109,7 @@ public class PercentageColumnTest {
Locale.FRENCH);
final ITableItem item = createItem(0, 1000);
column.item(td, item, resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
// After integration of JEP 252 into JDK9, CLDR locale data is used by
// default, which results in usage of non-breaking space below, while
// the legacy locale data uses regular space:
@@ -126,8 +121,7 @@ public class PercentageColumnTest {
public void testFooter1() throws Exception {
final ITableItem item = createItem(20, 60);
column.footer(td, item.getNode(), resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("75%", support.findStr(doc, "/html/body/table/tr"));
}
@@ -135,8 +129,7 @@ public class PercentageColumnTest {
public void testFooter2() throws Exception {
final ITableItem item = createItem(0, 0);
column.footer(td, item.getNode(), resources, root);
- doc.close();
- final Document doc = support.parse(output.getFile("Test.html"));
+ final Document doc = parseDoc();
assertEquals("n/a", support.findStr(doc, "/html/body/table/tr"));
}
@@ -148,7 +141,7 @@ public class PercentageColumnTest {
assertTrue(c.compare(i1, i2) < 0);
assertTrue(c.compare(i2, i1) > 0);
assertEquals(0, c.compare(i1, i1));
- doc.close();
+ html.close();
}
private ITableItem createItem(final int missed, final int covered) {
@@ -179,4 +172,9 @@ public class PercentageColumnTest {
}
};
}
+
+ private Document parseDoc() throws Exception {
+ html.close();
+ return support.parse(output.getFile("Test.html"));
+ }
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/SortIndexTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/SortIndexTest.java
index b3e18954..7ca47226 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/SortIndexTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/SortIndexTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java
index 4e6e2ed6..eed6923d 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -27,7 +27,6 @@ import org.jacoco.core.analysis.ICoverageNode.ElementType;
import org.jacoco.core.internal.analysis.CounterImpl;
import org.jacoco.report.MemoryMultiReportOutput;
import org.jacoco.report.internal.ReportOutputFolder;
-import org.jacoco.report.internal.html.HTMLDocument;
import org.jacoco.report.internal.html.HTMLElement;
import org.jacoco.report.internal.html.HTMLSupport;
import org.jacoco.report.internal.html.resources.Resources;
@@ -47,7 +46,7 @@ public class TableTest {
private Resources resources;
- private HTMLDocument doc;
+ private HTMLElement html;
private HTMLElement body;
@@ -58,9 +57,9 @@ public class TableTest {
output = new MemoryMultiReportOutput();
root = new ReportOutputFolder(output);
resources = new Resources(root);
- doc = new HTMLDocument(root.createFile("Test.html"), "UTF-8");
- doc.head().title();
- body = doc.body();
+ html = new HTMLElement(root.createFile("Test.html"), "UTF-8");
+ html.head().title();
+ body = html.body();
table = new Table();
}
@@ -106,7 +105,7 @@ public class TableTest {
createItem("B", 2), createItem("C", 3));
table.add("Header", null, recorder, false);
table.render(body, items, createTotal("Sum", 6), resources, root);
- doc.close();
+ html.close();
assertEquals("init-footer-itemA-itemB-itemC-", recorder.toString());
}
@@ -136,31 +135,35 @@ public class TableTest {
final List<ITableItem> items = Arrays.asList(createItem("A", 1));
table.add("Header", null, column, false);
table.render(body, items, createTotal("Sum", 1), resources, root);
- doc.close();
+ html.close();
}
@Test(expected = IllegalStateException.class)
public void testTwoDefaultSorts() throws IOException {
- doc.close();
- table.add("Header1", null, new StubRenderer(
- CounterComparator.TOTALITEMS.on(CounterEntity.CLASS)), true);
- table.add("Header2", null, new StubRenderer(
- CounterComparator.TOTALITEMS.on(CounterEntity.CLASS)), true);
+ html.close();
+ table.add("Header1", null,
+ new StubRenderer(
+ CounterComparator.TOTALITEMS.on(CounterEntity.CLASS)),
+ true);
+ table.add("Header2", null,
+ new StubRenderer(
+ CounterComparator.TOTALITEMS.on(CounterEntity.CLASS)),
+ true);
}
@Test
public void testSortIds() throws Exception {
final List<ITableItem> items = Arrays.asList(createItem("C", 3),
createItem("E", 4), createItem("A", 1), createItem("D", 2));
- table.add("Forward", null, new StubRenderer(
- CounterComparator.TOTALITEMS.on(CounterEntity.CLASS)), false);
- table.add(
- "Reverse",
- null,
- new StubRenderer(CounterComparator.TOTALITEMS.reverse().on(
- CounterEntity.CLASS)), false);
+ table.add("Forward", null,
+ new StubRenderer(
+ CounterComparator.TOTALITEMS.on(CounterEntity.CLASS)),
+ false);
+ table.add("Reverse", null, new StubRenderer(
+ CounterComparator.TOTALITEMS.reverse().on(CounterEntity.CLASS)),
+ false);
table.render(body, items, createTotal("Sum", 6), resources, root);
- doc.close();
+ html.close();
final HTMLSupport support = new HTMLSupport();
final Document doc = support.parse(output.getFile("Test.html"));
@@ -199,10 +202,12 @@ public class TableTest {
final List<ITableItem> items = Arrays.asList(createItem("C", 3),
createItem("E", 5), createItem("A", 1), createItem("D", 4),
createItem("B", 2));
- table.add("Forward", null, new StubRenderer(
- CounterComparator.TOTALITEMS.on(CounterEntity.CLASS)), true);
+ table.add("Forward", null,
+ new StubRenderer(
+ CounterComparator.TOTALITEMS.on(CounterEntity.CLASS)),
+ true);
table.render(body, items, createTotal("Sum", 1), resources, root);
- doc.close();
+ html.close();
final HTMLSupport support = new HTMLSupport();
final Document doc = support.parse(output.getFile("Test.html"));
@@ -222,7 +227,8 @@ public class TableTest {
}
private ITableItem createItem(final String name, final int count) {
- final ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP, name) {
+ final ICoverageNode node = new CoverageNodeImpl(ElementType.GROUP,
+ name) {
{
this.classCounter = CounterImpl.getInstance(count, 0);
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/LocalEntityResolver.java b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/LocalEntityResolver.java
index c67fdb1d..ae6fc91e 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/LocalEntityResolver.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/LocalEntityResolver.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLDocumentTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLDocumentTest.java
deleted file mode 100644
index cd3d985a..00000000
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLDocumentTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Marc R. Hoffmann - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.report.internal.xml;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.StringWriter;
-
-import org.junit.Test;
-
-/**
- * Unit tests for {@link XMLDocument}.
- */
-public class XMLDocumentTest {
-
- @Test
- public void testNoDoctype() throws IOException {
- StringWriter writer = new StringWriter();
- new XMLDocument("test", null, null, "UTF-8", false, writer).close();
- assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?><test/>",
- writer.toString());
- }
-
- @Test
- public void testNoDoctypeStandalone() throws IOException {
- StringWriter writer = new StringWriter();
- new XMLDocument("test", null, null, "UTF-8", true, writer).close();
- assertEquals(
- "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
- + "<test/>", writer.toString());
- }
-
- @Test
- public void testDoctype() throws IOException {
- StringWriter writer = new StringWriter();
- new XMLDocument("test", "sample", "sample.dtd", "UTF-8", false, writer)
- .close();
- assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- + "<!DOCTYPE test PUBLIC \"sample\" \"sample.dtd\"><test/>",
- writer.toString());
- }
-
- @Test
- public void testDoctypeStandalone() throws IOException {
- StringWriter writer = new StringWriter();
- new XMLDocument("test", "sample", "sample.dtd", "UTF-8", true, writer)
- .close();
- assertEquals(
- "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
- + "<!DOCTYPE test PUBLIC \"sample\" \"sample.dtd\">"
- + "<test/>", writer.toString());
- }
-
- @Test
- public void testStream() throws IOException {
- ByteArrayOutputStream buffer = new ByteArrayOutputStream();
- new XMLDocument("test", null, null, "UTF-8", false, buffer).text(
- "\u00CD\u307e").close();
- assertEquals(
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?><test>\u00CD\u307e</test>",
- buffer.toString("UTF-8"));
- }
-
- @Test
- public void testClose() throws IOException {
- class CloseVerifier extends StringWriter {
-
- boolean closed = false;
-
- @Override
- public void close() throws IOException {
- closed = true;
- super.close();
- }
- }
- CloseVerifier verifier = new CloseVerifier();
- new XMLDocument("test", null, null, "UTF-8", false, verifier).close();
- assertTrue(verifier.closed);
- }
-
-}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLElementTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLElementTest.java
index 0ba4644e..5ed161c2 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLElementTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLElementTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -13,8 +13,8 @@ package org.jacoco.report.internal.xml;
import static org.junit.Assert.assertEquals;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.StringWriter;
import org.junit.Before;
import org.junit.Test;
@@ -24,123 +24,156 @@ import org.junit.Test;
*/
public class XMLElementTest {
- private StringWriter buffer;
+ private static final String DECL = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+
+ private ByteArrayOutputStream buffer;
private XMLElement root;
@Before
- public void setUp() throws IOException {
- buffer = new StringWriter();
- root = new XMLElement(buffer, "root");
- root.beginOpenTag();
+ public void setup() throws IOException {
+ buffer = new ByteArrayOutputStream();
+ root = new XMLElement("root", null, null, false, "UTF-8", buffer);
+ }
+
+ @Test
+ public void init_should_write_doctype_when_given() throws IOException {
+ root = new XMLElement("root", "-//JACOCO//TEST", "test.dtd", false,
+ "UTF-8", buffer);
+ assertEquals(DECL
+ + "<!DOCTYPE root PUBLIC \"-//JACOCO//TEST\" \"test.dtd\"><root/>",
+ actual());
+ }
+
+ @Test
+ public void init_should_write_standalone_when_given() throws IOException {
+ root = new XMLElement("root", null, null, true, "UTF-8", buffer);
+ assertEquals(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><root/>",
+ actual());
}
@Test
- public void testEmptyNode() throws IOException {
+ public void close_should_emit_empty_element_when_no_children_exist()
+ throws IOException {
+ assertContent("<root/>");
+ }
+
+ @Test
+ public void close_should_be_allowed_multiple_times() throws IOException {
root.close();
- // Second close has no effect:
root.close();
- assertEquals("<root/>", buffer.toString());
+ assertContent("<root/>");
}
@Test(expected = IOException.class)
- public void testAddAttributeToClosedNode() throws IOException {
+ public void attr_should_throw_exception_when_closed() throws IOException {
root.close();
root.attr("attr", "value");
}
@Test(expected = IOException.class)
- public void testAddChildToClosedNode() throws IOException {
+ public void element_should_throw_exception_when_closed()
+ throws IOException {
root.close();
root.element("child");
}
@Test(expected = IOException.class)
- public void testAddTextToClosedNode() throws IOException {
+ public void text_should_throw_exception_when_closed() throws IOException {
root.close();
root.text("text");
}
@Test
- public void testNestedElement() throws IOException {
+ public void element_should_emit_nested_element() throws IOException {
root.element("world");
- root.close();
- assertEquals("<root><world/></root>", buffer.toString());
+ assertContent("<root><world/></root>");
}
@Test
- public void test2NestedElements() throws IOException {
+ public void element_should_allow_multiple_nested_elements()
+ throws IOException {
root.element("world");
root.element("universe");
- root.close();
- assertEquals("<root><world/><universe/></root>", buffer.toString());
+ assertContent("<root><world/><universe/></root>");
}
@Test
- public void testText() throws IOException {
+ public void text_should_emit_text() throws IOException {
root.text("world");
- root.close();
- assertEquals("<root>world</root>", buffer.toString());
+ assertContent("<root>world</root>");
}
@Test
- public void testMixedContent() throws IOException {
+ public void text_should_allow_mixing_with_elements() throws IOException {
root.element("tag1");
root.text("world");
root.element("tag2");
- root.close();
- assertEquals("<root><tag1/>world<tag2/></root>", buffer.toString());
+ assertContent("<root><tag1/>world<tag2/></root>");
}
@Test
- public void testQuotedText() throws IOException {
+ public void test_should_be_quoted() throws IOException {
root.text("<black&white\">");
- root.close();
- assertEquals("<root>&lt;black&amp;white&quot;&gt;</root>",
- buffer.toString());
+ assertContent("<root>&lt;black&amp;white&quot;&gt;</root>");
}
@Test
- public void testNullAttributes() throws IOException {
+ public void attr_should_ignore_call_when_value_is_null()
+ throws IOException {
root.attr("id", null);
- root.close();
- assertEquals("<root/>", buffer.toString());
+ assertContent("<root/>");
}
@Test
- public void testStringAttributes() throws IOException {
- root.attr("id", "12345").attr("quote", "<\">");
- root.close();
- assertEquals("<root id=\"12345\" quote=\"&lt;&quot;&gt;\"/>",
- buffer.toString());
+ public void attr_should_emit_string_value() throws IOException {
+ root.attr("id", "12345");
+ assertContent("<root id=\"12345\"/>");
}
@Test
- public void testIntAttributes() throws IOException {
- root.attr("missed", 0).attr("total", 123);
- root.close();
- assertEquals("<root missed=\"0\" total=\"123\"/>", buffer.toString());
+ public void attr_should_quote_string_value() throws IOException {
+ root.attr("quote", "<\">");
+ assertContent("<root quote=\"&lt;&quot;&gt;\"/>");
}
@Test
- public void testLongAttributes() throws IOException {
- root.attr("min", Long.MIN_VALUE).attr("max", Long.MAX_VALUE);
- root.close();
- assertEquals(
- "<root min=\"-9223372036854775808\" max=\"9223372036854775807\"/>",
- buffer.toString());
+ public void attr_should_emit_int_value() throws IOException {
+ root.attr("missed", 0);
+ root.attr("total", 123);
+ assertContent("<root missed=\"0\" total=\"123\"/>");
+ }
+
+ @Test
+ public void attr_should_emit_long_value() throws IOException {
+ root.attr("min", Long.MIN_VALUE);
+ root.attr("max", Long.MAX_VALUE);
+ assertContent(
+ "<root min=\"-9223372036854775808\" max=\"9223372036854775807\"/>");
}
@Test(expected = IOException.class)
- public void testInvalidAttributeOutput1() throws IOException {
+ public void attr_should_throw_exception_when_text_was_added()
+ throws IOException {
root.text("text");
root.attr("id", "12345");
}
@Test(expected = IOException.class)
- public void testInvalidAttributeOutput2() throws IOException {
+ public void attr_should_throw_exception_when_child_was_added()
+ throws IOException {
root.element("child");
root.attr("id", "12345");
}
+ private void assertContent(String expected) throws IOException {
+ assertEquals(DECL + expected, actual());
+ }
+
+ private String actual() throws IOException {
+ root.close();
+ return buffer.toString("UTF-8");
+ }
+
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLGroupVisitorTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLGroupVisitorTest.java
index fb8771ea..92f5c28f 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLGroupVisitorTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLGroupVisitorTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -13,26 +13,22 @@ package org.jacoco.report.internal.xml;
import static org.junit.Assert.assertEquals;
-import java.io.IOException;
-import java.io.StringWriter;
-
-import javax.xml.parsers.ParserConfigurationException;
+import java.io.ByteArrayOutputStream;
import org.jacoco.report.ReportStructureTestDriver;
import org.jacoco.report.xml.XMLFormatter;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
/**
* Unit tests for {@link XMLGroupVisitor}.
*/
public class XMLGroupVisitorTest {
- private XMLElement root;
+ private ReportElement root;
- private StringWriter buffer;
+ private ByteArrayOutputStream buffer;
private XMLSupport support;
@@ -42,11 +38,9 @@ public class XMLGroupVisitorTest {
@Before
public void setup() throws Exception {
- buffer = new StringWriter();
+ buffer = new ByteArrayOutputStream();
support = new XMLSupport(XMLFormatter.class);
- root = new XMLDocument("report", "-//JACOCO//DTD Report 1.0//EN",
- "report.dtd", "UTF-8", true, buffer);
- root.attr("name", "Report");
+ root = new ReportElement("Report", buffer, "UTF-8");
handler = new XMLGroupVisitor(root, null);
driver = new ReportStructureTestDriver();
}
@@ -54,16 +48,14 @@ public class XMLGroupVisitorTest {
@Test
public void testVisitBundle() throws Exception {
driver.sendBundle(handler);
- root.close();
- final Document doc = getDocument();
+ final Document doc = parseDoc();
assertEquals("bundle", support.findStr(doc, "//report/group/@name"));
}
@Test
public void testVisitGroup() throws Exception {
driver.sendGroup(handler);
- root.close();
- final Document doc = getDocument();
+ final Document doc = parseDoc();
assertEquals("group", support.findStr(doc, "//report/group/@name"));
}
@@ -71,15 +63,14 @@ public class XMLGroupVisitorTest {
public void testVisitEnd() throws Exception {
driver.sendBundle(handler);
handler.visitEnd();
- root.close();
- final Document doc = getDocument();
+ final Document doc = parseDoc();
assertEquals("2", support.findStr(doc,
"//report/counter[@type='BRANCH']/@covered"));
}
- private Document getDocument() throws SAXException, IOException,
- ParserConfigurationException {
- return support.parse(buffer.toString());
+ private Document parseDoc() throws Exception {
+ root.close();
+ return support.parse(buffer);
}
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLSupport.java b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLSupport.java
index c95e7b4b..fbf4af41 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLSupport.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLSupport.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -14,8 +14,8 @@ package org.jacoco.report.internal.xml;
import static org.junit.Assert.fail;
import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -71,13 +71,13 @@ public class XMLSupport {
return xpath;
}
- public Document parse(String document) throws SAXException, IOException,
- ParserConfigurationException {
- return builder.parse(new InputSource(new StringReader(document)));
+ public Document parse(ByteArrayOutputStream buffer)
+ throws SAXException, IOException, ParserConfigurationException {
+ return parse(buffer.toByteArray());
}
- public Document parse(byte[] document) throws SAXException, IOException,
- ParserConfigurationException {
+ public Document parse(byte[] document)
+ throws SAXException, IOException, ParserConfigurationException {
return builder
.parse(new InputSource(new ByteArrayInputStream(document)));
}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java b/org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java
index c79078e1..43157f6a 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
+ * Copyright (c) 2009, 2019 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
@@ -98,6 +98,8 @@ public class XMLFormatterTest {
assertPathMatches("org/jacoco/example", "/report/group/package/@name");
assertPathMatches("org/jacoco/example/FooClass",
"/report/group/package/class/@name");
+ assertPathMatches("FooClass.java",
+ "/report/group/package/class/@sourcefilename");
assertPathMatches("fooMethod",
"/report/group/package/class/method/@name");
@@ -132,9 +134,15 @@ public class XMLFormatterTest {
visitor.visitInfo(infos, data);
driver.sendBundle(visitor);
assertPathMatches("bundle", "/report/@name");
+
+ assertPathMatches("2", "count(/report/package)");
assertPathMatches("org/jacoco/example", "/report/package/@name");
+
+ assertPathMatches("3", "count(/report/package/class)");
assertPathMatches("org/jacoco/example/FooClass",
"/report/package/class/@name");
+
+ assertPathMatches("1", "count(/report/package/class/method)");
assertPathMatches("fooMethod", "/report/package/class/method/@name");
assertPathMatches("1", "count(/report/counter[@type='INSTRUCTION'])");
@@ -160,6 +168,38 @@ public class XMLFormatterTest {
assertPathMatches("1", "count(/report/counter[@type='CLASS'])");
assertPathMatches("0", "report/counter[@type='CLASS']/@missed");
assertPathMatches("1", "report/counter[@type='CLASS']/@covered");
+
+ assertPathMatches("2",
+ "count(report/package[@name='org/jacoco/example']/sourcefile)");
+ assertPathMatches("3", "count(report/package/sourcefile/line)");
+ assertPathMatches("1",
+ "report/package/sourcefile[@name='FooClass.java']/line[1]/@nr");
+ assertPathMatches("3",
+ "report/package/sourcefile[@name='FooClass.java']/line[1]/@mi");
+ assertPathMatches("2",
+ "report/package/sourcefile[@name='FooClass.java']/line[2]/@nr");
+ assertPathMatches("2",
+ "report/package/sourcefile[@name='FooClass.java']/line[2]/@cb");
+ // empty line is skipped
+ assertPathMatches("4",
+ "report/package/sourcefile[@name='FooClass.java']/line[3]/@nr");
+ assertPathMatches("4",
+ "report/package/sourcefile[@name='FooClass.java']/line[3]/@mi");
+
+ assertPathMatches("0", "count(/report/package[@name='empty']/counter)");
+
+ assertPathMatches("1", "count(/report/package[@name='empty']/class)");
+ assertPathMatches("empty/Empty",
+ "/report/package[@name='empty']/class/@name");
+ assertPathMatches("0",
+ "count(report/package[@name='empty']/class/*)");
+
+ assertPathMatches("1",
+ "count(/report/package[@name='empty']/sourcefile)");
+ assertPathMatches("Empty.java",
+ "report/package[@name='empty']/sourcefile/@name");
+ assertPathMatches("0",
+ "count(report/package[@name='empty']/sourcefile/*)");
}
@Test
@@ -167,8 +207,8 @@ public class XMLFormatterTest {
final IReportVisitor visitor = formatter.createVisitor(output);
visitor.visitInfo(infos, data);
driver.sendBundle(visitor);
- final BufferedReader reader = new BufferedReader(new InputStreamReader(
- output.getContentsAsStream(), "UTF-8"));
+ final BufferedReader reader = new BufferedReader(
+ new InputStreamReader(output.getContentsAsStream(), "UTF-8"));
final String line = reader.readLine();
assertTrue(line,
line.startsWith("<?xml version=\"1.0\" encoding=\"UTF-8\""));
@@ -180,8 +220,8 @@ public class XMLFormatterTest {
final IReportVisitor visitor = formatter.createVisitor(output);
visitor.visitInfo(infos, data);
driver.sendBundle(visitor);
- final BufferedReader reader = new BufferedReader(new InputStreamReader(
- output.getContentsAsStream(), "UTF-16"));
+ final BufferedReader reader = new BufferedReader(
+ new InputStreamReader(output.getContentsAsStream(), "UTF-16"));
final String line = reader.readLine();
assertTrue(line,
line.startsWith("<?xml version=\"1.0\" encoding=\"UTF-16\""));
@@ -190,7 +230,7 @@ public class XMLFormatterTest {
private void assertPathMatches(String expected, String path)
throws Exception {
XMLSupport support = new XMLSupport(XMLFormatter.class);
- Document document = support.parse(output.toByteArray());
+ Document document = support.parse(output);
assertEquals(expected, support.findStr(document, path));
}