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: + +image 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://codeclou.github.io/java-junit-xml-merger/img/github-product-logo-java-merger.png)](https://github.com/codeclou/java-junit-xml-merger) -[![](https://codeclou.github.io/doc/badges/generated/test-coverage-100.svg?v2)](https://codeclou.github.io/java-junit-xml-merger/test-coverage/1.0.1/) +![](https://codeclou.github.io/doc/badges/generated/test-coverage-100.svg?v2) + ---- 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