diff --git a/.editorconfig b/.editorconfig
index 6673f15..2772d70 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -17,10 +17,12 @@ charset = utf-8
[*.xml]
indent_style = space
indent_size = 2
+max_line_length = 150
[*.java]
indent_style = space
indent_size = 4
+max_line_length = 250
# Tab indentation (no size specified)
[Makefile]
diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml
index 6a12ab9..aa50ee0 100644
--- a/.github/workflows/build-on-pull-request.yml
+++ b/.github/workflows/build-on-pull-request.yml
@@ -1,17 +1,12 @@
name: build and test on pull request
on:
pull_request:
- branches: [master]
+ branches: [main]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- - name: Malware Scanner # https://github.com/dell/common-github-actions/blob/main/malware-scanner/README.md
- uses: dell/common-github-actions/malware-scanner@main
- with:
- directories: .
- options: -ri
- name: Set up JDK 8 for x64
uses: actions/setup-java@v4
with:
diff --git a/.github/workflows/scan-codecoverage.yml b/.github/workflows/scan-codecoverage.yml
new file mode 100644
index 0000000..4d4452c
--- /dev/null
+++ b/.github/workflows/scan-codecoverage.yml
@@ -0,0 +1,26 @@
+name: scan-codecoverage
+on:
+ pull_request:
+ branches: [main]
+jobs:
+ scan-codecoverage:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v5
+ - name: Set up JDK 21 for x64
+ uses: actions/setup-java@v4
+ with:
+ java-version: "21"
+ distribution: "temurin"
+ architecture: x64
+ - run: mvn test
+ - run: mvn jacoco:report
+ - run:
+ - run: zip -r coverage-report-html.zip jacoco/*
+ working-directory: target/site/
+ - uses: actions/upload-artifact@v4
+ with:
+ name: code-coverage
+ path: target/site/coverage-report-html.zip
+ # runs jacoco check which has 100% coverage rules. see pom.xml
+ - run: mvn verify
diff --git a/.github/workflows/scan-malware.yml b/.github/workflows/scan-malware.yml
index 3798846..651e9d3 100644
--- a/.github/workflows/scan-malware.yml
+++ b/.github/workflows/scan-malware.yml
@@ -1,7 +1,7 @@
name: scan-malware
on:
pull_request:
- branches: [master]
+ branches: [main]
jobs:
scan-malware:
runs-on: ubuntu-latest
diff --git a/.github/workflows/scan-semgrep.yml b/.github/workflows/scan-semgrep.yml
index 73b5615..7f02169 100644
--- a/.github/workflows/scan-semgrep.yml
+++ b/.github/workflows/scan-semgrep.yml
@@ -1,9 +1,7 @@
name: scan-semgrep
on:
- pull_request: {}
- workflow_dispatch: {}
- merge_group:
- types: [checks_requested]
+ pull_request:
+ branches: [main]
jobs:
scan-semgrep:
name: semgrep/ci
diff --git a/.gitignore b/.gitignore
index 1a0dfb1..2bd48f4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@ output.xml
.settings
.DS_Store
.dccache
+bar.xml
diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md
index 7b6f1d8..5cc0489 100644
--- a/DEVELOPMENT.md
+++ b/DEVELOPMENT.md
@@ -4,15 +4,21 @@
```
mvn package -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true
-java -jar target/java-junit-xml-merger-0.0.1-jar-with-dependencies.jar
+java -jar target/java-junit-xml-merger.jar
```
### Testcoverage
-[Run OpenClover](http://openclover.org/) with maven:
+We use jacoco and have enforced 100% coverage
```bash
-mvn clean clover:setup test clover:aggregate clover:clover
+mvn clean
+mvn test
+mvn verify
+mvn jacoco:report
```
-Now look into `target/site/clover/`
+Now look into `target/site/jacoco/` and open `index.html` in the browser.
+Should look like so:
+
+
diff --git a/Jenkinsfile b/Jenkinsfile
deleted file mode 100644
index e69de29..0000000
diff --git a/README.md b/README.md
index 0b1fe89..c5fab89 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,8 @@
[](https://github.com/codeclou/java-junit-xml-merger)
-[](https://codeclou.github.io/java-junit-xml-merger/test-coverage/1.0.1/)
+
+
----
diff --git a/pom.xml b/pom.xml
index 302c511..01449db 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,10 +1,13 @@
-
-
+
+
4.0.0
io.codeclou
java-junit-xml-merger
- 1.2.0
+ 1.2.1
codeclou.io
http://codeclou.io/
@@ -22,7 +25,8 @@
commons-cli
commons-cli
- 1.4
+ 1.11.0
+ compile
junit
@@ -33,19 +37,7 @@
com.openpojo
openpojo
- 0.8.6
- test
-
-
- org.powermock
- powermock-module-junit4
- ${powermock.version}
- test
-
-
- org.powermock
- powermock-api-mockito
- ${powermock.version}
+ 0.9.1
test
@@ -54,20 +46,9 @@
1.10.19
test
-
- org.powermock
- powermock-api-mockito-common
- 1.7.0
- test
-
-
- org.openclover
- clover-maven-plugin
- 4.2.0
-
maven-assembly-plugin
3.1.0
@@ -93,10 +74,59 @@
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.14
+
+
+ prepare-agent
+
+ prepare-agent
+
+
+
+ report
+
+ report
+
+
+
+ XML
+
+
+
+
+ jacoco-check
+
+ check
+
+
+
+
+ BUNDLE
+
+
+ INSTRUCTION
+ COVEREDRATIO
+ 1
+
+
+
+ CLASS
+ MISSEDCOUNT
+ 0
+
+
+
+
+
+
+
+
- 1.7.0
UTF-8
1.8
1.8
diff --git a/src/test/java/io/codeclou/java/junit/xml/merger/JunitXmlParserTest.java b/src/test/java/io/codeclou/java/junit/xml/merger/JunitXmlParserTest.java
index 5ed077a..946732b 100644
--- a/src/test/java/io/codeclou/java/junit/xml/merger/JunitXmlParserTest.java
+++ b/src/test/java/io/codeclou/java/junit/xml/merger/JunitXmlParserTest.java
@@ -23,17 +23,16 @@
*/
package io.codeclou.java.junit.xml.merger;
-import io.codeclou.java.junit.xml.merger.model.TestSuite;
-import org.junit.Test;
-import org.mockito.internal.util.reflection.Whitebox;
+import static junit.framework.TestCase.assertFalse;
+import static org.junit.Assert.*;
+import io.codeclou.java.junit.xml.merger.model.TestSuite;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-
-import static junit.framework.TestCase.assertFalse;
-import static org.junit.Assert.*;
+import org.junit.Test;
+import org.mockito.internal.util.reflection.Whitebox;
public class JunitXmlParserTest {
@@ -53,7 +52,7 @@ public void testParseSuites() throws Exception {
assertFalse(c.isEmpty());
assertEquals(2, c.size());
assertEquals(l.get(0).getName(), "ut.io.codeclou.customfield.editor.model.rest.SortModelTestOne");
- assertEquals(l.get(1). getName(), "ut.io.codeclou.customfield.editor.model.rest.SortModelTestTwo");
+ assertEquals(l.get(1).getName(), "ut.io.codeclou.customfield.editor.model.rest.SortModelTestTwo");
}
@Test
@@ -93,7 +92,7 @@ public void testRunInvalidInput1() throws Exception {
@Test
public void testRunInvalidInput2() throws Exception {
- String[] args = {"-i=foo"};
+ String[] args = { "-i=foo" };
JunitXmlParser parser = new JunitXmlParser();
parser.run(args);
Boolean hasCmdLineParameterErrors = (Boolean) Whitebox.getInternalState(parser, "hasCmdLineParameterErrors");
@@ -102,16 +101,28 @@ public void testRunInvalidInput2() throws Exception {
@Test
public void testRunInvalidInput3() throws Exception {
- String[] args = {"-i=foo", "-o=bar.xml"};
+ String[] args = { "-i=foo", "-o=bar.xml" };
JunitXmlParser parser = new JunitXmlParser();
parser.run(args);
Boolean hasCmdLineParameterErrors = (Boolean) Whitebox.getInternalState(parser, "hasCmdLineParameterErrors");
assertTrue(hasCmdLineParameterErrors);
}
+ @Test
+ public void testRunInvalidXmlFiles() throws Exception {
+ // GIVEN
+ String[] args = { "-i=src/test/resources/invalid-files/", "-o=bar.xml", "-s=foo bar" };
+ JunitXmlParser parser = new JunitXmlParser();
+ // WHEN
+ parser.run(args);
+ // THEN
+ Boolean hasCmdLineParameterErrors = (Boolean) Whitebox.getInternalState(parser, "hasCmdLineParameterErrors");
+ assertFalse(hasCmdLineParameterErrors);
+ }
+
@Test
public void testRunValidInputWithInvalidFolders() throws Exception {
- String[] args = {"-i=foo", "-o=?x/bar.xml", "-s=foo"};
+ String[] args = { "-i=foo", "-o=?x/bar.xml", "-s=foo" };
JunitXmlParser parser = new JunitXmlParser();
parser.run(args);
Boolean hasFileNotFoundErrors = (Boolean) Whitebox.getInternalState(parser, "hasFileNotFoundErrors");
@@ -120,7 +131,7 @@ public void testRunValidInputWithInvalidFolders() throws Exception {
@Test
public void testRunValidInputWithValidFolders() throws Exception {
- String[] args = {"-i=src/test/resources/", "-o=output.xml", "-s=foo bar"};
+ String[] args = { "-i=src/test/resources/", "-o=output.xml", "-s=foo bar" };
JunitXmlParser parser = new JunitXmlParser();
parser.run(args);
Boolean hasCmdLineParameterErrors = (Boolean) Whitebox.getInternalState(parser, "hasCmdLineParameterErrors");
@@ -133,7 +144,7 @@ public void testRunValidInputWithValidFolders() throws Exception {
public void testRunValidInputWithEmptyInputFolder() throws Exception {
File emptyDir = new File("src/test/resources/empty/");
emptyDir.mkdir();
- String[] args = {"-i=src/test/resources/empty/", "-o=output.xml", "-s=foo bar"};
+ String[] args = { "-i=src/test/resources/empty/", "-o=output.xml", "-s=foo bar" };
JunitXmlParser parser = new JunitXmlParser();
parser.run(args);
Boolean hasCmdLineParameterErrors = (Boolean) Whitebox.getInternalState(parser, "hasCmdLineParameterErrors");
diff --git a/src/test/java/io/codeclou/java/junit/xml/merger/MergerTest.java b/src/test/java/io/codeclou/java/junit/xml/merger/MergerTest.java
index 142b337..7bec27b 100644
--- a/src/test/java/io/codeclou/java/junit/xml/merger/MergerTest.java
+++ b/src/test/java/io/codeclou/java/junit/xml/merger/MergerTest.java
@@ -23,30 +23,18 @@
*/
package io.codeclou.java.junit.xml.merger;
-import org.junit.Before;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-import static org.powermock.api.mockito.PowerMockito.whenNew;
-
-@RunWith(PowerMockRunner.class)
public class MergerTest {
- @Mock
- private JunitXmlParser junitXmlParser;
-
- @Before
- public void init() throws Exception {
- whenNew(JunitXmlParser.class).withNoArguments().thenReturn(junitXmlParser);
- }
-
@Test
- @PrepareForTest({Merger.class})
public void testMergerValidInput() throws Exception {
- String[] args = {"-i foo", "-i bar"};
+ String[] args = { "-i foo", "-i bar" };
Merger.main(args);
}
+
+ @Test
+ public void testCoverage() throws Exception {
+ new Merger();
+ }
}
diff --git a/src/test/resources/invalid-files/testsuites.xml b/src/test/resources/invalid-files/testsuites.xml
new file mode 100644
index 0000000..8afac44
--- /dev/null
+++ b/src/test/resources/invalid-files/testsuites.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/test/resources/invalid-files/testsuites_invalid_xml.xml b/src/test/resources/invalid-files/testsuites_invalid_xml.xml
new file mode 100644
index 0000000..a5cc070
--- /dev/null
+++ b/src/test/resources/invalid-files/testsuites_invalid_xml.xml
@@ -0,0 +1 @@
+testsuites fails
diff --git a/src/test/resources/testsuites_invalid_xml.xml b/src/test/resources/testsuites_invalid_xml.xml
new file mode 100644
index 0000000..a5cc070
--- /dev/null
+++ b/src/test/resources/testsuites_invalid_xml.xml
@@ -0,0 +1 @@
+testsuites fails