From 706236c45e2c6758f071692c8d697b0199cb9dd8 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 8 Apr 2024 15:17:42 -0700 Subject: [PATCH 01/82] Bumped PIT version to 1.16.0 --- examples/lib/bld/bld-wrapper.properties | 2 +- .../com.example/ExamplesLib.java.html | 34 ++++++------ .../com.example/ExamplesTest.java.html | 54 +++++++++---------- .../bld/java/com/example/ExamplesBuild.java | 2 + .../bld/extension/PitestOperationBuild.java | 6 +-- 5 files changed, 50 insertions(+), 48 deletions(-) diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 92f5727..a7517d8 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,6 +1,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extensions=com.uwyn.rife2:bld-pitest:0.9.5 +bld.extensions=com.uwyn.rife2:bld-pitest:0.9.6 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.downloadLocation= bld.sourceDirectories= diff --git a/examples/reports/mutations/com.example/ExamplesLib.java.html b/examples/reports/mutations/com.example/ExamplesLib.java.html index 2b109b5..d742ae5 100644 --- a/examples/reports/mutations/com.example/ExamplesLib.java.html +++ b/examples/reports/mutations/com.example/ExamplesLib.java.html @@ -15,12 +15,12 @@ - + 1 - + @@ -30,12 +30,12 @@ - + 2 - + @@ -45,12 +45,12 @@ - + 3 - + @@ -60,12 +60,12 @@ - + 4 - + @@ -75,12 +75,12 @@ - + 5 -1 +1 1. getMessage : replaced return value with "" for com/example/ExamplesLib::getMessage → KILLED
@@ -92,12 +92,12 @@ - + 6 - +
@@ -107,12 +107,12 @@ - + 7 - + @@ -124,11 +124,11 @@

Mutations

-5 +5 - +

1.1
Location : getMessage
Killed by : com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()]
replaced return value with "" for com/example/ExamplesLib::getMessage → KILLED

@@ -155,7 +155,7 @@

Tests examined


diff --git a/examples/reports/mutations/com.example/ExamplesTest.java.html b/examples/reports/mutations/com.example/ExamplesTest.java.html index 116d66c..a00ebe5 100644 --- a/examples/reports/mutations/com.example/ExamplesTest.java.html +++ b/examples/reports/mutations/com.example/ExamplesTest.java.html @@ -15,12 +15,12 @@ -
+ 1 - + @@ -30,12 +30,12 @@ - + 2 - + @@ -45,12 +45,12 @@ - + 3 - + @@ -60,12 +60,12 @@ - + 4 - + @@ -75,12 +75,12 @@ - + 5 - + @@ -90,12 +90,12 @@ - + 6 - + @@ -105,12 +105,12 @@ - + 7 - + @@ -120,12 +120,12 @@ - + 8 - + @@ -135,12 +135,12 @@ - + 9 - + @@ -150,12 +150,12 @@ - + 10 -1 +1 1. verifyHello : removed call to org/junit/jupiter/api/Assertions::assertEquals → SURVIVED
@@ -167,12 +167,12 @@ - + 11 - +
@@ -182,12 +182,12 @@ - + 12 - + @@ -199,11 +199,11 @@

Mutations

-10 +10 - +

1.1
Location : verifyHello
Killed by : none
removed call to org/junit/jupiter/api/Assertions::assertEquals → SURVIVED

@@ -230,7 +230,7 @@

Tests examined


diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index e77ab25..3b2ec9d 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -19,6 +19,8 @@ public class ExamplesBuild extends Project { name = "Examples"; version = version(0, 1, 0); + javaRelease = 17; + downloadSources = true; autoDownloadPurge = true; diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index e59dff8..957f34c 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -35,14 +35,14 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(0, 9, 5); + version = version(0, 9, 6); javaRelease = 17; downloadSources = true; autoDownloadPurge = true; repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); - var pitest = version(1, 15, 8); + var pitest = version(1, 16, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(1, 9, 0))); scope(test) @@ -77,7 +77,7 @@ public class PitestOperationBuild extends Project { .license( new PublishLicense() .name("The Apache License, Version 2.0") - .url("http://www.apache.org/licenses/LICENSE-2.0.txt") + .url("https://www.apache.org/licenses/LICENSE-2.0.txt") ) .scm( new PublishScm() From 150d02edbf0428642e219b277bfa9f744517d261 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 8 Apr 2024 15:17:42 -0700 Subject: [PATCH 02/82] Bumped PIT version to 1.16.0 --- README.md | 4 +- examples/lib/bld/bld-wrapper.properties | 2 +- .../com.example/ExamplesLib.java.html | 36 ++++++------ .../com.example/ExamplesTest.java.html | 56 +++++++++---------- .../reports/mutations/com.example/index.html | 2 +- examples/reports/mutations/index.html | 9 ++- .../bld/java/com/example/ExamplesBuild.java | 6 +- .../bld/extension/PitestOperationBuild.java | 6 +- 8 files changed, 63 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index 0702d76..f51aedb 100755 --- a/README.md +++ b/README.md @@ -40,8 +40,8 @@ Don't forget to add the Pitest `test` dependencies to your build file, as they a ```java repositories = List.of(MAVEN_CENTRAL); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 15, 8))) - .include(dependency("org.pitest", "pitest-command-line", version(1, 15, 8))) + .include(dependency("org.pitest", "pitest", version(1, 16, 0))) + .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 0))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.pitest", "pitest-testng-plugin", version(1, 0, 0))); ``` diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 92f5727..a7517d8 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,6 +1,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extensions=com.uwyn.rife2:bld-pitest:0.9.5 +bld.extensions=com.uwyn.rife2:bld-pitest:0.9.6 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.downloadLocation= bld.sourceDirectories= diff --git a/examples/reports/mutations/com.example/ExamplesLib.java.html b/examples/reports/mutations/com.example/ExamplesLib.java.html index 2b109b5..dbc4c42 100644 --- a/examples/reports/mutations/com.example/ExamplesLib.java.html +++ b/examples/reports/mutations/com.example/ExamplesLib.java.html @@ -15,12 +15,12 @@ -
+ 1 - + @@ -30,12 +30,12 @@ - + 2 - + @@ -45,12 +45,12 @@ - + 3 - + @@ -60,12 +60,12 @@ - + 4 - + @@ -75,12 +75,12 @@ - + 5 -1 +1 1. getMessage : replaced return value with "" for com/example/ExamplesLib::getMessage → KILLED
@@ -92,12 +92,12 @@ - + 6 - +
@@ -107,12 +107,12 @@ - + 7 - + @@ -124,11 +124,11 @@

Mutations

-5 +5 - +

1.1
Location : getMessage
Killed by : com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()]
replaced return value with "" for com/example/ExamplesLib::getMessage → KILLED

@@ -155,12 +155,12 @@

Tests examined


-Report generated by
PIT 1.15.8 +Report generated by PIT 1.16.0 \ No newline at end of file diff --git a/examples/reports/mutations/com.example/ExamplesTest.java.html b/examples/reports/mutations/com.example/ExamplesTest.java.html index 116d66c..efd8fe9 100644 --- a/examples/reports/mutations/com.example/ExamplesTest.java.html +++ b/examples/reports/mutations/com.example/ExamplesTest.java.html @@ -15,12 +15,12 @@ - + 1 - + @@ -30,12 +30,12 @@ - + 2 - + @@ -45,12 +45,12 @@ - + 3 - + @@ -60,12 +60,12 @@ - + 4 - + @@ -75,12 +75,12 @@ - + 5 - + @@ -90,12 +90,12 @@ - + 6 - + @@ -105,12 +105,12 @@ - + 7 - + @@ -120,12 +120,12 @@ - + 8 - + @@ -135,12 +135,12 @@ - + 9 - + @@ -150,12 +150,12 @@ - + 10 -1 +1 1. verifyHello : removed call to org/junit/jupiter/api/Assertions::assertEquals → SURVIVED
@@ -167,12 +167,12 @@ - + 11 - +
@@ -182,12 +182,12 @@ - + 12 - + @@ -199,11 +199,11 @@

Mutations

-10 +10 - +

1.1
Location : verifyHello
Killed by : none
removed call to org/junit/jupiter/api/Assertions::assertEquals → SURVIVED

@@ -230,12 +230,12 @@

Tests examined


-Report generated by
PIT 1.15.8 +Report generated by PIT 1.16.0 \ No newline at end of file diff --git a/examples/reports/mutations/com.example/index.html b/examples/reports/mutations/com.example/index.html index 51caf89..d92a98f 100644 --- a/examples/reports/mutations/com.example/index.html +++ b/examples/reports/mutations/com.example/index.html @@ -63,7 +63,7 @@
-Report generated by PIT 1.15.8 +Report generated by PIT 1.16.0 \ No newline at end of file diff --git a/examples/reports/mutations/index.html b/examples/reports/mutations/index.html index 69a779a..f5618d3 100644 --- a/examples/reports/mutations/index.html +++ b/examples/reports/mutations/index.html @@ -56,14 +56,17 @@ +
-Report generated by PIT 1.15.8 + + +Report generated by PIT 1.16.0

-Enhanced functionality available at arcmutate.com - + Enhanced functionality available at arcmutate.com \ No newline at end of file diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index e77ab25..7af9917 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -19,14 +19,16 @@ public class ExamplesBuild extends Project { name = "Examples"; version = version(0, 1, 0); + javaRelease = 17; + downloadSources = true; autoDownloadPurge = true; repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 15, 8))) - .include(dependency("org.pitest", "pitest-command-line", version(1, 15, 8))) + .include(dependency("org.pitest", "pitest", version(1, 16, 0))) + .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 0))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2))); diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index e59dff8..957f34c 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -35,14 +35,14 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(0, 9, 5); + version = version(0, 9, 6); javaRelease = 17; downloadSources = true; autoDownloadPurge = true; repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); - var pitest = version(1, 15, 8); + var pitest = version(1, 16, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(1, 9, 0))); scope(test) @@ -77,7 +77,7 @@ public class PitestOperationBuild extends Project { .license( new PublishLicense() .name("The Apache License, Version 2.0") - .url("http://www.apache.org/licenses/LICENSE-2.0.txt") + .url("https://www.apache.org/licenses/LICENSE-2.0.txt") ) .scm( new PublishScm() From ba1d7143b9cb3ed87b9c02043316dbb3f158c34e Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 8 May 2024 18:16:50 -0700 Subject: [PATCH 03/82] Bumped bld to version 1.9.1 --- .idea/libraries/bld.xml | 4 ++-- .vscode/settings.json | 2 +- README.md | 2 +- examples/.idea/libraries/bld.xml | 4 ++-- examples/.vscode/settings.json | 2 +- examples/lib/bld/bld-wrapper.jar | Bin 27319 -> 27319 bytes examples/lib/bld/bld-wrapper.properties | 2 +- lib/bld/bld-wrapper.jar | Bin 27319 -> 27319 bytes lib/bld/bld-wrapper.properties | 2 +- .../bld/extension/PitestOperationBuild.java | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 0b615c1..a2969be 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index 9e8368e..d136e4d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-1.9.0.jar", + "${HOME}/.bld/dist/bld-1.9.1.jar", "lib/**/*.jar" ] } diff --git a/README.md b/README.md index f51aedb..d58c452 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) -[![bld](https://img.shields.io/badge/1.9.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/1.9.1-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/bld-pitest/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-pitest) [![Snapshot](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/snapshots/com/uwyn/rife2/bld-pitest/maven-metadata.xml?label=snapshot)](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-pitest) [![GitHub CI](https://github.com/rife2/bld-pitest/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/bld-pitest/actions/workflows/bld.yml) diff --git a/examples/.idea/libraries/bld.xml b/examples/.idea/libraries/bld.xml index 0b615c1..a2969be 100644 --- a/examples/.idea/libraries/bld.xml +++ b/examples/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/examples/.vscode/settings.json b/examples/.vscode/settings.json index 9e8368e..d136e4d 100644 --- a/examples/.vscode/settings.json +++ b/examples/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-1.9.0.jar", + "${HOME}/.bld/dist/bld-1.9.1.jar", "lib/**/*.jar" ] } diff --git a/examples/lib/bld/bld-wrapper.jar b/examples/lib/bld/bld-wrapper.jar index e8151771783f2379f035bbdc7afea15ebd09faaa..c0de401aee76455c9e8acfc7894e646b5e9d253b 100644 GIT binary patch delta 166 zcmdmfm2vx3M&1B#W)=|!4h{~6;GV@3dFz;g)W$v~V-UT0vvD^QnBi!~t_Nm#r<`X5 zGi1{Y!BUe0GZYnB7y`W6IrKB%X0tOeFt7q~fHxzP2m{>U$&)jjLE0wY%VOdrXNgNSGOa{$#vfXtd)lVuG66@E6% delta 166 zcmdmfm2vx3M&1B#W)=|!4h{~6NhP@xdFz;g)W$v~V-UT0vvD^QnBi!~t_Nm#r<`X5 zGi1{Y!BUe0GZYmW7y`W6Id(?Al3{0HU|DV?# diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index a7517d8..22a4012 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -4,4 +4,4 @@ bld.extensions=com.uwyn.rife2:bld-pitest:0.9.6 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.downloadLocation= bld.sourceDirectories= -bld.version=1.9.0 +bld.version=1.9.1 diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 82762f1dd24fca63ea5add2e5d08292f16e8a107..2ba556c719e1d2b2ced574254672c3e9fb4b32e0 100644 GIT binary patch delta 166 zcmdmfm2vx3M&1B#W)=|!4h{|mm!8EFdFz;g)W$v~V-UT0vvD^QnBi!~t_Nm#r<`X5 zGi1{Y!BUe0GZYnB7y`W6IrKB%X0tOeFt7q~fHxzP2m{>U$&)jjLE0wY%VOdrXNgNSGOa{$#vfXtd)lVuG6)1o!{ delta 166 zcmdmfm2vx3M&1B#W)=|!4h{~6i6yxcdFz;g)W$v~V-UT0vvD^QnBi!~t_Nm#r<`X5 zGi1{Y!BUe0GZYmW7y`W6Id(?Al3{0HU| Date: Wed, 8 May 2024 18:17:54 -0700 Subject: [PATCH 04/82] Bumped PMD extension to version 0.9.9 --- lib/bld/bld-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index f882472..cab667f 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,6 +1,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extension-pmd=com.uwyn.rife2:bld-pmd:0.9.8 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:0.9.9 bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.5 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.downloadLocation= From 87a55200b334e72a208f67c9fe41f940193ae1bc Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 8 May 2024 18:19:08 -0700 Subject: [PATCH 05/82] Bumped PIT to version 1.6.1 --- README.md | 4 +- examples/lib/bld/bld-wrapper.properties | 2 +- .../com.example/ExamplesLib.java.html | 36 ++++++------ .../com.example/ExamplesTest.java.html | 56 +++++++++---------- .../reports/mutations/com.example/index.html | 2 +- examples/reports/mutations/index.html | 2 +- .../bld/java/com/example/ExamplesBuild.java | 4 +- .../bld/extension/PitestOperationBuild.java | 4 +- 8 files changed, 55 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index d58c452..2f93ecd 100755 --- a/README.md +++ b/README.md @@ -40,8 +40,8 @@ Don't forget to add the Pitest `test` dependencies to your build file, as they a ```java repositories = List.of(MAVEN_CENTRAL); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 16, 0))) - .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 0))) + .include(dependency("org.pitest", "pitest", version(1, 16, 1))) + .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 1))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.pitest", "pitest-testng-plugin", version(1, 0, 0))); ``` diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 22a4012..9231878 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,6 +1,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extensions=com.uwyn.rife2:bld-pitest:0.9.6 +bld.extensions=com.uwyn.rife2:bld-pitest:0.9.7 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.downloadLocation= bld.sourceDirectories= diff --git a/examples/reports/mutations/com.example/ExamplesLib.java.html b/examples/reports/mutations/com.example/ExamplesLib.java.html index dbc4c42..ad08c1a 100644 --- a/examples/reports/mutations/com.example/ExamplesLib.java.html +++ b/examples/reports/mutations/com.example/ExamplesLib.java.html @@ -15,12 +15,12 @@ - + 1 - + @@ -30,12 +30,12 @@ - + 2 - + @@ -45,12 +45,12 @@ - + 3 - + @@ -60,12 +60,12 @@ - + 4 - + @@ -75,12 +75,12 @@ - + 5 -1 +1 1. getMessage : replaced return value with "" for com/example/ExamplesLib::getMessage → KILLED
@@ -92,12 +92,12 @@ - + 6 - +
@@ -107,12 +107,12 @@ - + 7 - + @@ -124,11 +124,11 @@

Mutations

-5 +5 - +

1.1
Location : getMessage
Killed by : com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()]
replaced return value with "" for com/example/ExamplesLib::getMessage → KILLED

@@ -155,12 +155,12 @@

Tests examined

    -
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (7 ms)
  • +
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (9 ms)

-Report generated by
PIT 1.16.0 +Report generated by PIT 1.16.1 \ No newline at end of file diff --git a/examples/reports/mutations/com.example/ExamplesTest.java.html b/examples/reports/mutations/com.example/ExamplesTest.java.html index efd8fe9..e242345 100644 --- a/examples/reports/mutations/com.example/ExamplesTest.java.html +++ b/examples/reports/mutations/com.example/ExamplesTest.java.html @@ -15,12 +15,12 @@ - + 1 - + @@ -30,12 +30,12 @@ - + 2 - + @@ -45,12 +45,12 @@ - + 3 - + @@ -60,12 +60,12 @@ - + 4 - + @@ -75,12 +75,12 @@ - + 5 - + @@ -90,12 +90,12 @@ - + 6 - + @@ -105,12 +105,12 @@ - + 7 - + @@ -120,12 +120,12 @@ - + 8 - + @@ -135,12 +135,12 @@ - + 9 - + @@ -150,12 +150,12 @@ - + 10 -1 +1 1. verifyHello : removed call to org/junit/jupiter/api/Assertions::assertEquals → SURVIVED
@@ -167,12 +167,12 @@ - + 11 - +
@@ -182,12 +182,12 @@ - + 12 - + @@ -199,11 +199,11 @@

Mutations

-10 +10 - +

1.1
Location : verifyHello
Killed by : none
removed call to org/junit/jupiter/api/Assertions::assertEquals → SURVIVED

@@ -230,12 +230,12 @@

Tests examined

    -
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (7 ms)
  • +
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (9 ms)

-Report generated by
PIT 1.16.0 +Report generated by PIT 1.16.1 \ No newline at end of file diff --git a/examples/reports/mutations/com.example/index.html b/examples/reports/mutations/com.example/index.html index d92a98f..0268516 100644 --- a/examples/reports/mutations/com.example/index.html +++ b/examples/reports/mutations/com.example/index.html @@ -63,7 +63,7 @@
-Report generated by PIT 1.16.0 +Report generated by PIT 1.16.1 \ No newline at end of file diff --git a/examples/reports/mutations/index.html b/examples/reports/mutations/index.html index f5618d3..f069fe7 100644 --- a/examples/reports/mutations/index.html +++ b/examples/reports/mutations/index.html @@ -62,7 +62,7 @@
-Report generated by PIT 1.16.0 +Report generated by PIT 1.16.1

diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index 7af9917..885c188 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -27,8 +27,8 @@ public class ExamplesBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 16, 0))) - .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 0))) + .include(dependency("org.pitest", "pitest", version(1, 16, 1))) + .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 1))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2))); diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 0d3bb1e..549099b 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -35,14 +35,14 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(0, 9, 6); + version = version(0, 9, 7); javaRelease = 17; downloadSources = true; autoDownloadPurge = true; repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); - var pitest = version(1, 16, 0); + var pitest = version(1, 16, 1); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(1, 9, 1))); scope(test) From e19b8de8030ebc8e51e5ad5463f92c6c4c99d7f1 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 26 May 2024 17:08:32 -0700 Subject: [PATCH 06/82] Added missing parameters and associated tests --- .../bld/extension/PitestOperationBuild.java | 4 +- .../rife/bld/extension/PitestOperation.java | 166 ++++++++++++-- .../bld/extension/PitestOperationTest.java | 211 +++++++++++++++++- 3 files changed, 359 insertions(+), 22 deletions(-) diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 549099b..3e1f722 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -35,7 +35,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(0, 9, 7); + version = version(0, 9, 8, "SNAPSHOT"); javaRelease = 17; downloadSources = true; @@ -51,7 +51,7 @@ public class PitestOperationBuild extends Project { .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2))) - .include(dependency("org.assertj", "assertj-core", version(3, 25, 3))); + .include(dependency("org.assertj", "assertj-core", version(3, 26, 0))); javadocOperation() .javadocOptions() diff --git a/src/main/java/rife/bld/extension/PitestOperation.java b/src/main/java/rife/bld/extension/PitestOperation.java index 1f32154..f4b737f 100644 --- a/src/main/java/rife/bld/extension/PitestOperation.java +++ b/src/main/java/rife/bld/extension/PitestOperation.java @@ -293,15 +293,13 @@ public class PitestOperation extends AbstractProcessOperation { } /** - * List of globs to match against test class names. Matching tests will not be run (note if a test suite includes - * an excluded class, then it will “leak” back in). + * JUnit4 runners to exclude. * - * @param excludedTest one ore more excluded tests + * @param runners the runners * @return this operation instance - * @see #excludedTests(Collection) */ - public PitestOperation excludedTests(String... excludedTest) { - options.put("--excludedTests", String.join(",", excludedTest)); + public PitestOperation excludedRunners(String runners) { + options.put("--excludedRunners", runners); return this; } @@ -309,13 +307,26 @@ public class PitestOperation extends AbstractProcessOperation { * List of globs to match against test class names. Matching tests will not be run (note if a test suite includes * an excluded class, then it will “leak” back in). * - * @param excludedTests the excluded tests + * @param testClasses one or more excluded tests * @return this operation instance - * @see #excludedTests(String...) + * @see #excludedTestClasses(Collection) */ - public PitestOperation excludedTests(Collection excludedTests) { - options.put("--excludedTests", - String.join(",", excludedTests.stream().filter(this::isNotBlank).toList())); + public PitestOperation excludedTestClasses(String... testClasses) { + options.put("--excludedTestClasses", String.join(",", testClasses)); + return this; + } + + /** + * List of globs to match against test class names. Matching tests will not be run (note if a test suite includes + * an excluded class, then it will “leak” back in). + * + * @param testClasses the excluded tests + * @return this operation instance + * @see #excludedTestClasses(String...) + */ + public PitestOperation excludedTestClasses(Collection testClasses) { + options.put("--excludedTestClasses", + String.join(",", testClasses.stream().filter(this::isNotBlank).toList())); return this; } @@ -420,6 +431,21 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * Whether to create a full mutation matrix + * + * @param isFullMutationMatrix {@code true} or {@code false} + * @return this operation instance + */ + public PitestOperation fullMutationMatrix(boolean isFullMutationMatrix) { + if (isFullMutationMatrix) { + options.put("--fullMutationMatrix", TRUE); + } else { + options.put("--fullMutationMatrix", FALSE); + } + return this; + } + /** * Path to a file containing history information for incremental analysis. * @@ -493,6 +519,32 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * Test methods that should be included for challenging the mutants. + * + * @param testMethod the test method + * @return this operation instance + */ + public PitestOperation includedTestMethods(String testMethod) { + options.put("--includedTestMethods", testMethod); + return this; + } + + /** + * Input encoding. + *

+ * Default is {@code UTF-8}. + * + * @param encoding the encoding + * @return this operation instance + */ + public PitestOperation inputEncoding(String encoding) { + if (isNotBlank(encoding)) { + options.put("--inputEncoding", encoding); + } + return this; + } + /* * Determines if a string is not blank. */ @@ -540,6 +592,17 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * Maximum number of surviving mutants to allow without throwing an error. + * + * @param maxSurviving the maximin number + * @return this operation instance + */ + public PitestOperation maxSurviving(int maxSurviving) { + options.put("--maxSurviving", String.valueOf(maxSurviving)); + return this; + } + /** * List of classpaths which should be considered to contain mutable code. If your build maintains separate output * directories for tests and production classes this parameter should be set to your code output directory in order @@ -578,6 +641,19 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * Mutation engine to use. + *

+ * Defaults to {@code gregor} + * + * @param engine the engine + * @return this operation instance + */ + public PitestOperation mutationEngine(String engine) { + options.put("--mutationEngine", engine); + return this; + } + /** * Mutation score threshold below which the build will fail. This is an integer percent (0-100) that represents the * fraction of killed mutations out of all mutations. @@ -595,6 +671,17 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * Maximum number of mutations to include. + * + * @param size the size + * @return this operation instance + */ + public PitestOperation mutationUnitSize(int size) { + options.put("--mutationUnitSize", String.valueOf(size)); + return this; + } + /** * List of mutation operators. * @@ -635,7 +722,7 @@ public class PitestOperation extends AbstractProcessOperation { } /** - * Comma separated list of formats in which to write mutation results as the mutations are analysed. + * A list of formats in which to write mutation results as the mutations are analysed. * Supported formats are {@code HTML}, {@code XML}, {@code CSV}. *

* Defaults to {@code HTML}. @@ -651,7 +738,7 @@ public class PitestOperation extends AbstractProcessOperation { } /** - * Comma separated list of formats in which to write mutation results as the mutations are analysed. + * A list of formats in which to write mutation results as the mutations are analysed. * Supported formats are {@code HTML}, {@code XML}, {@code CSV}. *

* Defaults to {@code HTML}. @@ -665,6 +752,29 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * Custom plugin properties. + * + * @param key the key + * @param value the value + * @return this operation instance + */ + public PitestOperation pluginConfiguration(String key, String value) { + options.put("--pluginConfiguration", key + '=' + value); + return this; + } + + /** + * Project base. + * + * @param file the file + * @return this operations instance + */ + public PitestOperation projectBase(String file) { + options.put("--projectBase", file); + return this; + } + /** * Output directory for the reports. * @@ -756,14 +866,14 @@ public class PitestOperation extends AbstractProcessOperation { } /** - * A comma separated list of globs can be supplied to this parameter to limit the tests available to be run. + * A list of globs can be supplied to this parameter to limit the tests available to be run. * If this parameter is not supplied then any test fixture that matched targetClasses may be used, it is however * recommended that this parameter is always explicitly set. *

* This parameter can be used to point PIT to a top level suite or suites. Custom suites such as * ClassPathSuite are supported. * - * @param test one ore more tests + * @param test one or more tests * @return this operation instance * @see #targetTests(Collection) */ @@ -773,7 +883,7 @@ public class PitestOperation extends AbstractProcessOperation { } /** - * A comma separated list of globs can be supplied to this parameter to limit the tests available to be run. + * A list of globs can be supplied to this parameter to limit the tests available to be run. * If this parameter is not supplied then any test fixture that matched targetClasses may be used, it is however * recommended that this parameter is always explicitly set. *

@@ -789,6 +899,17 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * Test strength score below which to throw an error. + * + * @param threshold the threshold + * @return this operation instance + */ + public PitestOperation testStrengthThreshold(int threshold) { + options.put("--testStrengthThreshold", String.valueOf(threshold)); + return this; + } + /** * The number of threads to use when mutation testing. * @@ -878,4 +999,17 @@ public class PitestOperation extends AbstractProcessOperation { } return this; } + + /** + * The verbosity of output. + *

+ * Defaults to {@code DEFAULT} + * + * @param verbosity the verbosity + * @return this operation instance + */ + public PitestOperation verbosity(String verbosity) { + options.put("--verbosity", verbosity); + return this; + } } diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index af0e7c1..2b75278 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -57,6 +57,121 @@ class PitestOperationTest { assertThat(op.options.get("--avoidCallsTo")).as(AS_LIST).isEqualTo(FOOBAR); } + @Test + void checkAll() { + var params = List.of( + "--argLine", + "--avoidCallsTo", + "--classPath", + "--classPathFile", + "--coverageThreshold", + "--detectInlinedCode", + "--excludedClasses", + "--excludedGroups", + "--excludedMethods", + "--excludedRunners", + "--excludedTestClasses", + "--exportLineCoverage", + "--failWhenNoMutations", + "--features", + "--fullMutationMatrix", + "--historyInputLocation", + "--historyOutputLocation", + "--includeLaunchClasspath", + "--includedGroups", + "--includedTestMethods", + "--inputEncoding", + "--jvmArgs", + "--jvmPath", + "--maxSurviving", + "--mutableCodePaths", + "--mutationEngine", + "--mutationThreshold", + "--mutationUnitSize", + "--mutators", + "--outputEncoding", + "--outputFormats", + "--pluginConfiguration", + "--projectBase", + "--reportDir", + "--skipFailingTests", + "--sourceDirs", + "--targetClasses", + "--targetTests", + "--testStrengthThreshold", + "--threads", + "--timeoutConst", + "--timeoutFactor", + "--timestampedReports", + "--useClasspathJar", + "--verbose", + "--verbosity" + ); + + var args = new PitestOperation() + .fromProject(new BaseProject()) + .argLine(FOO) + .avoidCallsTo(FOO, BAR) + .classPath(FOO, BAR) + .classPathFile(FOO) + .coverageThreshold(0) + .detectInlinedCode(false) + .excludedClasses("class") + .excludedClasses(List.of(FOO, BAR)) + .excludedGroups("group") + .excludedGroups(List.of(FOO, BAR)) + .excludedMethods("method") + .excludedMethods(List.of(FOO, BAR)) + .excludedTestClasses("test") + .excludedRunners("runners") + .exportLineCoverage(true) + .failWhenNoMutations(true) + .features("feature") + .fullMutationMatrix(true) + .historyInputLocation("inputLocation") + .historyOutputLocation("outputLocation") + .includeLaunchClasspath(true) + .includedGroups("group") + .includedTestMethods("method") + .inputEncoding("encoding") + .jvmArgs("-XX:+UnlogregckDiagnosticVMOptions") + .jvmPath("path") + .maxSurviving(1) + .mutableCodePaths("codePaths") + .mutationEngine("engine") + .mutationThreshold(0) + .mutationUnitSize(1) + .mutators(List.of(FOO, BAR)) + .outputEncoding("encoding") + .outputFormats("json") + .pluginConfiguration("key", "value") + .projectBase("base") + .reportDir("dir") + .skipFailingTests(true) + .targetClasses("class") + .targetTests("test") + .testStrengthThreshold(0) + .threads(0) + .timeoutConst(0) + .timeoutFactor(0) + .timestampedReports(true) + .useClasspathJar(true) + .verbose(true) + .verbosity("default") + .executeConstructProcessCommandList(); + + for (var p : params) { + var found = false; + for (var a : args) { + if (a.startsWith(p)) { + found = true; + break; + } + } + assertThat(found).as(p + " not found.").isTrue(); + } + } + @Test void classPath() { var op = new PitestOperation() @@ -143,17 +258,25 @@ class PitestOperationTest { assertThat(op.options.get("--excludedMethods")).as(AS_LIST).isEqualTo(FOOBAR); } + @Test + void excludedRunners() { + var op = new PitestOperation() + .fromProject(new BaseProject()) + .excludedRunners(FOO); + assertThat(op.options.get("--excludedRunners")).isEqualTo(FOO); + } + @Test void excludedTests() { var op = new PitestOperation() .fromProject(new BaseProject()) - .excludedTests(FOO, BAR); - assertThat(op.options.get("--excludedTests")).isEqualTo(FOOBAR); + .excludedTestClasses(FOO, BAR); + assertThat(op.options.get("--excludedTestClasses")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) - .excludedTests(List.of(FOO, BAR)); - assertThat(op.options.get("--excludedTests")).as("as list").isEqualTo(FOOBAR); + .excludedTestClasses(List.of(FOO, BAR)); + assertThat(op.options.get("--excludedTestClasses")).as("as list").isEqualTo(FOOBAR); } @Test @@ -246,6 +369,14 @@ class PitestOperationTest { assertThat(op.options.get("--features")).as(AS_LIST).isEqualTo(FOOBAR); } + @Test + void fullMutationMatrix() { + var op = new PitestOperation() + .fromProject(new BaseProject()) + .fullMutationMatrix(true); + assertThat(op.options.get("--fullMutationMatrix")).isEqualTo(TRUE); + } + @Test void historyInputLocation() { var op = new PitestOperation() @@ -288,6 +419,22 @@ class PitestOperationTest { assertThat(op.options.get("--includedGroups")).as(AS_LIST).isEqualTo(FOOBAR); } + @Test + void includedTestMethods() { + var op = new PitestOperation() + .fromProject(new Project()) + .includedTestMethods(FOO); + assertThat(op.options.get("--includedTestMethods")).isEqualTo(FOO); + } + + @Test + void inputEncoding() { + var op = new PitestOperation() + .fromProject(new BaseProject()) + .inputEncoding(FOO); + assertThat(op.options.get("--inputEncoding")).isEqualTo(FOO); + } + @Test void jvmArgs() { var op = new PitestOperation() @@ -309,6 +456,14 @@ class PitestOperationTest { assertThat(op.options.get("--jvmPath")).isEqualTo(FOO); } + @Test + void maxSurviving() { + var op = new PitestOperation() + .fromProject(new Project()) + .maxSurviving(1); + assertThat(op.options.get("--maxSurviving")).isEqualTo("1"); + } + @Test void mutableCodePaths() { var op = new PitestOperation() @@ -322,6 +477,14 @@ class PitestOperationTest { assertThat(op.options.get("--mutableCodePaths")).as(AS_LIST).isEqualTo(FOOBAR); } + @Test + void mutationEngine() { + var op = new PitestOperation() + .fromProject(new Project()) + .mutationEngine(FOO); + assertThat(op.options.get("--mutationEngine")).isEqualTo(FOO); + } + @Test void mutationThreshold() { var op = new PitestOperation() @@ -335,6 +498,14 @@ class PitestOperationTest { assertThat(op.options.get("--mutationThreshold")).isNull(); } + @Test + void mutationUnitSize() { + var op = new PitestOperation() + .fromProject(new Project()) + .mutationUnitSize(2); + assertThat(op.options.get("--mutationUnitSize")).isEqualTo("2"); + } + @Test void mutators() { var op = new PitestOperation() @@ -369,6 +540,22 @@ class PitestOperationTest { assertThat(op.options.get("--outputFormats")).as(AS_LIST).isEqualTo(FOOBAR); } + @Test + void pluginConfiguration() { + var op = new PitestOperation() + .fromProject(new Project()) + .pluginConfiguration(FOO, BAR); + assertThat(op.options.get("--pluginConfiguration")).isEqualTo(FOO + "=" + BAR); + } + + @Test + void projectBase() { + var op = new PitestOperation() + .fromProject(new Project()) + .projectBase(FOO); + assertThat(op.options.get("--projectBase")).isEqualTo(FOO); + } + @Test void reportDir() { var op = new PitestOperation() @@ -429,6 +616,14 @@ class PitestOperationTest { assertThat(op.options.get("--targetTests")).as(AS_LIST).isEqualTo(FOOBAR); } + @Test + void testStrengthThreshold() { + var op = new PitestOperation() + .fromProject(new Project()) + .testStrengthThreshold(6); + assertThat(op.options.get("--testStrengthThreshold")).isEqualTo("6"); + } + @Test void threads() { var op = new PitestOperation() @@ -491,4 +686,12 @@ class PitestOperationTest { .verbose(false); assertThat(op.options.get("--verbose")).isEqualTo(FALSE); } + + @Test + void verbosity() { + var op = new PitestOperation() + .fromProject(new Project()) + .verbosity(FOO); + assertThat(op.options.get("--verbosity")).isEqualTo(FOO); + } } From b6995b05a25db6c0ab13c11f5335f9732de93224 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 26 May 2024 20:45:24 -0700 Subject: [PATCH 07/82] Version 0.9.8 --- examples/lib/bld/bld-wrapper.properties | 2 +- examples/reports/mutations/com.example/ExamplesLib.java.html | 2 +- examples/reports/mutations/com.example/ExamplesTest.java.html | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- src/test/java/rife/bld/extension/PitestOperationTest.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 9231878..3b6bac7 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,6 +1,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extensions=com.uwyn.rife2:bld-pitest:0.9.7 +bld.extensions=com.uwyn.rife2:bld-pitest:0.9.8 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.downloadLocation= bld.sourceDirectories= diff --git a/examples/reports/mutations/com.example/ExamplesLib.java.html b/examples/reports/mutations/com.example/ExamplesLib.java.html index ad08c1a..a558328 100644 --- a/examples/reports/mutations/com.example/ExamplesLib.java.html +++ b/examples/reports/mutations/com.example/ExamplesLib.java.html @@ -155,7 +155,7 @@

Tests examined

    -
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (9 ms)
  • +
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (11 ms)

diff --git a/examples/reports/mutations/com.example/ExamplesTest.java.html b/examples/reports/mutations/com.example/ExamplesTest.java.html index e242345..09c13e3 100644 --- a/examples/reports/mutations/com.example/ExamplesTest.java.html +++ b/examples/reports/mutations/com.example/ExamplesTest.java.html @@ -230,7 +230,7 @@

Tests examined

    -
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (9 ms)
  • +
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (11 ms)

diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 3e1f722..677da55 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -35,7 +35,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(0, 9, 8, "SNAPSHOT"); + version = version(0, 9, 8); javaRelease = 17; downloadSources = true; diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index 2b75278..caf5655 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -58,7 +58,7 @@ class PitestOperationTest { } @Test - void checkAll() { + void checkAllParameters() { var params = List.of( "--argLine", "--avoidCallsTo", From ec0998caa4375229d116b0e6bc6d7ed677c78e32 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 27 May 2024 16:14:03 -0700 Subject: [PATCH 08/82] Added script to list parameters --- cliargs.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100755 cliargs.sh diff --git a/cliargs.sh b/cliargs.sh new file mode 100755 index 0000000..d5fccfd --- /dev/null +++ b/cliargs.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +java -cp "lib/test/*" org.pitest.mutationtest.commandline.MutationCoverageReport --help |\ +grep "^.*--.*" |\ +sed -e "s/\* --/--/" -e "s/ .*//" -e "s/^--/\"--/" -e "s/$/\",/" |\ +sort |\ +sed -e '/testPlugin/d' -e '/--help/d' -e '/---/d' -e '$s/,//' \ No newline at end of file From e7ed7edc3080080438895809810ece3bb85ba615 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 27 May 2024 16:15:40 -0700 Subject: [PATCH 09/82] Fixed missing maxMutationsPerClass parameter --- .../java/rife/bld/extension/PitestOperation.java | 11 +++++++++++ .../rife/bld/extension/PitestOperationTest.java | 14 ++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/java/rife/bld/extension/PitestOperation.java b/src/main/java/rife/bld/extension/PitestOperation.java index f4b737f..8175f17 100644 --- a/src/main/java/rife/bld/extension/PitestOperation.java +++ b/src/main/java/rife/bld/extension/PitestOperation.java @@ -592,6 +592,17 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * Maximum number of surviving mutants to allow without throwing an error. + * + * @param maxMutationsPerClass the max number + * @return this operation instance + */ + public PitestOperation maxMutationsPerClass(int maxMutationsPerClass) { + options.put("--maxMutationsPerClass", String.valueOf(maxMutationsPerClass)); + return this; + } + /** * Maximum number of surviving mutants to allow without throwing an error. * diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index caf5655..63a27f6 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -77,12 +77,13 @@ class PitestOperationTest { "--fullMutationMatrix", "--historyInputLocation", "--historyOutputLocation", - "--includeLaunchClasspath", "--includedGroups", "--includedTestMethods", + "--includeLaunchClasspath", "--inputEncoding", "--jvmArgs", "--jvmPath", + "--maxMutationsPerClass", "--maxSurviving", "--mutableCodePaths", "--mutationEngine", @@ -122,8 +123,8 @@ class PitestOperationTest { .excludedGroups(List.of(FOO, BAR)) .excludedMethods("method") .excludedMethods(List.of(FOO, BAR)) - .excludedTestClasses("test") .excludedRunners("runners") + .excludedTestClasses("test") .exportLineCoverage(true) .failWhenNoMutations(true) .features("feature") @@ -136,6 +137,7 @@ class PitestOperationTest { .inputEncoding("encoding") .jvmArgs("-XX:+UnlogregckDiagnosticVMOptions") .jvmPath("path") + .maxMutationsPerClass(3) .maxSurviving(1) .mutableCodePaths("codePaths") .mutationEngine("engine") @@ -456,6 +458,14 @@ class PitestOperationTest { assertThat(op.options.get("--jvmPath")).isEqualTo(FOO); } + @Test + void maxMutationsPerClass() { + var op = new PitestOperation() + .fromProject(new BaseProject()) + .maxMutationsPerClass(12); + assertThat(op.options.get("--maxMutationsPerClass")).isEqualTo("12"); + } + @Test void maxSurviving() { var op = new PitestOperation() From ec50e5272bd4778723b1f203f0ebba4f87ece6c8 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 27 May 2024 20:14:33 -0700 Subject: [PATCH 10/82] Read arguments from resource file --- cliargs.sh | 4 +- .../bld/extension/PitestOperationTest.java | 61 +++---------------- src/test/resources/pitest-args.txt | 47 ++++++++++++++ 3 files changed, 57 insertions(+), 55 deletions(-) create mode 100644 src/test/resources/pitest-args.txt diff --git a/cliargs.sh b/cliargs.sh index d5fccfd..2f86041 100755 --- a/cliargs.sh +++ b/cliargs.sh @@ -2,6 +2,6 @@ java -cp "lib/test/*" org.pitest.mutationtest.commandline.MutationCoverageReport --help |\ grep "^.*--.*" |\ -sed -e "s/\* --/--/" -e "s/ .*//" -e "s/^--/\"--/" -e "s/$/\",/" |\ +sed -e "s/\* --/--/" -e "s/ .*//" |\ sort |\ -sed -e '/testPlugin/d' -e '/--help/d' -e '/---/d' -e '$s/,//' \ No newline at end of file +sed -e '/testPlugin/d' -e '/--help/d' -e '/---/d' > src/test/resources/pitest-args.txt \ No newline at end of file diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index 63a27f6..e71e6e2 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -23,6 +23,7 @@ import rife.bld.WebProject; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Paths; import java.util.List; import java.util.Set; @@ -58,58 +59,12 @@ class PitestOperationTest { } @Test - void checkAllParameters() { - var params = List.of( - "--argLine", - "--avoidCallsTo", - "--classPath", - "--classPathFile", - "--coverageThreshold", - "--detectInlinedCode", - "--excludedClasses", - "--excludedGroups", - "--excludedMethods", - "--excludedRunners", - "--excludedTestClasses", - "--exportLineCoverage", - "--failWhenNoMutations", - "--features", - "--fullMutationMatrix", - "--historyInputLocation", - "--historyOutputLocation", - "--includedGroups", - "--includedTestMethods", - "--includeLaunchClasspath", - "--inputEncoding", - "--jvmArgs", - "--jvmPath", - "--maxMutationsPerClass", - "--maxSurviving", - "--mutableCodePaths", - "--mutationEngine", - "--mutationThreshold", - "--mutationUnitSize", - "--mutators", - "--outputEncoding", - "--outputFormats", - "--pluginConfiguration", - "--projectBase", - "--reportDir", - "--skipFailingTests", - "--sourceDirs", - "--targetClasses", - "--targetTests", - "--testStrengthThreshold", - "--threads", - "--timeoutConst", - "--timeoutFactor", - "--timestampedReports", - "--useClasspathJar", - "--verbose", - "--verbosity" - ); + void checkAllParameters() throws IOException { + var args = Files.readAllLines(Paths.get("src", "test", "resources", "pitest-args.txt")); - var args = new PitestOperation() + assertThat(args).hasSizeGreaterThan(0); + + var params = new PitestOperation() .fromProject(new BaseProject()) .argLine(FOO) .avoidCallsTo(FOO, BAR) @@ -162,9 +117,9 @@ class PitestOperationTest { .verbosity("default") .executeConstructProcessCommandList(); - for (var p : params) { + for (var p : args) { var found = false; - for (var a : args) { + for (var a : params) { if (a.startsWith(p)) { found = true; break; diff --git a/src/test/resources/pitest-args.txt b/src/test/resources/pitest-args.txt new file mode 100644 index 0000000..348f16e --- /dev/null +++ b/src/test/resources/pitest-args.txt @@ -0,0 +1,47 @@ +--argLine +--avoidCallsTo +--classPath +--classPathFile +--coverageThreshold +--detectInlinedCode +--excludedClasses +--excludedGroups +--excludedMethods +--excludedRunners +--excludedTestClasses +--exportLineCoverage +--failWhenNoMutations +--features +--fullMutationMatrix +--historyInputLocation +--historyOutputLocation +--includedGroups +--includedTestMethods +--includeLaunchClasspath +--inputEncoding +--jvmArgs +--jvmPath +--maxMutationsPerClass +--maxSurviving +--mutableCodePaths +--mutationEngine +--mutationThreshold +--mutationUnitSize +--mutators +--outputEncoding +--outputFormats +--pluginConfiguration +--projectBase +--reportDir +--skipFailingTests +--sourceDirs +--targetClasses +--targetTests +--testStrengthThreshold +--threads +--timeoutConst +--timeoutFactor +--timestampedReports +--useClasspathJar +--verbose +--verbosity From e6230a3644af51060bcbb5e519524bf39559264e Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 28 May 2024 14:27:54 -0700 Subject: [PATCH 11/82] Execute cliargs script before running tests --- checkcliargs.sh | 12 ------------ lib/bld/bld-wrapper.properties | 1 + scripts/checkcliargs.sh | 12 ++++++++++++ cliargs.sh => scripts/cliargs.sh | 0 .../rife/bld/extension/PitestOperationBuild.java | 9 +++++++++ .../java/rife/bld/extension/PitestOperationTest.java | 2 +- 6 files changed, 23 insertions(+), 13 deletions(-) delete mode 100755 checkcliargs.sh create mode 100755 scripts/checkcliargs.sh rename cliargs.sh => scripts/cliargs.sh (100%) diff --git a/checkcliargs.sh b/checkcliargs.sh deleted file mode 100755 index 480c88f..0000000 --- a/checkcliargs.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -MAIN="org.pitest.mutationtest.commandline.MutationCoverageReport" -TMPNEW=/tmp/checkcliargs-new -TMPOLD=/tmp/checkcliargs-old - -java -cp "lib/test/*" $MAIN --help >$TMPNEW -java -cp "examples/lib/test/*" $MAIN --help >$TMPOLD - -diff $TMPOLD $TMPNEW - -rm -rf $TMPNEW $TMPOLD diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index cab667f..25c1bde 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,6 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.extension-pmd=com.uwyn.rife2:bld-pmd:0.9.9 +bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.0 bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.5 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.downloadLocation= diff --git a/scripts/checkcliargs.sh b/scripts/checkcliargs.sh new file mode 100755 index 0000000..446c562 --- /dev/null +++ b/scripts/checkcliargs.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +main="org.pitest.mutationtest.commandline.MutationCoverageReport" +new=/tmp/checkcliargs-new +old=/tmp/checkcliargs-old + +java -cp "lib/test/*" $main --help >$new +java -cp "examples/lib/test/*" $main --help >$old + +diff $old $new + +rm -rf $new $old diff --git a/cliargs.sh b/scripts/cliargs.sh similarity index 100% rename from cliargs.sh rename to scripts/cliargs.sh diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 677da55..5ea22d3 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -108,4 +108,13 @@ public class PitestOperationBuild extends Project { .ruleSets("config/pmd.xml") .execute(); } + + @Override + public void test() throws Exception { + new ExecOperation() + .fromProject(this) + .command("scripts/cliargs.sh") + .execute(); + super.test(); + } } diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index e71e6e2..39dee6e 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -62,7 +62,7 @@ class PitestOperationTest { void checkAllParameters() throws IOException { var args = Files.readAllLines(Paths.get("src", "test", "resources", "pitest-args.txt")); - assertThat(args).hasSizeGreaterThan(0); + assertThat(args).isNotEmpty(); var params = new PitestOperation() .fromProject(new BaseProject()) From a65e5e1ee1fbcc0945f11c70fc8ff5ba2dc9a5c3 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 14 Jun 2024 23:52:18 -0700 Subject: [PATCH 12/82] Fixed bld URL --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2f93ecd..7949376 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# [PIT Mutation Testing](https://pitest.org/) Extension for [bld](https://rife2.com/bldb) +# [PIT Mutation Testing](https://pitest.org/) Extension for [bld](https://rife2.com/bld) [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) From ecdc379b7bc891870f29285b191e86ac456ba5b5 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 23 Jun 2024 11:01:52 -0700 Subject: [PATCH 13/82] Bumped PMD extension to version 1.1.0 --- lib/bld/bld-wrapper.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 25c1bde..736a63c 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,9 +1,9 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extension-pmd=com.uwyn.rife2:bld-pmd:0.9.9 -bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.0 -bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.5 -bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.downloadLocation= +bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.1 +bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.5 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.0 +bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= bld.version=1.9.1 From 44e55db53249fef669b25feffa9c70ab823020aa Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 23 Jun 2024 11:02:53 -0700 Subject: [PATCH 14/82] Minor code cleanups --- .../rife/bld/extension/PitestOperation.java | 159 +++++++++--------- .../bld/extension/PitestOperationTest.java | 144 ++++++++-------- 2 files changed, 156 insertions(+), 147 deletions(-) diff --git a/src/main/java/rife/bld/extension/PitestOperation.java b/src/main/java/rife/bld/extension/PitestOperation.java index 8175f17..5564cc7 100644 --- a/src/main/java/rife/bld/extension/PitestOperation.java +++ b/src/main/java/rife/bld/extension/PitestOperation.java @@ -45,7 +45,7 @@ public class PitestOperation extends AbstractProcessOperation { /** * The PIT options. */ - protected final Map options = new ConcurrentHashMap<>(); + private final Map options_ = new ConcurrentHashMap<>(); private BaseProject project_; /** @@ -56,7 +56,7 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation argLine(String line) { if (isNotBlank(line)) { - options.put("--argLine", line); + options_.put("--argLine", line); } return this; } @@ -81,7 +81,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #avoidCallsTo(String...) */ public PitestOperation avoidCallsTo(Collection avoidCallsTo) { - options.put("--avoidCallsTo", String.join(",", avoidCallsTo.stream().filter(this::isNotBlank).toList())); + options_.put("--avoidCallsTo", String.join(",", avoidCallsTo.stream().filter(this::isNotBlank).toList())); return this; } @@ -105,7 +105,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #avoidCallsTo(Collection) */ public PitestOperation avoidCallsTo(String... avoidCallTo) { - options.put("--avoidCallsTo", String.join(",", Arrays.stream(avoidCallTo).filter(this::isNotBlank).toList())); + options_.put("--avoidCallsTo", String.join(",", Arrays.stream(avoidCallTo).filter(this::isNotBlank).toList())); return this; } @@ -130,7 +130,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #classPath(Collection) */ public PitestOperation classPath(String... path) { - options.put("--classPath", String.join(",", Arrays.stream(path).filter(this::isNotBlank).toList())); + options_.put("--classPath", String.join(",", Arrays.stream(path).filter(this::isNotBlank).toList())); return this; } @@ -142,7 +142,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #classPath(String...) */ public PitestOperation classPath(Collection path) { - options.put("--classPath", String.join(",", path.stream().filter(this::isNotBlank).toList())); + options_.put("--classPath", String.join(",", path.stream().filter(this::isNotBlank).toList())); return this; } @@ -154,7 +154,7 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation classPathFile(String file) { if (isNotBlank(file)) { - options.put("--classPathFile", file); + options_.put("--classPathFile", file); } return this; } @@ -168,7 +168,7 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation coverageThreshold(int threshold) { if (threshold >= 0 && threshold <= 100) { - options.put("--coverageThreshold", String.valueOf(threshold)); + options_.put("--coverageThreshold", String.valueOf(threshold)); } return this; } @@ -207,9 +207,9 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation detectInlinedCode(boolean isDetectInlinedCode) { if (isDetectInlinedCode) { - options.put("--detectInlinedCode", TRUE); + options_.put("--detectInlinedCode", TRUE); } else { - options.put("--detectInlinedCode", FALSE); + options_.put("--detectInlinedCode", FALSE); } return this; } @@ -222,7 +222,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #excludedClasses(Collection) */ public PitestOperation excludedClasses(String... excludedClass) { - options.put("--excludedClasses", + options_.put("--excludedClasses", String.join(",", Arrays.stream(excludedClass).filter(this::isNotBlank).toList())); return this; } @@ -235,7 +235,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #excludedClasses(String...) */ public PitestOperation excludedClasses(Collection excludedClasses) { - options.put("--excludedClasses", String.join(",", excludedClasses.stream().filter(this::isNotBlank).toList())); + options_.put("--excludedClasses", String.join(",", excludedClasses.stream().filter(this::isNotBlank).toList())); return this; } @@ -248,7 +248,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #excludedGroups(Collection) */ public PitestOperation excludedGroups(String... excludedGroup) { - options.put("--excludedGroups", + options_.put("--excludedGroups", String.join(",", Arrays.stream(excludedGroup).filter(this::isNotBlank).toList())); return this; } @@ -262,7 +262,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #excludedGroups(String...) */ public PitestOperation excludedGroups(Collection excludedGroups) { - options.put("--excludedGroups", String.join(",", excludedGroups.stream().filter(this::isNotBlank).toList())); + options_.put("--excludedGroups", String.join(",", excludedGroups.stream().filter(this::isNotBlank).toList())); return this; } @@ -274,7 +274,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #excludedMethods(Collection) */ public PitestOperation excludedMethods(String... excludedMethod) { - options.put("--excludedMethods", + options_.put("--excludedMethods", String.join(",", Arrays.stream(excludedMethod).filter(this::isNotBlank).toList())); return this; } @@ -287,7 +287,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #excludedMethods(String...) */ public PitestOperation excludedMethods(Collection excludedMethods) { - options.put("--excludedMethods", + options_.put("--excludedMethods", String.join(",", excludedMethods.stream().filter(this::isNotBlank).toList())); return this; } @@ -299,7 +299,7 @@ public class PitestOperation extends AbstractProcessOperation { * @return this operation instance */ public PitestOperation excludedRunners(String runners) { - options.put("--excludedRunners", runners); + options_.put("--excludedRunners", runners); return this; } @@ -312,7 +312,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #excludedTestClasses(Collection) */ public PitestOperation excludedTestClasses(String... testClasses) { - options.put("--excludedTestClasses", String.join(",", testClasses)); + options_.put("--excludedTestClasses", String.join(",", testClasses)); return this; } @@ -325,7 +325,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #excludedTestClasses(String...) */ public PitestOperation excludedTestClasses(Collection testClasses) { - options.put("--excludedTestClasses", + options_.put("--excludedTestClasses", String.join(",", testClasses.stream().filter(this::isNotBlank).toList())); return this; } @@ -338,8 +338,8 @@ public class PitestOperation extends AbstractProcessOperation { protected List executeConstructProcessCommandList() { if (project_ == null) { throw new IllegalArgumentException("A project must be specified."); - } else if (!options.containsKey(SOURCE_DIRS)) { - options.put(SOURCE_DIRS, project_.srcDirectory().getPath()); + } else if (!options_.containsKey(SOURCE_DIRS)) { + options_.put(SOURCE_DIRS, project_.srcDirectory().getPath()); } final List args = new ArrayList<>(); @@ -351,7 +351,7 @@ public class PitestOperation extends AbstractProcessOperation { project_.buildTestDirectory())); args.add("org.pitest.mutationtest.commandline.MutationCoverageReport"); - options.forEach((k, v) -> { + options_.forEach((k, v) -> { args.add(k); if (!v.isEmpty()) { args.add(v); @@ -383,9 +383,9 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation exportLineCoverage(boolean jsExport) { if (jsExport) { - options.put("--exportLineCoverage", TRUE); + options_.put("--exportLineCoverage", TRUE); } else { - options.put("--exportLineCoverage", FALSE); + options_.put("--exportLineCoverage", FALSE); } return this; } @@ -400,9 +400,9 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation failWhenNoMutations(boolean isFail) { if (isFail) { - options.put("--failWhenNoMutations", TRUE); + options_.put("--failWhenNoMutations", TRUE); } else { - options.put("--failWhenNoMutations", FALSE); + options_.put("--failWhenNoMutations", FALSE); } return this; } @@ -415,7 +415,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #features(String...) */ public PitestOperation features(Collection feature) { - options.put("--features", String.join(",", feature.stream().filter(this::isNotBlank).toList())); + options_.put("--features", String.join(",", feature.stream().filter(this::isNotBlank).toList())); return this; } @@ -427,7 +427,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #features(Collection) */ public PitestOperation features(String... feature) { - options.put("--features", String.join(",", Arrays.stream(feature).filter(this::isNotBlank).toList())); + options_.put("--features", String.join(",", Arrays.stream(feature).filter(this::isNotBlank).toList())); return this; } @@ -439,9 +439,9 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation fullMutationMatrix(boolean isFullMutationMatrix) { if (isFullMutationMatrix) { - options.put("--fullMutationMatrix", TRUE); + options_.put("--fullMutationMatrix", TRUE); } else { - options.put("--fullMutationMatrix", FALSE); + options_.put("--fullMutationMatrix", FALSE); } return this; } @@ -454,7 +454,7 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation historyInputLocation(String path) { if (isNotBlank(path)) { - options.put("--historyInputLocation", path); + options_.put("--historyInputLocation", path); } return this; } @@ -468,7 +468,7 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation historyOutputLocation(String path) { if (isNotBlank(path)) { - options.put("--historyOutputLocation", path); + options_.put("--historyOutputLocation", path); } return this; } @@ -485,9 +485,9 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation includeLaunchClasspath(boolean isLaunchClasspath) { if (isLaunchClasspath) { - options.put("--includeLaunchClasspath", TRUE); + options_.put("--includeLaunchClasspath", TRUE); } else { - options.put("--includeLaunchClasspath", FALSE); + options_.put("--includeLaunchClasspath", FALSE); } return this; } @@ -501,7 +501,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #includedGroups(Collection) */ public PitestOperation includedGroups(String... includedGroup) { - options.put("--includedGroups", + options_.put("--includedGroups", String.join(",", Arrays.stream(includedGroup).filter(this::isNotBlank).toList())); return this; } @@ -515,7 +515,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #includedGroups(String...) */ public PitestOperation includedGroups(Collection includedGroups) { - options.put("--includedGroups", String.join(",", includedGroups.stream().filter(this::isNotBlank).toList())); + options_.put("--includedGroups", String.join(",", includedGroups.stream().filter(this::isNotBlank).toList())); return this; } @@ -526,7 +526,7 @@ public class PitestOperation extends AbstractProcessOperation { * @return this operation instance */ public PitestOperation includedTestMethods(String testMethod) { - options.put("--includedTestMethods", testMethod); + options_.put("--includedTestMethods", testMethod); return this; } @@ -540,7 +540,7 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation inputEncoding(String encoding) { if (isNotBlank(encoding)) { - options.put("--inputEncoding", encoding); + options_.put("--inputEncoding", encoding); } return this; } @@ -561,7 +561,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #jvmArgs(Collection) */ public PitestOperation jvmArgs(String... args) { - options.put("--jvmArgs", String.join(",", Arrays.stream(args).filter(this::isNotBlank).toList())); + options_.put("--jvmArgs", String.join(",", Arrays.stream(args).filter(this::isNotBlank).toList())); return this; } @@ -574,7 +574,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #jvmArgs(String...) */ public PitestOperation jvmArgs(Collection args) { - options.put("--jvmArgs", String.join(",", args.stream().filter(this::isNotBlank).toList())); + options_.put("--jvmArgs", String.join(",", args.stream().filter(this::isNotBlank).toList())); return this; } @@ -587,7 +587,7 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation jvmPath(String path) { if (isNotBlank(path)) { - options.put("--jvmPath", path); + options_.put("--jvmPath", path); } return this; } @@ -599,7 +599,7 @@ public class PitestOperation extends AbstractProcessOperation { * @return this operation instance */ public PitestOperation maxMutationsPerClass(int maxMutationsPerClass) { - options.put("--maxMutationsPerClass", String.valueOf(maxMutationsPerClass)); + options_.put("--maxMutationsPerClass", String.valueOf(maxMutationsPerClass)); return this; } @@ -610,7 +610,7 @@ public class PitestOperation extends AbstractProcessOperation { * @return this operation instance */ public PitestOperation maxSurviving(int maxSurviving) { - options.put("--maxSurviving", String.valueOf(maxSurviving)); + options_.put("--maxSurviving", String.valueOf(maxSurviving)); return this; } @@ -629,7 +629,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #mutableCodePaths(Collection) */ public PitestOperation mutableCodePaths(String... path) { - options.put("--mutableCodePaths", String.join(",", Arrays.stream(path).filter(this::isNotBlank).toList())); + options_.put("--mutableCodePaths", String.join(",", Arrays.stream(path).filter(this::isNotBlank).toList())); return this; } @@ -648,7 +648,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #mutableCodePaths(String...) */ public PitestOperation mutableCodePaths(Collection paths) { - options.put("--mutableCodePaths", String.join(",", paths.stream().filter(this::isNotBlank).toList())); + options_.put("--mutableCodePaths", String.join(",", paths.stream().filter(this::isNotBlank).toList())); return this; } @@ -661,7 +661,7 @@ public class PitestOperation extends AbstractProcessOperation { * @return this operation instance */ public PitestOperation mutationEngine(String engine) { - options.put("--mutationEngine", engine); + options_.put("--mutationEngine", engine); return this; } @@ -677,7 +677,7 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation mutationThreshold(int threshold) { if (threshold >= 0 && threshold <= 100) { - options.put("--mutationThreshold", String.valueOf(threshold)); + options_.put("--mutationThreshold", String.valueOf(threshold)); } return this; } @@ -689,7 +689,7 @@ public class PitestOperation extends AbstractProcessOperation { * @return this operation instance */ public PitestOperation mutationUnitSize(int size) { - options.put("--mutationUnitSize", String.valueOf(size)); + options_.put("--mutationUnitSize", String.valueOf(size)); return this; } @@ -701,7 +701,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #mutators(Collection) */ public PitestOperation mutators(String... mutator) { - options.put("--mutators", String.join(",", Arrays.stream(mutator).filter(this::isNotBlank).toList())); + options_.put("--mutators", String.join(",", Arrays.stream(mutator).filter(this::isNotBlank).toList())); return this; } @@ -713,10 +713,19 @@ public class PitestOperation extends AbstractProcessOperation { * @see #mutators(String...) */ public PitestOperation mutators(Collection mutators) { - options.put("--mutators", String.join(",", mutators.stream().filter(this::isNotBlank).toList())); + options_.put("--mutators", String.join(",", mutators.stream().filter(this::isNotBlank).toList())); return this; } + /** + * Returns the PIT options. + * + * @return the map of options + */ + public Map options() { + return options_; + } + /** * Output encoding. *

@@ -727,7 +736,7 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation outputEncoding(String encoding) { if (isNotBlank(encoding)) { - options.put("--outputEncoding", encoding); + options_.put("--outputEncoding", encoding); } return this; } @@ -743,7 +752,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #outputFormats(Collection) */ public PitestOperation outputFormats(String... outputFormat) { - options.put("--outputFormats", + options_.put("--outputFormats", String.join(",", Arrays.stream(outputFormat).filter(this::isNotBlank).toList())); return this; } @@ -759,7 +768,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #outputFormats(String...) */ public PitestOperation outputFormats(Collection outputFormats) { - options.put("--outputFormats", String.join(",", outputFormats.stream().filter(this::isNotBlank).toList())); + options_.put("--outputFormats", String.join(",", outputFormats.stream().filter(this::isNotBlank).toList())); return this; } @@ -771,7 +780,7 @@ public class PitestOperation extends AbstractProcessOperation { * @return this operation instance */ public PitestOperation pluginConfiguration(String key, String value) { - options.put("--pluginConfiguration", key + '=' + value); + options_.put("--pluginConfiguration", key + '=' + value); return this; } @@ -782,7 +791,7 @@ public class PitestOperation extends AbstractProcessOperation { * @return this operations instance */ public PitestOperation projectBase(String file) { - options.put("--projectBase", file); + options_.put("--projectBase", file); return this; } @@ -794,7 +803,7 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation reportDir(String dir) { if (isNotBlank(dir)) { - options.put("--reportDir", dir); + options_.put("--reportDir", dir); } return this; } @@ -809,9 +818,9 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation skipFailingTests(boolean isSkipFail) { if (isSkipFail) { - options.put("--skipFailingTests", TRUE); + options_.put("--skipFailingTests", TRUE); } else { - options.put("--skipFailingTests", FALSE); + options_.put("--skipFailingTests", FALSE); } return this; } @@ -824,7 +833,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #sourceDirs(Collection) */ public PitestOperation sourceDirs(String... dir) { - options.put(SOURCE_DIRS, String.join(",", Arrays.stream(dir).filter(this::isNotBlank).toList())); + options_.put(SOURCE_DIRS, String.join(",", Arrays.stream(dir).filter(this::isNotBlank).toList())); return this; } @@ -836,7 +845,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #sourceDirs(String...) */ public PitestOperation sourceDirs(Collection dirs) { - options.put(SOURCE_DIRS, String.join(",", dirs.stream().filter(this::isNotBlank).toList())); + options_.put(SOURCE_DIRS, String.join(",", dirs.stream().filter(this::isNotBlank).toList())); return this; } @@ -854,7 +863,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #targetClasses(Collection) */ public PitestOperation targetClasses(Collection targetClass) { - options.put("--targetClasses", String.join(",", targetClass.stream().filter(this::isNotBlank).toList())); + options_.put("--targetClasses", String.join(",", targetClass.stream().filter(this::isNotBlank).toList())); return this; } @@ -872,7 +881,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #targetClasses(String...) */ public PitestOperation targetClasses(String... targetClass) { - options.put("--targetClasses", String.join(",", Arrays.stream(targetClass).filter(this::isNotBlank).toList())); + options_.put("--targetClasses", String.join(",", Arrays.stream(targetClass).filter(this::isNotBlank).toList())); return this; } @@ -889,7 +898,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #targetTests(Collection) */ public PitestOperation targetTests(String... test) { - options.put("--targetTests", String.join(",", Arrays.stream(test).filter(this::isNotBlank).toList())); + options_.put("--targetTests", String.join(",", Arrays.stream(test).filter(this::isNotBlank).toList())); return this; } @@ -906,7 +915,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #targetTests(String...) */ public PitestOperation targetTests(Collection tests) { - options.put("--targetTests", String.join(",", tests.stream().filter(this::isNotBlank).toList())); + options_.put("--targetTests", String.join(",", tests.stream().filter(this::isNotBlank).toList())); return this; } @@ -917,7 +926,7 @@ public class PitestOperation extends AbstractProcessOperation { * @return this operation instance */ public PitestOperation testStrengthThreshold(int threshold) { - options.put("--testStrengthThreshold", String.valueOf(threshold)); + options_.put("--testStrengthThreshold", String.valueOf(threshold)); return this; } @@ -928,7 +937,7 @@ public class PitestOperation extends AbstractProcessOperation { * @return this operation instance */ public PitestOperation threads(int threads) { - options.put("--threads", String.valueOf(threads)); + options_.put("--threads", String.valueOf(threads)); return this; } @@ -942,7 +951,7 @@ public class PitestOperation extends AbstractProcessOperation { * @return this operation instance */ public PitestOperation timeoutConst(int factor) { - options.put("--timeoutConst", String.valueOf(factor)); + options_.put("--timeoutConst", String.valueOf(factor)); return this; } @@ -955,7 +964,7 @@ public class PitestOperation extends AbstractProcessOperation { * @return this operation instance */ public PitestOperation timeoutFactor(double factor) { - options.put("--timeoutFactor", String.valueOf(factor)); + options_.put("--timeoutFactor", String.valueOf(factor)); return this; } @@ -970,9 +979,9 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation timestampedReports(boolean isTimestamped) { if (isTimestamped) { - options.put("--timestampedReports", TRUE); + options_.put("--timestampedReports", TRUE); } else { - options.put("--timestampedReports", FALSE); + options_.put("--timestampedReports", FALSE); } return this; } @@ -987,9 +996,9 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation useClasspathJar(boolean isUseClasspathJar) { if (isUseClasspathJar) { - options.put("--useClasspathJar", TRUE); + options_.put("--useClasspathJar", TRUE); } else { - options.put("--useClasspathJar", FALSE); + options_.put("--useClasspathJar", FALSE); } return this; } @@ -1004,9 +1013,9 @@ public class PitestOperation extends AbstractProcessOperation { */ public PitestOperation verbose(boolean isVerbose) { if (isVerbose) { - options.put("--verbose", TRUE); + options_.put("--verbose", TRUE); } else { - options.put("--verbose", FALSE); + options_.put("--verbose", FALSE); } return this; } @@ -1020,7 +1029,7 @@ public class PitestOperation extends AbstractProcessOperation { * @return this operation instance */ public PitestOperation verbosity(String verbosity) { - options.put("--verbosity", verbosity); + options_.put("--verbosity", verbosity); return this; } } diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index 39dee6e..57623b2 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -42,7 +42,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .argLine(FOO); - assertThat(op.options.get("--argLine")).isEqualTo(FOO); + assertThat(op.options().get("--argLine")).isEqualTo(FOO); } @Test @@ -50,12 +50,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .avoidCallsTo(FOO, BAR); - assertThat(op.options.get("--avoidCallsTo")).isEqualTo(FOOBAR); + assertThat(op.options().get("--avoidCallsTo")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .avoidCallsTo(List.of(FOO, BAR)); - assertThat(op.options.get("--avoidCallsTo")).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--avoidCallsTo")).as(AS_LIST).isEqualTo(FOOBAR); } @Test @@ -134,12 +134,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .classPath(FOO, BAR); - assertThat(op.options.get("--classPath")).isEqualTo(FOOBAR); + assertThat(op.options().get("--classPath")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .classPath(List.of(FOO, BAR)); - assertThat(op.options.get("--classPath")).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--classPath")).as(AS_LIST).isEqualTo(FOOBAR); } @Test @@ -147,7 +147,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .classPathFile(FOO); - assertThat(op.options.get("--classPathFile")).isEqualTo(FOO); + assertThat(op.options().get("--classPathFile")).isEqualTo(FOO); } @Test @@ -155,12 +155,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .coverageThreshold(3); - assertThat(op.options.get("--coverageThreshold")).isEqualTo("3"); + assertThat(op.options().get("--coverageThreshold")).isEqualTo("3"); op = new PitestOperation() .fromProject(new BaseProject()) .coverageThreshold(101); - assertThat(op.options.get("--coverageThreshold")).isNull(); + assertThat(op.options().get("--coverageThreshold")).isNull(); } @Test @@ -168,12 +168,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .detectInlinedCode(true); - assertThat(op.options.get("--detectInlinedCode")).isEqualTo(TRUE); + assertThat(op.options().get("--detectInlinedCode")).isEqualTo(TRUE); op = new PitestOperation() .fromProject(new Project()) .detectInlinedCode(false); - assertThat(op.options.get("--detectInlinedCode")).isEqualTo(FALSE); + assertThat(op.options().get("--detectInlinedCode")).isEqualTo(FALSE); } @Test @@ -181,12 +181,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .excludedClasses(FOO, BAR); - assertThat(op.options.get("--excludedClasses")).isEqualTo(FOOBAR); + assertThat(op.options().get("--excludedClasses")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .excludedClasses(Set.of(FOO, BAR)); - assertThat(op.options.get("--excludedClasses")).as("as set").contains(FOO).contains(BAR).contains(","); + assertThat(op.options().get("--excludedClasses")).as("as set").contains(FOO).contains(BAR).contains(","); } @Test @@ -194,12 +194,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .excludedGroups(FOO, BAR); - assertThat(op.options.get("--excludedGroups")).isEqualTo(FOOBAR); + assertThat(op.options().get("--excludedGroups")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .excludedGroups(List.of(FOO, BAR)); - assertThat(op.options.get("--excludedGroups")).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--excludedGroups")).as(AS_LIST).isEqualTo(FOOBAR); } @Test @@ -207,12 +207,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .excludedMethods(FOO, BAR); - assertThat(op.options.get("--excludedMethods")).isEqualTo(FOOBAR); + assertThat(op.options().get("--excludedMethods")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .excludedMethods(List.of(FOO, BAR)); - assertThat(op.options.get("--excludedMethods")).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--excludedMethods")).as(AS_LIST).isEqualTo(FOOBAR); } @Test @@ -220,7 +220,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .excludedRunners(FOO); - assertThat(op.options.get("--excludedRunners")).isEqualTo(FOO); + assertThat(op.options().get("--excludedRunners")).isEqualTo(FOO); } @Test @@ -228,12 +228,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .excludedTestClasses(FOO, BAR); - assertThat(op.options.get("--excludedTestClasses")).isEqualTo(FOOBAR); + assertThat(op.options().get("--excludedTestClasses")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .excludedTestClasses(List.of(FOO, BAR)); - assertThat(op.options.get("--excludedTestClasses")).as("as list").isEqualTo(FOOBAR); + assertThat(op.options().get("--excludedTestClasses")).as("as list").isEqualTo(FOOBAR); } @Test @@ -292,12 +292,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .exportLineCoverage(true); - assertThat(op.options.get("--exportLineCoverage")).isEqualTo(TRUE); + assertThat(op.options().get("--exportLineCoverage")).isEqualTo(TRUE); op = new PitestOperation() .fromProject(new Project()) .exportLineCoverage(false); - assertThat(op.options.get("--exportLineCoverage")).isEqualTo(FALSE); + assertThat(op.options().get("--exportLineCoverage")).isEqualTo(FALSE); } @Test @@ -305,12 +305,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .failWhenNoMutations(true); - assertThat(op.options.get("--failWhenNoMutations")).isEqualTo(TRUE); + assertThat(op.options().get("--failWhenNoMutations")).isEqualTo(TRUE); op = new PitestOperation() .fromProject(new Project()) .failWhenNoMutations(false); - assertThat(op.options.get("--failWhenNoMutations")).isEqualTo(FALSE); + assertThat(op.options().get("--failWhenNoMutations")).isEqualTo(FALSE); } @Test @@ -318,12 +318,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .features(FOO, BAR); - assertThat(op.options.get("--features")).isEqualTo(FOOBAR); + assertThat(op.options().get("--features")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .features(List.of(FOO, BAR)); - assertThat(op.options.get("--features")).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--features")).as(AS_LIST).isEqualTo(FOOBAR); } @Test @@ -331,7 +331,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .fullMutationMatrix(true); - assertThat(op.options.get("--fullMutationMatrix")).isEqualTo(TRUE); + assertThat(op.options().get("--fullMutationMatrix")).isEqualTo(TRUE); } @Test @@ -339,7 +339,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .historyInputLocation(FOO); - assertThat(op.options.get("--historyInputLocation")).isEqualTo(FOO); + assertThat(op.options().get("--historyInputLocation")).isEqualTo(FOO); } @Test @@ -347,7 +347,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .historyOutputLocation(FOO); - assertThat(op.options.get("--historyOutputLocation")).isEqualTo(FOO); + assertThat(op.options().get("--historyOutputLocation")).isEqualTo(FOO); } @Test @@ -355,12 +355,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .includeLaunchClasspath(true); - assertThat(op.options.get("--includeLaunchClasspath")).isEqualTo(TRUE); + assertThat(op.options().get("--includeLaunchClasspath")).isEqualTo(TRUE); op = new PitestOperation() .fromProject(new Project()) .includeLaunchClasspath(false); - assertThat(op.options.get("--includeLaunchClasspath")).isEqualTo(FALSE); + assertThat(op.options().get("--includeLaunchClasspath")).isEqualTo(FALSE); } @Test @@ -368,12 +368,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .includedGroups(FOO, BAR); - assertThat(op.options.get("--includedGroups")).isEqualTo(FOOBAR); + assertThat(op.options().get("--includedGroups")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .includedGroups(List.of(FOO, BAR)); - assertThat(op.options.get("--includedGroups")).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--includedGroups")).as(AS_LIST).isEqualTo(FOOBAR); } @Test @@ -381,7 +381,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new Project()) .includedTestMethods(FOO); - assertThat(op.options.get("--includedTestMethods")).isEqualTo(FOO); + assertThat(op.options().get("--includedTestMethods")).isEqualTo(FOO); } @Test @@ -389,7 +389,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .inputEncoding(FOO); - assertThat(op.options.get("--inputEncoding")).isEqualTo(FOO); + assertThat(op.options().get("--inputEncoding")).isEqualTo(FOO); } @Test @@ -397,12 +397,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .jvmArgs(FOO, BAR); - assertThat(op.options.get("--jvmArgs")).isEqualTo(FOOBAR); + assertThat(op.options().get("--jvmArgs")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .jvmArgs(List.of(FOO, BAR)); - assertThat(op.options.get("--jvmArgs")).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--jvmArgs")).as(AS_LIST).isEqualTo(FOOBAR); } @Test @@ -410,7 +410,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .jvmPath(FOO); - assertThat(op.options.get("--jvmPath")).isEqualTo(FOO); + assertThat(op.options().get("--jvmPath")).isEqualTo(FOO); } @Test @@ -418,7 +418,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .maxMutationsPerClass(12); - assertThat(op.options.get("--maxMutationsPerClass")).isEqualTo("12"); + assertThat(op.options().get("--maxMutationsPerClass")).isEqualTo("12"); } @Test @@ -426,7 +426,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new Project()) .maxSurviving(1); - assertThat(op.options.get("--maxSurviving")).isEqualTo("1"); + assertThat(op.options().get("--maxSurviving")).isEqualTo("1"); } @Test @@ -434,12 +434,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .mutableCodePaths(FOO, BAR); - assertThat(op.options.get("--mutableCodePaths")).isEqualTo(FOOBAR); + assertThat(op.options().get("--mutableCodePaths")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .mutableCodePaths(List.of(FOO, BAR)); - assertThat(op.options.get("--mutableCodePaths")).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--mutableCodePaths")).as(AS_LIST).isEqualTo(FOOBAR); } @Test @@ -447,7 +447,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new Project()) .mutationEngine(FOO); - assertThat(op.options.get("--mutationEngine")).isEqualTo(FOO); + assertThat(op.options().get("--mutationEngine")).isEqualTo(FOO); } @Test @@ -455,12 +455,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .mutationThreshold(3); - assertThat(op.options.get("--mutationThreshold")).isEqualTo("3"); + assertThat(op.options().get("--mutationThreshold")).isEqualTo("3"); op = new PitestOperation() .fromProject(new BaseProject()) .mutationThreshold(101); - assertThat(op.options.get("--mutationThreshold")).isNull(); + assertThat(op.options().get("--mutationThreshold")).isNull(); } @Test @@ -468,7 +468,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new Project()) .mutationUnitSize(2); - assertThat(op.options.get("--mutationUnitSize")).isEqualTo("2"); + assertThat(op.options().get("--mutationUnitSize")).isEqualTo("2"); } @Test @@ -476,12 +476,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .mutators(FOO, BAR); - assertThat(op.options.get("--mutators")).isEqualTo(FOOBAR); + assertThat(op.options().get("--mutators")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .mutators(List.of(FOO, BAR)); - assertThat(op.options.get("--mutators")).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--mutators")).as(AS_LIST).isEqualTo(FOOBAR); } @Test @@ -489,7 +489,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .outputEncoding(FOO); - assertThat(op.options.get("--outputEncoding")).isEqualTo(FOO); + assertThat(op.options().get("--outputEncoding")).isEqualTo(FOO); } @Test @@ -497,12 +497,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .outputFormats(FOO, BAR); - assertThat(op.options.get("--outputFormats")).isEqualTo(FOOBAR); + assertThat(op.options().get("--outputFormats")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .outputFormats(List.of(FOO, BAR)); - assertThat(op.options.get("--outputFormats")).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--outputFormats")).as(AS_LIST).isEqualTo(FOOBAR); } @Test @@ -510,7 +510,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new Project()) .pluginConfiguration(FOO, BAR); - assertThat(op.options.get("--pluginConfiguration")).isEqualTo(FOO + "=" + BAR); + assertThat(op.options().get("--pluginConfiguration")).isEqualTo(FOO + "=" + BAR); } @Test @@ -518,7 +518,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new Project()) .projectBase(FOO); - assertThat(op.options.get("--projectBase")).isEqualTo(FOO); + assertThat(op.options().get("--projectBase")).isEqualTo(FOO); } @Test @@ -526,7 +526,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .reportDir(FOO); - assertThat(op.options.get("--reportDir")).isEqualTo(FOO); + assertThat(op.options().get("--reportDir")).isEqualTo(FOO); } @Test @@ -534,12 +534,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .skipFailingTests(true); - assertThat(op.options.get("--skipFailingTests")).isEqualTo(TRUE); + assertThat(op.options().get("--skipFailingTests")).isEqualTo(TRUE); op = new PitestOperation() .fromProject(new Project()) .skipFailingTests(false); - assertThat(op.options.get("--skipFailingTests")).isEqualTo(FALSE); + assertThat(op.options().get("--skipFailingTests")).isEqualTo(FALSE); } @Test @@ -547,12 +547,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .sourceDirs(FOO, BAR); - assertThat(op.options.get(SOURCE_DIRS)).isEqualTo(FOOBAR); + assertThat(op.options().get(SOURCE_DIRS)).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .sourceDirs(List.of(FOO, BAR)); - assertThat(op.options.get(SOURCE_DIRS)).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get(SOURCE_DIRS)).as(AS_LIST).isEqualTo(FOOBAR); } @Test @@ -560,12 +560,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .targetClasses(FOO, BAR); - assertThat(op.options.get("--targetClasses")).isEqualTo(FOOBAR); + assertThat(op.options().get("--targetClasses")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .targetClasses(List.of(FOO, BAR)); - assertThat(op.options.get("--targetClasses")).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--targetClasses")).as(AS_LIST).isEqualTo(FOOBAR); } @Test @@ -573,12 +573,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .targetTests(FOO, BAR); - assertThat(op.options.get("--targetTests")).isEqualTo(FOOBAR); + assertThat(op.options().get("--targetTests")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .targetTests(List.of(FOO, BAR)); - assertThat(op.options.get("--targetTests")).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--targetTests")).as(AS_LIST).isEqualTo(FOOBAR); } @Test @@ -586,7 +586,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new Project()) .testStrengthThreshold(6); - assertThat(op.options.get("--testStrengthThreshold")).isEqualTo("6"); + assertThat(op.options().get("--testStrengthThreshold")).isEqualTo("6"); } @Test @@ -594,7 +594,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .threads(3); - assertThat(op.options.get("--threads")).isEqualTo("3"); + assertThat(op.options().get("--threads")).isEqualTo("3"); } @Test @@ -602,7 +602,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .timeoutConst(300); - assertThat(op.options.get("--timeoutConst")).isEqualTo("300"); + assertThat(op.options().get("--timeoutConst")).isEqualTo("300"); } @Test @@ -610,7 +610,7 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .timeoutFactor(5.25); - assertThat(op.options.get("--timeoutFactor")).isEqualTo("5.25"); + assertThat(op.options().get("--timeoutFactor")).isEqualTo("5.25"); } @Test @@ -618,12 +618,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .timestampedReports(true); - assertThat(op.options.get("--timestampedReports")).isEqualTo(TRUE); + assertThat(op.options().get("--timestampedReports")).isEqualTo(TRUE); op = new PitestOperation() .fromProject(new Project()) .timestampedReports(false); - assertThat(op.options.get("--timestampedReports")).isEqualTo(FALSE); + assertThat(op.options().get("--timestampedReports")).isEqualTo(FALSE); } @Test @@ -631,12 +631,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .useClasspathJar(true); - assertThat(op.options.get("--useClasspathJar")).isEqualTo(TRUE); + assertThat(op.options().get("--useClasspathJar")).isEqualTo(TRUE); op = new PitestOperation() .fromProject(new Project()) .useClasspathJar(false); - assertThat(op.options.get("--useClasspathJar")).isEqualTo(FALSE); + assertThat(op.options().get("--useClasspathJar")).isEqualTo(FALSE); } @Test @@ -644,12 +644,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .verbose(true); - assertThat(op.options.get("--verbose")).isEqualTo(TRUE); + assertThat(op.options().get("--verbose")).isEqualTo(TRUE); op = new PitestOperation() .fromProject(new Project()) .verbose(false); - assertThat(op.options.get("--verbose")).isEqualTo(FALSE); + assertThat(op.options().get("--verbose")).isEqualTo(FALSE); } @Test @@ -657,6 +657,6 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new Project()) .verbosity(FOO); - assertThat(op.options.get("--verbosity")).isEqualTo(FOO); + assertThat(op.options().get("--verbosity")).isEqualTo(FOO); } } From 75946b97b05946bb9406451168c2cbb55367e107 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 23 Jun 2024 11:03:28 -0700 Subject: [PATCH 15/82] 0.9.9-SNAPSHOT --- examples/lib/bld/bld-wrapper.properties | 4 +- .../com.example/ExamplesLib.java.html | 39 ++++++------ .../com.example/ExamplesTest.java.html | 59 +++++++++---------- .../reports/mutations/com.example/index.html | 5 +- examples/reports/mutations/index.html | 9 +-- .../bld/extension/PitestOperationBuild.java | 4 +- 6 files changed, 53 insertions(+), 67 deletions(-) diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 3b6bac7..bfabcd9 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extensions=com.uwyn.rife2:bld-pitest:0.9.8 -bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.downloadLocation= +bld.extension-pitest=com.uwyn.rife2:bld-pitest:0.9.9-SNAPSHOT +bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= bld.version=1.9.1 diff --git a/examples/reports/mutations/com.example/ExamplesLib.java.html b/examples/reports/mutations/com.example/ExamplesLib.java.html index a558328..e57c4ee 100644 --- a/examples/reports/mutations/com.example/ExamplesLib.java.html +++ b/examples/reports/mutations/com.example/ExamplesLib.java.html @@ -15,12 +15,12 @@ - + 1 - + @@ -30,12 +30,12 @@ - + 2 - + @@ -45,12 +45,12 @@ - + 3 - + @@ -60,12 +60,12 @@ - + 4 - + @@ -75,12 +75,12 @@ - + 5 -1 +1 1. getMessage : replaced return value with "" for com/example/ExamplesLib::getMessage → KILLED
@@ -92,12 +92,12 @@ - + 6 - +
@@ -107,12 +107,12 @@ - + 7 - + @@ -124,11 +124,11 @@

Mutations

-5 +5 - +

1.1
Location : getMessage
Killed by : com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()]
replaced return value with "" for com/example/ExamplesLib::getMessage → KILLED

@@ -155,12 +155,9 @@

Tests examined

    -
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (11 ms)
  • +
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (9 ms)

-Report generated by
PIT 1.16.1 - - - \ No newline at end of file +Report generated by PIT \ No newline at end of file diff --git a/examples/reports/mutations/com.example/ExamplesTest.java.html b/examples/reports/mutations/com.example/ExamplesTest.java.html index 09c13e3..03b4b4b 100644 --- a/examples/reports/mutations/com.example/ExamplesTest.java.html +++ b/examples/reports/mutations/com.example/ExamplesTest.java.html @@ -15,12 +15,12 @@ - + 1 - + @@ -30,12 +30,12 @@ - + 2 - + @@ -45,12 +45,12 @@ - + 3 - + @@ -60,12 +60,12 @@ - + 4 - + @@ -75,12 +75,12 @@ - + 5 - + @@ -90,12 +90,12 @@ - + 6 - + @@ -105,12 +105,12 @@ - + 7 - + @@ -120,12 +120,12 @@ - + 8 - + @@ -135,12 +135,12 @@ - + 9 - + @@ -150,12 +150,12 @@ - + 10 -1 +1 1. verifyHello : removed call to org/junit/jupiter/api/Assertions::assertEquals → SURVIVED
@@ -167,12 +167,12 @@ - + 11 - +
@@ -182,12 +182,12 @@ - + 12 - + @@ -199,11 +199,11 @@

Mutations

-10 +10 - +

1.1
Location : verifyHello
Killed by : none
removed call to org/junit/jupiter/api/Assertions::assertEquals → SURVIVED

@@ -230,12 +230,9 @@

Tests examined

    -
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (11 ms)
  • +
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (9 ms)

-Report generated by
PIT 1.16.1 - - - \ No newline at end of file +Report generated by PIT \ No newline at end of file diff --git a/examples/reports/mutations/com.example/index.html b/examples/reports/mutations/com.example/index.html index 0268516..d8896a7 100644 --- a/examples/reports/mutations/com.example/index.html +++ b/examples/reports/mutations/com.example/index.html @@ -63,7 +63,4 @@
-Report generated by PIT 1.16.1 - - - \ No newline at end of file +Report generated by PIT \ No newline at end of file diff --git a/examples/reports/mutations/index.html b/examples/reports/mutations/index.html index f069fe7..2693701 100644 --- a/examples/reports/mutations/index.html +++ b/examples/reports/mutations/index.html @@ -62,11 +62,4 @@
-Report generated by PIT 1.16.1 - -
-
- - Enhanced functionality available at arcmutate.com - - \ No newline at end of file +Report generated by PIT \ No newline at end of file diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 5ea22d3..c66e43c 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -35,11 +35,13 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(0, 9, 8); + version = version(0, 9, 9, "SNAPSHOT"); javaRelease = 17; + downloadSources = true; autoDownloadPurge = true; + repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); var pitest = version(1, 16, 1); From 6faea5a8f4079f432b5f3f1a9f798c1aff1d1f95 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 22 Jul 2024 17:11:35 -0700 Subject: [PATCH 16/82] Bumped bld version 2.0.0-SHAPSHOT --- .github/workflows/bld.yml | 7 ++----- .idea/libraries/bld.xml | 4 ++-- .vscode/settings.json | 2 +- examples/.idea/libraries/bld.xml | 4 ++-- examples/.vscode/settings.json | 2 +- examples/lib/bld/bld-wrapper.jar | Bin 27319 -> 29519 bytes examples/lib/bld/bld-wrapper.properties | 4 ++-- .../bld/java/com/example/ExamplesBuild.java | 4 ++-- lib/bld/bld-wrapper.jar | Bin 27319 -> 29769 bytes lib/bld/bld-wrapper.properties | 6 +++--- .../bld/extension/PitestOperationBuild.java | 18 ++++++++---------- 11 files changed, 23 insertions(+), 28 deletions(-) diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index c0ba763..bf65051 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -22,11 +22,8 @@ jobs: distribution: "zulu" java-version: ${{ matrix.java-version }} - - name: Grant execute permission for bld - run: chmod +x bld - - - name: Download the dependencies + - name: Download dependencies run: ./bld download - - name: Run tests with bld + - name: Run tests run: ./bld compile test diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index a2969be..2fb5ff0 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index d136e4d..33a9922 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-1.9.1.jar", + "${HOME}/.bld/dist/bld-2.0.0-SNAPSHOT.jar", "lib/**/*.jar" ] } diff --git a/examples/.idea/libraries/bld.xml b/examples/.idea/libraries/bld.xml index a2969be..2fb5ff0 100644 --- a/examples/.idea/libraries/bld.xml +++ b/examples/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/examples/.vscode/settings.json b/examples/.vscode/settings.json index d136e4d..33a9922 100644 --- a/examples/.vscode/settings.json +++ b/examples/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-1.9.1.jar", + "${HOME}/.bld/dist/bld-2.0.0-SNAPSHOT.jar", "lib/**/*.jar" ] } diff --git a/examples/lib/bld/bld-wrapper.jar b/examples/lib/bld/bld-wrapper.jar index c0de401aee76455c9e8acfc7894e646b5e9d253b..9b4171437891511f0ae86c15f176ff70d5724e86 100644 GIT binary patch delta 27497 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%0Dqi84JzV~s3V|9|699_i|z zjq<2OSx!bd*HxZ@@@QB8F(~J`+AB~V=PECxvBHgSI@-s(@c9ho<6P~NP@dpwe;DP7 zuJWTOPjdAihjPBFydLGru5tk7DX#K4C{In4)!ishbCr3%>8|nt8p~%UcpuAGxAk)q zU9O+K){_sbbeZ&X93L3y=YI$G^HO!0eqO1cl7GoZKc~_D9_zP^AfKWJZcetR2Ggj=qcYGTJpGFS^+-ikcrQ!n0zIT zqDC4|O_WcosEAfWRMt=hoq^@Hpmi;3*5U6=qYxuZ3t6McD8@70C^1Uyg`8$DB<}zT zV6f}})wC4$)9HI@Wq*vC`{|6tYl+vh=GHHv3m2dU85#+Zy*lnTTP5}Q&<3zkOsyi{$N%5IPId;Uu zzhA;zP?X(nJWU-fDtlv7KW*Aa&|G^dT3-^QE!$~RNk5%eZh!2iOY)2uT~WNBzDg9M zuW{AQ@v2*$s@n$l+CH#Xo&lJ5?xGRp#sS*dl4tCtZykIbNKU2m=_0z9lxx?nq2mB+ zDqTkf^fg*Q*HZ)CKpW^rkl`lu|2jt8Oqb9t=yjVW$|8`cfEtatAb^3E3}c>gvQ~@N zI)u8`A=I@Np?@$-$e52hWt8*wkUR{)EW%z&_fiKw`Ssq+B#Krz6!n6hOwqF~itbXN z=wMuS5p$@scVJbVI?LVE$=;v+RIvsE;LpV9`F-?~Ane8W`{{>kQ1^U4 z{d7%&upT|sV-Z$D=`}zI@1-lS2VZjtTu(Xpd>lfz8$F(cAVWa`iMiO=8tTWG0~ocB znrS~){C_mH(JQo(en1z{4*}^_!1@WGy#}uRF>R-x=}l;a0FI@3#sa+w&CVv=V83|) zVYabQw}NWU#_Vu5W{15onRJ6|V@@LDFo37nn8Q@cKk}8R#;0!ijFLBP0~TOynjc8= zrrmacUWbxKzKuyVOI! zgMT9VJ>a|tRq+;d)F1Q)6@ng>)NCv=PSHB{HfIZNv$w!U*BhrAm7tYF_)8Lmf89$T z;Z@`wW>xF1MV)T&eL6rrF9zW)>#_(-W22E)SOmK`(3HFn?)ZmBae}-d)J!xWZyKvS>aarneOD z6*FUE)-IZ^I~CiV#-!?GPY@Gj+o{GWoRA|q@`^m4 zJ-HW?|6^6ZvAjnCxiuTWGwo1l*S)KRXecYis5qaEoVt(BF~Z;kS;B$`Y9Q5#z$+=@E(tom7X7w;G6 z@;qDXOJ1gtYz|R#0nuJ@;X$GG?nNv>DkiRA#rsuQTX8*0{Eg*lMJ%{C9T2y&^%dVJ z_vU%A{v|Q7qh+p7-a{jcxTta=VR!F3{72}Toq5pk_wS-S$es0OmVc+``SQ|PrTY%% z886W^7<%!*E;_EvxyUtUdnU?{@p9W7oLgzz7E`;j863^QZmfVeXPK8f+ zAJ+D5`Yx>XPQ2f*%a&o-1d$}sNW(=FWs7FY7i(y$XrThJmdeCBnv1~iRBUBPP$EW(H$a4cZ*GQFP`_I?%SyQF5Y*e?n%)L;+>;+XgxIV znb?gcqZ#73l1?>N8LJTv6(AH?WAMJ8N-K>PW34u`{mxGIJ3HBLtkYJ0IDOk#Z=8u8 zpGvo?>x{E(A^kp?hbZ4GELT`XIb z&Q>aQ565mD20oqvy@+bPv~!7uF`P07wc?*O9!f6t_#|fi0NZN`#~Y|)7ib|fYmR^o z+8PrN*MgV6Q+EJCOYv^8d#~uPFM5f*sC=O0u{ykF6={A+uP+7zk10N=DL4uHoC_~# z4xQw<3gejaqJIw@v4wIV36sQDnu%wD=yPN&2Rqn`h>u~EVF%CBJG0Q%CFMF&F}|dk zOf2JUEa@;hNM0b;Wsx!q6wY> zmD?!;)BF+Bu#g&vT*Y4t3uEFRG4U@v{!>?2jH-_xsbi#z8EMcp9pTDktp95G&EdFVC@zD!x`d{POQ}d)PUYfCS}v}Fj9yJG;(FRBZh(y5 zNL$4%beZ@%T`g{dY<`0t7q?TtxD(KK(9`0Z^t{+fKM?oPkHxnz)BW^@c);<-CxRpV zYz}D(BK>*B24Gl3H`{fWQH9Y4DOT{|y+*sPdw)as3uqtgT}O7`MPLud+A*qDO($xY zQzlZnA2M)=#VoyK;vqU&q%HP}zkEvK46pdywoDr#0)H3p+amCS%@bAFx-SIP72AH$ zNyU~QL>=|J#g_``d)Y$}@YkEz*k+1N0n zP8)#rI1LxjJw-#pe$f?dOmlXBn$fNONXfq&ca&MiIKN7RN1>&=>Pz6zz$}#`?$}PAVg$$NH|sISOPL4{ zfyC=%h+mQ^-k>b;D;h7}f=&80#Pn@PJTZ%d%N!dQgG!Aa?JVFT&QWzF_JiNagIUD5IL7905oKkthnmnU8Cg-hT zHB+9z*it6HL-6r?VEZ1F${(Ps{{)Qxtg$`O0`Fj3W@F25A&qSs6V$G=<#+SqhvZ4xtyKD{n`7VUDbb)6czUe{=0wx-)aSvu9gUf?Ajg)PFyZ0;2>q!>7Lv{K%#V4NGEvsVmd_0>4@3?li zT*{Tww_h%Y7cWmQI#?K!D{6Pqh&r_8$R^YkA1tz1agmy9fDgfvxx3}69C-#B@e-43 zcTsf0cIwTM>&iWaMF+&iEq{er!I?4Hx>s(9$u{=IrFO&oy$59dz7o8MJB<9iSGTLY|lHQXP9OK%Ox>XD>xL7w1$&xgw2m-9e86vnYeu zvYonf4G!aX(DFDcg`n~|KxV&07-M7P%aL3A<#~uK((^q1@{*XmLVw2?@+A7AQO8}QQtpUL2;atiZ2iAiGe>$(?wpu)T~t3GPgGc<4E0pV%c zE5ETv-d^~myq)3R8I$+MoJKB6j-h+xIC@Bqr^n=R zv`0>$gK{FhEGN-xayq>uXV3?77JV#>gp$R=D@%kaOGSY^UVqG%vqgoRBTknmhz9s$@$_8SuW0!6{15f5Z$s$MCB53gJtP$UoE5svmr8pp)v}D8} zmD!Y|{V%Kz6tIM>lrnXlq&ra;!J8LUo2cv3=pgia6pjj~G&dT31}Ebmg3Gc6b!lQY zO^{zT&V?sgK!1hCR!)r|_6Qi;Xol9b&)9M}UtDR=Rv|7o&eL*ODK0e5M?XbN#CgUA zcr)l7ddIjB9-xOlpx2Cx@Rp`^)kT!G624u|Y1+X<4Ak)@O=V?^h-WgT#Zw|E+o{)` zhoL#W$@N}Nkl^DpGCrfy!(fl}qz>#i>hZMLD{uIWz<&>8$E@YBD#^Cp7SFuPZqO$k zEpJ1b^5LW3uZ6#OzkG-l#!o{>IE z?u*F-XE>lttw){%9Paf32li?9o5?zXgZwd24bFfTJ>QGFXhpr&Pp@bdw6tiy{DIbA zB?qngAAdRZuUUG{PTiLrEcZFU(k)125}og)1ZqBdG3+vzOX0Rd`-0G&fu z$uOXI(v5N>ZI@kizuZK-3CcE z^@$&|;<=Q0+?Q0zv9)ovmp(bo4(`2)1Aur_QdqB?b_7LU`O+FNR;wO6(&j^}jjV8< z27ium^C15Kgk=`RUi)zDO~GpMerPbxliiP?QClP9ajwphKaR$^k-JuZutftUVg;nuj^ox-hpZSFeZOjU(7I!7R6pDpui;l z5pXyr0wngt0E-ij0LCdphKA>&e)(sHh=12gevQe$!3D}Q02K!7Uog1iYB_#|efpF` zSgXKqkL%<3r|DVwv3|blM6voPLT;ro@_ZUAFQ%#T5?UuOrA~Pn-7T-ANAcV(uL8SV zi_urpbMh@{FO6X_r@iT#INl9d5{{ zP%ujSHrs69W~`P!8utLUuLuV4i%0mOh@EC5aZ)XBgiPH;BjqhFmuIZQw_}Z4Y`z_< zqe$tBBFE||(n1NI{z%PLKD_QUzJE^l+M(oa&~k_4$cap}vVCpigZRBl)x&ii6;sBV z;*x&lDaldkTwq7rr(beZW^zSgObv^vk!wnd`SXCvg$u04=zv<~vA?S(XjP~tKjP?) zxik!z+)h5ZowDQ(%9VG*)Z9fgJ{W2^i1r{BJp=y>?4#HWe(zVs{D`TtHF(Zp3KZ>ACrJVkxWV;4*LpXe7EiUP zJfo>!&F@zW%RT+7lI?{MVt=1H%^;l@j;XqRYK5e7-vPB6J9I{QI&W2uYSFVvAGQe2 znp(G)R+eYvF)C;AP5?}v7k*rZ$n)(}elL}0=4I|v0YNdfc?Ye9Tc?6{uB^^3d?BdZ z%rosY$#j0>Jc&A|d>Cv>-msWh*RLY`)fR05cO8Dim}};FUt-U6pMTmaDA#<1i-mS^ z7v*!h`Xw6eR3v4sZIjKI9G(U8DX~<(DjMW#aP58!*Y2mHQ~peZkfSyGZN?lB(X<8PV{r|sLQGiZ%iX*{f*!1bcmc*J-V zPGAGI7~jDhUU4l=(9+}+J8fx7*V4pl*243<4xW!Wcs}mnd6y2x9<-&-nsqmVb!&#Z z$gB0%HI#mc#(%&r9;O#*m~A4(Q}NFZuUh6+E4{`OUbWgwHD1+WpOh6Hf}_uN)i=~2 zqIzwTvmBE=81BF`=7H)UgMSIjPN)1FZJbS*UznUgS znuGY{K!1{HvuZk>bm&tg_=k<`-2VeW5A03{Y=u%=1a)x--(!L9(5WtUw?15NiWk(q zP-S(+sZQ9-Qk}4mD&iPBFO5$TEU@~R{U`Q>bwx3CpL5K9l6}lh>E%Xop0QhfOZ2N< znnZcVe)VlPjaZrOI{ZrUV-6=Q278kH4+!;N8h<4}p~>=7aKUHrr9Y=ed5G4^FK9E$ z=O{(nltDKu58bKKXg8iQxRm>p&#{xIQ@-&upKVhaEjFIff!WP8&3GDQX2w0>kp2nd zAY@#?S6OU4i#O@mNvrKSr|mhLXJ(Vs*MV{B>F5`94?w~G4DsNA)8 zXMa1ab(x)#oM&y#!`P=C1S9b1W4qPvc%9xZ79+K1zv_3>Z$R=-nKVodqmckVO^u{t zl})o%4$W0ru9W6H*8!CFk}SNQ2VNtF!s|c^ybk;ic#Q#GV}aLr;B_4EngF~e03W$G3l8BA-4C z&htEG6-U`;!zM?b%;#hBJbd0a0YOv+)Zk(|jg~v-eOf`OspL`9paZAV7&U_?sF_rX zXys%)E7S}pV>tn8hEMyL#a26x+G;0vxmpKn5K3-oa}%b0;&|7ROU)q z4wq|;b2RS5jTek&Kuzc0$+clVVSCOMg)fswJjTi2z3P?P!n)#TIA54+OxQ^iigS$< z=6Z^9J>K*B)%Wql=M@H2$9qLdiGN^=ymQDOB1#79w!)&l z6djOsRcS6_WN58H`fWaMBw)RA?67Q=ABVL+85a4B?>j;7B+WQPFEgwh^?zzV4a-qK z-m8B4g!;Kob*i7|s9$1=CuCKQdNXTEzk2HlxiLrm)_x7P!9dM2QKu(8ENUBOwTaS z2+I3^P)i30hMV1@6aWYa2mqS~^OLhPDSsqPVRdd}XiaZqWiDfE zVRLhhQ}0jHP!v6ncI#FjGAA;a;13wA1EruM;*bmpM$Cl7=?w8xHwu)Lj&v>lTQU+M z8V#TQqm1`Gs!XS5ZSrpKednBedi(nA`=_q}o}j3qhhfZjwr#WKZkg|W>)^ol&9~<< zSGGd0zWcJVWq&8ZpmM|zXHZsLhhe|g!s}+WccU|f0NaL!86h}X(uiCuU4WD56 z=s$D~rm&6~iJ495;%kE53iWyw;W^wr4beVUPob9gA@JQn06 z7$n{EcwEZ<08mQ@2z28o-Ejf{0Llaa08mQ<1QY-W2nYb12J^GCGm8QPn+EffK{hde z+4lRMJCi$^+$Xmr_j68s z>C~|kM6^KrgqH+qI=KvTQx;Rf4*xEH|FkZDXxp@v?K=V;F{Z5ZgP~w-A(K`l6(jy2a#$xx?L3Dd~IXQ)#tQ&HlpqAy4D(g@PLG>S&+G{&H@bPki@1O#{m zqf3Gjj1rDqu5jKc+mAD7JWXJ7b*VWQmnThYbu1DLZL5_H&oyWgO=ijm?2Fo?;jZ3T z0MptI{*+Hi?~;u!Qw*x0N~Y|8XrRX*@nc}7!t|zv5Rz(xrqVQE-R<8Qs1Jua{IT`H z*mk@{WByPK>|S1;-t%l~GR#dbXNHu;nR3Ayx~!9|oo&z@n#<$~0(x`uCFM>DX|n2T zb7(%Dr&EnVwG#Kj^d=C7?f&SBz@C_FyTG7@bOA6Ap&}JOTM`x}DT+CNHK`f(1}&im zsLa-27sxX;Wmv-hjrf}avDBbtlFvH$yu#ldkdn3BpbM!P6OIP=29)eH$?6pbt)x{b zqp3u)DZ@IvR7b4_t)?}QgN|@F1R<~{JP7WJ>NaYLK7WvAk}7tYf=`ZOnzK&T^7J0%UO z7PAvp)ky)Jwi>ie(oeGxEpg)3Fj1X?Oyd*dG<9_aw)wjjMYi>J2STxiJsp9bSTG#& z&`vBU8t#pB1j;)6p~k zT+u*xeLueE8JM3+sUqGzm;i3;b3hTD2nOpxAXdjDH&bfno%L(90xALEUi+2MPNr*A zW|Y*blMlicrd~V`2&6lAeeFtml?fvh9Nm*M;K5U`-@I28w1PX+nvA?;u&b5 zsSLwT>4JL5#ZWw?G=BgPVgxV@9YDcdONvs+ypp42V0CHrZxuNnZ!v#idZI0-66>mv$ET-_=|6i&X#yh(_$<}3c!$nzLK9S+&9Zj zsAq=V_ZWV%rH-0azdsmc$ONritwtj##YdH{X#CV4h2d-{8 z<)m!w+>_gDpvb4hXAT$aIfXjT~S`kEjj1kCIE z{mfTf^@2DKRGn#0*UK(hAleWr*|sUhXd@8bRfS6ySvccSq0 ziHWdcT8T-q*>k`>1F#&M4_N4}!(Qh@ z+1i@&7Ao-?!=r%m3)@*f6A0QVMNJ=BS6Kw7AweGM!v&NrlAKj>PsZ~-ZE(iu9uK;6 zmvXk?FHcbANoourS(zHE8ez21siw*4OyR$^>6wwL|8#R7Eg73P{pDDPXy1MDyVC^K z@;v(O6dW)UK|_q&s-B=qTtG}5sGn`?M0_G^e0>HV%v++kqqe)0EJzmRTYbTSR9Q4m z%xseRWQ=E116Spn6h)Px&l?v&5i#q;MA=nJLl^4&-Bgn z_*TtsM3yoo6e{I8-x6=3XIvK9U_^c_%hY(YNBSkb!MeT}P|!cU^}ASdpMgNw(>JKE z)A|<~-qN`-r7TtINHMR2L&y&gQOVzAy~%(nj#a<#RnoSDW{n}5K>`EE8yKt|yUV{Z z4lLsSi zpDOVVLLSq$gZE?qCNfIJ-WF1r+fGIkL&FdWqNi6_lOf*^GpBT)DGnF;y3Hy2G)n+e zX2-S7fRI5fTWZ7P-gXy_f`ojf#3hfJgi*)fcExI<=)^&{%7`HO-SE-mcUHBNxPcw& z;|A`p72dQ?$~?puT0lekMa8;y&lagCwRW(puTXl4Rfnz11ngm>vs#=QhCPX7mtSICcx7PVm%McT0iiWGx^E$-_eXKR;<%Z*11$5S6r}U) zz~DQY1zkx)GIhBdztN4dV5kBd&`5<3(nrIA^B|M@<)sovXqx6w&u6nJ^^B2j_K-WJ z-+N@w^5`3qT!AraGG7IGBQL<;VBtk)Vbh(-`JaUnsPuFaeVaC z{04A`YAk_9<*Ls-xCo3Ub1Zrw7c=;%?-%-$Cko#AE)d~r5sxAkatNS!Q4caa$b$sn z&ZiR!9-LN^2hJG5+J)nPq`@%#SWG18BVGf?}?=p;~54n`g zy2a5G@<)Io)ir)r7C&_Cnne4P9SDvc3bCKV?xoNzs)d7#liN99on+c=X#hXm_$03*o5y}ziY|#3aVT5dw(aXa;i6rJf5i(jfk_D!pEq;yI+p_JTVIF=s zV;}D9Vx=_luA%{wf;m=gNSKJ#6@T2J4Djm91!~a%Tc$`t9*4UMvzzRcsVdyqmeCfW zKp_)ms>o^-{qCpJP3nKFoZ^aG>Cw(mB&(-Pk6y8mt95kFT;S&Cby#vbsJZ0zaBDdT2YH; z`BMn7B|1@y?w~mnv861rTJ4p&jt$_FQMjbGqt*jgxp}BnA_=Gp6`QGz?^gj?rbLul zp%Vx`#m^zBD}hq~khNBeig`hzl1w9tlT{5Ri^fA|s!Fz-D{T6HBdsZF{~1bnHR7RT z%_y9!o(*u-uBw|+AYD1oW|yipVi(QB9eAYu-vJZq_PRz(x>?vkj+Nc_k#Gb}nxv6d zlWn^mTs{G@{V=A@;ke}Ve&|y*UikMNrzslNt9aZsn0)4}3h`+Ip>2AFdcS>{!j%RE zRr)qeyOraF$@ja>Y=)1^6Gy~Zjw0jm_rKf`K!3IcCcrgNXP%HGmnmvQ#w_Qf<&tMW zya2I_q?rbzm%^2AhUK+83rijDoGLOI{l_D5%BwG(-jMj{73xV3R=>&h?XkJFhIym< z7FN_7v@AGVBB3=*D^Kh3#fZ%3&A%Q8Z0xY`K)NJXLx1nGf(rT~cdj0V&0>&9567L_ z26vlhNZ=00`q7K29uzckb= za@9j$Cdaqg?+-)&zL90-QmJfyLMl&_im}P*)im*e1c$Njy7+ZdTZ7-6(HjCgo#wFr$X)H3>@L+7|x5(`FVl}FeAhp!o~#k z1<2zbMBdgXhi!U+#!|w|^UZo@LMCVpVYyRN>G6 z9lCUHi6M#mbecSFuoH%rNm|Tl#LH;m)c!Vfzf_VUSkQ#3k_i`MZ`eT@wHCKl**p0$ zQzxLsPo114NVj>W;)$rLpHX#R;X1rg%uK)A^g}<_)m9gO%f(K#sMt*80TymBi8qsA zGJTwt)y|&QQ@eKJQl6?=9Z znUE9BU&>n6QV*Z0Q8)Xxs0#<}DkbXCh&5^^{GLvWEa)!Eg#>r|z$eDj{zOoSS^vrY-aHxCH>;4JY6VjQl+~iCpT1R31=#O>U{jj3xFZ!v~9`3+TL|~ zx{1S{+4^#3!RDV1xLuuY&eWhSBSOdkTd#Sl)Q`^RRv0vU;WKl7%?>8C#5(G$g)y?^ z4Ku#AREng0CV_;$71EpOR00j`bj(TEe)e^+HlL~EJJl>pJ$XqCXIWdG3QP|rw<)Kn zUV+TDJU%huGqbs+egGs;E{h8R(za6C<~W^f^ZPRDgTP?n_wSr;KBv3FYRpFqpC|Dz z(N^0xBt-jSRc^y!(HpaE4J>bfh^9~Z%BP`gM9Og%i1w_H!GGB#Cb1F%kJ#ExY#3J# z%J8{ zjpgRn58sYT+b*jBW$Eo(6LrCks-xB|_yzTbW~X{ELP< z#YtsP9&XiN!l3hce6)PFMk(D$CA;ZI;S9HbI{MD(Q-GvN-oZdCyuvhgw{q_aDO(eI z500jT#Hnf)abId()a9w7X5oOGwCa6sdsXJ~l;MHLAz>e?#b~+ii}oTO+Vp85e)GC4@ui7aR_Qd$TnnYcaxs0WR8Z{n#88--GWhpI`o2CCVErwl zYBPN1fLUq26@|Q&t*YtZ6#E$0{)uwN73e{-V~(UcNUrERXWbAOll#C9k8W9Z-ISq) zL416p+Vo)#Va-UqG0-Im8#b~2`CWuk1BI<88ekpUXx%1otT}pIVW0R$VL+?eUbu{< z;c4U7)>^4*aH}L%Y=iHqj~y*Bd1#nRdLx`?aId}JW=*A=0bn)e;;O%=InAGS0J^CB zgDP@XiU``m5u+G;xe!UqE)KRKLV*%A*=^zWA-93|sAM>8=yd5Pkx$8}ak{SxZLHe>6$&o;cdv-YXov3 zVzo|2@*&xGa20)7@r>Oy1Y2@r5Xc9X)oe#mWv9H%H~-7m5#u(WU?*5a0>zV(2l;|_ zAa;B~(lE0L``*7G>)Vub1H-eFde)VD0MJKqJQJ;jzF9@Sd=nl&COis#(~5k#C!T&x zJQcqEl6nzLzV=8KQdXk>l!Uo%WHaP8|1;^IY*C&>O71a?zE7jJ2nhn^=q!ml&r{z1 zZ028<_Lbom24Vb+^+aQ$3e2#g==Gvc*M}??a#$Qwc~~TR7uYAewf6mpwz;b-1RS)S zR*Cp{39705@y>MKY?@d;ZnSZuu0X_EW^WApsow2}J=f^{k8mfLb3uf2;iNj@(PZSW zQe~maAet1N;oNsMy(7k<(IrAtF1``Q#!<$>bicnocq12sxN&2*SpJ~RqQ_RL%NJjf z>C&}K#Uf4;MG13tV6%g3^m+a010a0Xu+_tQ=WrJ44wcf5$@04jx+lu(q@GN3GpVVWe)#4S`4D#2#!|WVy^;Fg zj~E-V$%wG>tu(*rityOEd;Hp2UF{O%4Njh(?4n@Wu8|u&DQn_I{|$!S8Gt3Jj%E^{ zg%H-WGeaee)h#&v8Q(j7IH!zBd!&|p&Fr$Gyvtov`^)gluovp0SzhIj-aMVT&9qHL z90BQ3zsrU0pNcCPq>SGBuTj|2( zv(?mfc`|cb)tQyKf0s`Z*8rX09yJ$up1Yx*?F;m5UOT0HE39R{S z+~?eyFe{ejJ(R<*N+wTTz7?^ku=s_z&qp<7^+@@g!qR>Q3ySsv8BXK!KXB%r`Sis~ zPj%eq1s~@g^rX3Oa62+)OE$mFJ{cdfsFwVIl9+)V=DnrrIx_CMgaAA|cO+b4#fgv~ z8dB^)toNC)HnK#H-f|MS_=Su_(Tv5QkCYQT&>`;E(TRCBn!!2deK*H;R5W42PjM>n zl<|eO8ai4hEFhss-;Led1nb$B^=dD*Zg}&#ROZDx_^eul(B^vhjYponjmBC|BiuOuZ~og513TC{XzH$Z8b$xhJDzfD(#i-CeFKi~pG`giBn%qq%f1lQR^}1* zp@%t*q_NW*sd&i^hT#u-Iyu$z&OH{bwK=2e2$Xq1qcy!Nuj9W1 zcN?u{&-nfK*$#Fd^KKPT@%|z#`)c{vl|j85HqLfMmI1Kgoc>6Z|5kxhQr`_P`Iwrd z&QPH^xW7^Uw9SE*?Nn6?jKy96!iwSP&=w-J8A1#n`z7 zc-R<#zGTI2sf;Bz>zaN|l`Wt3BaC+~KPOvCplow^(3%B@ftI1JO#~-(JaY(p)4zBMhfgG z`+TYQ(ULjAo_F~_XdeU>!ZzsR=F)WO(FpltON7>?h8d8p_4zvp*QudOr_QrG6jK8X z5N@p-B+S`kuy(O_A(7g5THKHLE z%e!Q$=~zIc$BDi4%P~^E(X%ryN@N<{im#6tx%I3*)D#xLM8SV#Y`U;hE0B#beRi0v zn@Ce!5RFWI7bZsT@T{F2@Qv3|B*g$@>{i7rBGJPkq*Gs=($buCZFS4ODR&Bwe1(mH z^DuV`E{k7*y2|RvHx*yfFbIwZlcl!laM!*QULL4A3VS2@K;IddRry70l$^M6mf&&6 zJ{NXcPK6<8J8cSH}CA}3ApxsF0g=Wpu<%O z+O_Cd$LPwz85~PVoeXeAmodIyG8=kzld)}wtc74ao)OpdkATb{qBOlYtS#;4Uy`0X zWb^4mKxMo&wSBXsXO=Aajue|q>AJJ?aXasM5EG`ZnV=T8@b1t7ALM;^#f0g-SYgq< zs)(Oj2E;oH)2TYA)`RWaKR!Sb4ulp<@GyT_F2P=~{8TA=@D0V;SGkPm z;F0ZcWj;Y4T6P z3QiP7?_ZA$ZTj5^izEdVWM3+|kcK(L+EFC8gyh>%L=H~%ZZU6F>paVk#Ld(;Z8qef z2Wg#;@)EU&CgVf6!vJ|Bpj&6*4?@@9Yxg(VpGZ#uK$8Y?g1EStfsR&Zj`QRiV0<3Y^#6%+|EHqYT3hsq2`3NJw;e>RaOA zsa}{Cn+m5`Q0dn69us4+B@2|w7^ZJK~a`0TXi)4Ne)X!KX&q@{15!) zIl0?!zsOhaUK1cAJ7F)S!|ac2&)zIflh7-7l9+tPsdaoHI5}aMfgRO=`dFAZTTZ|4 z0_zE48xmNWUEUjw##(4YswLjzsoQ3WM|pp)oPF?gI|9o~Q!7G{Xo%m3kkfUEo{eMS zjjH(beRbe;dC~b{OI){%Xx7(>0?J@jwbHw0*m3OmT@>I;lK_hwI`5<$Zq)-fNusb^ zm~Ih?k;x)S?m{03&r)*a={W4d)Dt#Dix4&6!cUry*$eKAzjY#ct9#2QjIXhmdHf-h z{*U`xn|wdxch`$0pD0 z2^fj;&J4C}*AiE~6~vrff8L=@CAGG#3o23Z86swhClrG*pIOu2K22D!|sD8+L~ibrG$WSH1jg zG7V7EGb|Q09)HKD1&J&*SCmpXqoFgF;n;K`+H?_Y?Lcz&5N_?ra(d>*IafZzRby+e z5!QzKB-=3Lw;-l$uvfP%X^1X3{9z)qh8k5=4k_{4Hy_uN|C_BU;v&~9zo0+`Q+G$P zXr8bA*1x~qnObQ}C|;6TATp_orp&MU&<60nSLPBm@6#~v2i{vsK(wm_Ct$LMM9d}2 zglzqw#DP`jmKBgc9GScnx@D_+aX+0TnoHyRGk28_Pdkg@A)f# zqnbqdWf+EW##m6+L7dPnqjK7syo@rP&zJ)oDvkhmU==i2?Kh){v_+K_&*k{Dv^PFE z#BLeHZhK4dIBp1m9i)4XJ&#{Ph5!UOz8l9<_yXTts^B{?10nKCZ`!C}C#+;Tyn&*C z8(dOfe6-wvfSh74tv=CY&4`nN%-IF}TS9vYyOaQ@hUchf60p`0@IPF)G`6+wy1c=r z#a-n&9A+c2NGlciyg}WGH4P{b2gVK&kOKkcXD!u=c7aFZVDi4O4F8C+q5ztN*v&)y zn&G-j5KgB|he6aY<}1c4V+UQ3#&)YAq?-cSEChR}GkmePN8<2`M)((biBerQNl#$0 zy^*~I$xI*IxwGwpV5@g?Ep%cVmu7seH<1Uv&~}K1>xJx>!RYOgV<(Av(08>41u8^0 zpS0Je8?!=(_}r^zzhY)Mi2*g^$M`I(hvDro_*+x=NV_@*HKN%gt*d4a3ANOk3n@pP zvA5f#*$nWb+^*(s{Y`_uibA`N#9rm^26+xwxBGWAPm3V&l+_dUtZdW6yG+QfvT&c} zDk1YL_lbouNWG(HP{4}>5K&N3NXRo-NHytl@bmS>SWSsys0VW~0TAc^QH77Pi@+W& zEguvkJ$yz{IFzUO0V?CfSz~03=v7LB3~3Nvh$FjeL<5=s^xNF!S{2q&-J85^Z!#&$ zLw(5k@KXt6StoK%u6OZ$b^e{|+%(?h$@tNHy<~Rt@{11gDi}$)%g;fz(XB0-J`+a1 z=l3HS8P6ChsAx~QjGjc>LmQFI&7g)+K~KwD&! zR1KD6E7>7-K(#X6wJaQ$g;GL;dAa}u_Dd?FKXT)azj1Fj0YFU9q`7EXy5y7jgKXCL zg$k?3tp8^Z+&z7NB^W^dO*Ti`?!s)$1Fukf&u;~kNohXq*gX= zIa6KGVAAi(()g!zpnHk=xa=Ym4=2japX4zuT?uHN%E8z);QFtZyw&>f-C+8R0!3%E z&q(qefSxjIb6y-H?)y)WhE>tO7f%;+ld=T%Un|W0N@*$uD++?uK_gZ<9Lk%=Z9A;+ zqK4%S&wtST%t*%8T{si7_-uI7o%&(biYI#&XJ7_royTcZ(+G$8y~7MZjgN`fjj8;6 zZsT?=FCz3rOoQ;6CxgkFY#VOYLPD#vhKjIz0DL50BCs}Mur1-FW&&%VdlY2AIv3bM z!4oxD(E=E5DOj5}W*uTCLI6Tl(j_t$OQK-kZn)vCRn3?a!m&%%6Gwxu_KHBvJV<_f z5m&uPb7FBM;#fY?FtgMsCBg?i>F`&%J4t)fzwx5WQE!xhh`eI&OVy=90pUs|gHi!A zfE35Wq59rmxamqX(#LXP`=H~6ua~dXh}9v@fO`sTmaKiW)O35^ zh-@c4me@YP=aoMa@=f2qzdRxa<{7eK0dB8ho}Z*%SU?R*`sB{aQp+1@;8Uh*Kmi4; z4NMMsKDoOl8teMU^nS)t2ngT20ZH_<%r)5*)sG7Yo9#AhPXUHbVdMMCIq)(tY_XW#O=2sUK*7&;L&F~ zCG3SGy3Ae8OoTNq!VWQ`XuwDY>n@Eg>)ME`R@kRkad-nYVCadcvbIShPu8^gkGt@B zx-#29m$6O+-F6dp-#UGzsz7C9A;DFt4#bN~`HmfuY7E-fZDE&7 zQHLxXD$SQpuBF>i{6Q&H%Uf?b}tNzbHAm8PykFN?BRo2av@25JK;m)r8DbXv^uugclD zP8T-UtS_BqilMLSb!>3PIe1KaSRLeSh_C&yzI0faS*GS`ny<%NSlqDuLU7?WL0xDYVS0M;Y|kAaAZJjcR7}sLBFm@(jU_eg z9LlB(evlftPY*i`abK(Q4UsW&UB``IXHRy#%Mk1ESX8lBOM9MWrA4h^q91G)VEx!`5U)9`w!*G)^>1?1g!vqobn+w>emY>*uOUv4f!;7aEoKO4 zk@4rR#6AX|iBUHqXxscG&bzVylJS{8cL5th;_HAc;}SsQZ!`D)2tUfxLCMgbEM z$M7<|y>)4n-ex|XZvP}{bG!Q-RgJ@6rx2^GbN11*12wE*z$8)Y-4bzO6ROBLdq%$f zh8k82u4_G)e3x+u6OKv?UdtIjh=XIfn*2}4()$qqgv^W4^-Hh3D9p&=?KjUO0jDSc zBGc@idP@-okRrro1C=oQj^2{uQ$&uu6kg|hvo?11@QV7WUfsn4WN{~0TWVXbWuni( zA48Ysb?4<30M+*dRhqNu`D2~?OeP^6os9VE1UMwrI|1m$*O!l_48f~(>v9AH>F%G_ zNy#VHcT9MblBixNSY;~W(=k;i8fukZtrM3pZ516{)!q+aevKpQM=tGo*hKal#^_qx z$GnX0HNKBcT9D_I?Kr1HPy0Nc+QP~#P{I}%5_ba9SFCOt&$ zeK}15*CKM>I84W#%m%yJx_evgJ*9Uo5oW4;x<3 zHeb&3!Q%Nd7`Vm4yXp(K`YAl!h}QR3oR9jCSdl36Q01PT2ZX+fk601iko%D|FRlq~ zIz8dG08H-fJ2_ZbEW9u+AK&Z@7zjK0O7)c!UwiP}QLCmFw7^4*hs`qowDR4fzpdKu zHA=meO&a$Oi(J-eWuTJ3t@`io6}#1cJvv{v3;a8m9HrkM%XY(GW6F2+|9Zr|Zddx( zD)nks>{c#&uG*|xbCU3XC|N9`~O~}C)`2R^O{tvd6 z#5igO_ZQ*a?u+pLzX6W;zW|c-tcm_B(f{ls{(oorx^odqQsN?H{J+4IQDa%Zz`?+R zzQDi#uLe%`Nq?+G{tNXNfw##1S5P)27#QXM3KDfpVzi)6va&%E`%gdr=kOr@uR!-- kU|^zh;)WU$Dylyf6_jM5Vg6GO_jS5{rSAQz1_S$l0B;2(AOHXW delta 25376 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 diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 736a63c..9d4088a 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -2,8 +2,8 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.1 -bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.5 -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.0 +bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.6 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.2 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= -bld.version=1.9.1 +bld.version=2.0.0-SNAPSHOT diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index c66e43c..60affa1 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -22,11 +22,9 @@ import rife.bld.publish.PublishDeveloper; import rife.bld.publish.PublishLicense; import rife.bld.publish.PublishScm; -import java.io.IOException; import java.util.List; -import static rife.bld.dependencies.Repository.MAVEN_CENTRAL; -import static rife.bld.dependencies.Repository.RIFE2_RELEASES; +import static rife.bld.dependencies.Repository.*; import static rife.bld.dependencies.Scope.compile; import static rife.bld.dependencies.Scope.test; import static rife.bld.operations.JavadocOptions.DocLinkOption.NO_MISSING; @@ -42,18 +40,18 @@ public class PitestOperationBuild extends Project { downloadSources = true; autoDownloadPurge = true; - repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); + repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); var pitest = version(1, 16, 1); scope(compile) - .include(dependency("com.uwyn.rife2", "bld", version(1, 9, 1))); + .include(dependency("com.uwyn.rife2", "bld", version(2, 0, 0, "SNAPSHOT"))); scope(test) .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2))) - .include(dependency("org.assertj", "assertj-core", version(3, 26, 0))); + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 3))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 3))) + .include(dependency("org.assertj", "assertj-core", version(3, 26, 3))); javadocOperation() .javadocOptions() @@ -96,14 +94,14 @@ public class PitestOperationBuild extends Project { } @BuildCommand(summary = "Generates JaCoCo Reports") - public void jacoco() throws IOException { + public void jacoco() throws Exception { new JacocoReportOperation() .fromProject(this) .execute(); } @BuildCommand(summary = "Runs PMD analysis") - public void pmd() { + public void pmd() throws Exception { new PmdOperation() .fromProject(this) .failOnViolation(true) From 8a5b9c94311e4ce2a165911f35a02aedbdd61a2e Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 22 Jul 2024 17:13:41 -0700 Subject: [PATCH 17/82] Ensured exit status is set on failure --- .../rife/bld/extension/PitestOperation.java | 61 +++++++++++-------- .../bld/extension/PitestOperationTest.java | 14 ++++- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/src/main/java/rife/bld/extension/PitestOperation.java b/src/main/java/rife/bld/extension/PitestOperation.java index 5564cc7..36758ef 100644 --- a/src/main/java/rife/bld/extension/PitestOperation.java +++ b/src/main/java/rife/bld/extension/PitestOperation.java @@ -18,10 +18,14 @@ package rife.bld.extension; import rife.bld.BaseProject; import rife.bld.operations.AbstractProcessOperation; +import rife.bld.operations.exceptions.ExitStatusException; -import java.nio.file.Path; +import java.io.File; +import java.io.IOException; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Level; +import java.util.logging.Logger; /** * Mutation testing and coverage with PIT. @@ -34,17 +38,12 @@ public class PitestOperation extends AbstractProcessOperation { * False constant. */ protected static final String FALSE = "false"; - /** - * Source directories command line option. - */ - protected static final String SOURCE_DIRS = "--sourceDirs"; /** * True constant. */ protected static final String TRUE = "true"; - /** - * The PIT options. - */ + private static final Logger LOGGER = Logger.getLogger(PitestOperation.class.getName()); + private static final String SOURCE_DIRS = "--sourceDirs"; private final Map options_ = new ConcurrentHashMap<>(); private BaseProject project_; @@ -330,33 +329,45 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + @Override + public void execute() throws IOException, InterruptedException, ExitStatusException { + if (project_ == null) { + if (LOGGER.isLoggable(Level.SEVERE) && !silent()) { + LOGGER.severe("A project must be specified."); + } + throw new ExitStatusException(ExitStatusException.EXIT_FAILURE); + } else { + super.execute(); + } + } + /** * Part of the {@link #execute} operation, constructs the command list * to use for building the process. */ @Override protected List executeConstructProcessCommandList() { - if (project_ == null) { - throw new IllegalArgumentException("A project must be specified."); - } else if (!options_.containsKey(SOURCE_DIRS)) { - options_.put(SOURCE_DIRS, project_.srcDirectory().getPath()); - } - final List args = new ArrayList<>(); - args.add(javaTool()); - args.add("-cp"); - args.add(String.format("%s:%s:%s:%s", Path.of(project_.libTestDirectory().getPath(), "*"), - Path.of(project_.libCompileDirectory().getPath(), "*"), project_.buildMainDirectory(), - project_.buildTestDirectory())); - args.add("org.pitest.mutationtest.commandline.MutationCoverageReport"); + if (project_ != null) { + args.add(javaTool()); + args.add("-cp"); + args.add(String.format("%s:%s:%s:%s", new File(project_.libTestDirectory(), "*"), + new File(project_.libCompileDirectory(), "*"), project_.buildMainDirectory(), + project_.buildTestDirectory())); + args.add("org.pitest.mutationtest.commandline.MutationCoverageReport"); - options_.forEach((k, v) -> { - args.add(k); - if (!v.isEmpty()) { - args.add(v); + if (!options_.containsKey(SOURCE_DIRS)) { + options_.put(SOURCE_DIRS, project_.srcDirectory().getPath()); } - }); + + options_.forEach((k, v) -> { + args.add(k); + if (!v.isEmpty()) { + args.add(v); + } + }); + } return args; } diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index 57623b2..0fb9902 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.Test; import rife.bld.BaseProject; import rife.bld.Project; import rife.bld.WebProject; +import rife.bld.operations.exceptions.ExitStatusException; import java.io.IOException; import java.nio.file.Files; @@ -29,7 +30,8 @@ import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; -import static rife.bld.extension.PitestOperation.*; +import static rife.bld.extension.PitestOperation.FALSE; +import static rife.bld.extension.PitestOperation.TRUE; class PitestOperationTest { private static final String AS_LIST = "as list"; @@ -287,6 +289,12 @@ class PitestOperationTest { "--sourceDirs c:\\myProject\\src"); } + @Test + void executeNoProject() { + var op = new PitestOperation(); + assertThatCode(op::execute).isInstanceOf(ExitStatusException.class); + } + @Test void exportLineCoverage() { var op = new PitestOperation() @@ -547,12 +555,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .sourceDirs(FOO, BAR); - assertThat(op.options().get(SOURCE_DIRS)).isEqualTo(FOOBAR); + assertThat(op.options().get("--sourceDirs")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .sourceDirs(List.of(FOO, BAR)); - assertThat(op.options().get(SOURCE_DIRS)).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--sourceDirs")).as(AS_LIST).isEqualTo(FOOBAR); } @Test From 6afb669a0b1b43e48122062ce8a7358f302006db Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 22 Jul 2024 17:18:07 -0700 Subject: [PATCH 18/82] Removed report dir --- examples/.gitignore | 5 +- .../com.example/ExamplesLib.java.html | 163 ----- .../com.example/ExamplesTest.java.html | 238 -------- .../reports/mutations/com.example/index.html | 66 -- examples/reports/mutations/index.html | 65 -- examples/reports/mutations/style.css | 563 ------------------ 6 files changed, 4 insertions(+), 1096 deletions(-) delete mode 100644 examples/reports/mutations/com.example/ExamplesLib.java.html delete mode 100644 examples/reports/mutations/com.example/ExamplesTest.java.html delete mode 100644 examples/reports/mutations/com.example/index.html delete mode 100644 examples/reports/mutations/index.html delete mode 100644 examples/reports/mutations/style.css diff --git a/examples/.gitignore b/examples/.gitignore index a2805aa..71a3cf3 100644 --- a/examples/.gitignore +++ b/examples/.gitignore @@ -52,4 +52,7 @@ atlassian-ide-plugin.xml .idea/sonarlint/ # Editor-based Rest Client -.idea/httpRequests \ No newline at end of file +.idea/httpRequests + + +reports \ No newline at end of file diff --git a/examples/reports/mutations/com.example/ExamplesLib.java.html b/examples/reports/mutations/com.example/ExamplesLib.java.html deleted file mode 100644 index e57c4ee..0000000 --- a/examples/reports/mutations/com.example/ExamplesLib.java.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - -

ExamplesLib.java

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -1 - - - - - - -
package com.example;
- -2 - - - - - - -
- -3 - - - - - - -
public class ExamplesLib {
- -4 - - - - - - -
    public String getMessage() {
- -5 - - -1 - -1. getMessage : replaced return value with "" for com/example/ExamplesLib::getMessage → KILLED
- -
-
-
        return "Hello World!";
- -6 - - - - - - -
    }
- -7 - - - - - - -
}

Mutations

5 - - - -

1.1
Location : getMessage
Killed by : com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()]
replaced return value with "" for com/example/ExamplesLib::getMessage → KILLED

-
- - -

Active mutators

-
    -
  • CONDITIONALS_BOUNDARY
  • -
  • EMPTY_RETURNS
  • -
  • FALSE_RETURNS
  • -
  • INCREMENTS
  • -
  • INVERT_NEGS
  • -
  • MATH
  • -
  • NEGATE_CONDITIONALS
  • -
  • NULL_RETURNS
  • -
  • PRIMITIVE_RETURNS
  • -
  • TRUE_RETURNS
  • -
  • VOID_METHOD_CALLS
  • - -
- -

Tests examined

-
    -
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (9 ms)
  • -
- -
- -Report generated by PIT \ No newline at end of file diff --git a/examples/reports/mutations/com.example/ExamplesTest.java.html b/examples/reports/mutations/com.example/ExamplesTest.java.html deleted file mode 100644 index 03b4b4b..0000000 --- a/examples/reports/mutations/com.example/ExamplesTest.java.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - - - -

ExamplesTest.java

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -1 - - - - - - -
package com.example;
- -2 - - - - - - -
- -3 - - - - - - -
import org.junit.jupiter.api.Test;
- -4 - - - - - - -
- -5 - - - - - - -
import static org.junit.jupiter.api.Assertions.assertEquals;
- -6 - - - - - - -
- -7 - - - - - - -
public class ExamplesTest {
- -8 - - - - - - -
    @Test
- -9 - - - - - - -
    void verifyHello() {
- -10 - - -1 - -1. verifyHello : removed call to org/junit/jupiter/api/Assertions::assertEquals → SURVIVED
- -
-
-
        assertEquals("Hello World!", new ExamplesLib().getMessage());
- -11 - - - - - - -
    }
- -12 - - - - - - -
}

Mutations

10 - - - -

1.1
Location : verifyHello
Killed by : none
removed call to org/junit/jupiter/api/Assertions::assertEquals → SURVIVED

-
- - -

Active mutators

-
    -
  • CONDITIONALS_BOUNDARY
  • -
  • EMPTY_RETURNS
  • -
  • FALSE_RETURNS
  • -
  • INCREMENTS
  • -
  • INVERT_NEGS
  • -
  • MATH
  • -
  • NEGATE_CONDITIONALS
  • -
  • NULL_RETURNS
  • -
  • PRIMITIVE_RETURNS
  • -
  • TRUE_RETURNS
  • -
  • VOID_METHOD_CALLS
  • - -
- -

Tests examined

-
    -
  • com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (9 ms)
  • -
- -
- -Report generated by PIT \ No newline at end of file diff --git a/examples/reports/mutations/com.example/index.html b/examples/reports/mutations/com.example/index.html deleted file mode 100644 index d8896a7..0000000 --- a/examples/reports/mutations/com.example/index.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - -

Pit Test Coverage Report

-

Package Summary

-

com.example

- - - - - - - - - - - - - - - - - -
Number of ClassesLine CoverageMutation CoverageTest Strength
2100%
5/5
50%
1/2
50%
1/2
- - -

Breakdown by Class

- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameLine CoverageMutation CoverageTest Strength
ExamplesLib.java
100%
2/2
100%
1/1
100%
1/1
ExamplesTest.java
100%
3/3
0%
0/1
0%
0/1
-
- - - -
- -Report generated by PIT \ No newline at end of file diff --git a/examples/reports/mutations/index.html b/examples/reports/mutations/index.html deleted file mode 100644 index 2693701..0000000 --- a/examples/reports/mutations/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - -

Pit Test Coverage Report

- -

Project Summary

- - - - - - - - - - - - - - - - - -
Number of ClassesLine CoverageMutation CoverageTest Strength
2100%
5/5
50%
1/2
50%
1/2
- - -

Breakdown by Package

- - - - - - - - - - - - - - - - - - - - - -
NameNumber of ClassesLine CoverageMutation CoverageTest Strength
com.example2
100%
5/5
50%
1/2
50%
1/2
-
- - - - -
- -
    -
- -Report generated by PIT \ No newline at end of file diff --git a/examples/reports/mutations/style.css b/examples/reports/mutations/style.css deleted file mode 100644 index 303bfba..0000000 --- a/examples/reports/mutations/style.css +++ /dev/null @@ -1,563 +0,0 @@ -html, body, div, span, p, blockquote, pre { - margin: 0; - padding: 0; - border: 0; - outline: 0; - font-weight: inherit; - font-style: inherit; - font-size: 100%; - font-family: inherit; - vertical-align: baseline; -} - -body{ - line-height: 1; - color: black; - background: white; - margin-left: 20px; -} - -.src { - border: 1px solid #dddddd; - padding-top: 10px; - padding-right: 5px; - padding-left: 5px; - font-family: Consolas, Courier, monospace; -} - -.covered, .COVERED { - background-color: #ddffdd; -} - -.uncovered, .UNCOVERED { - background-color: #ffdddd; -} - -.killed, .KILLED { - background-color: #aaffaa; -} - -.survived, .SURVIVED { - background-color: #ffaaaa; -} - -.uncertain, .UNCERTAIN { - background-color: #dde7ef; -} - -.run_error, .RUN_ERROR { - background-color: #dde7ef; -} - -.na { - background-color: #eeeeee; -} - -.timed_out, .TIMED_OUT { - background-color: #dde7ef; -} - -.non_viable, .NON_VIABLE { - background-color: #aaffaa; -} - -.memory_error, .MEMORY_ERROR { - background-color: #dde7ef; -} - -.not_started, .NO_STARTED { - background-color: #dde7ef; color : red -} - -.no_coverage, .NO_COVERAGE { - background-color: #ffaaaa; -} - -.tests { - width: 50%; - float: left; -} - -.mutees { - float: right; - width: 50%; -} - -.unit { - padding-top: 20px; - clear: both; -} - -.coverage_bar { - display: inline-block; - height: 1.1em; - width: 130px; - background: #FAA; - margin: 0 5px; - vertical-align: middle; - border: 1px solid #AAA; - position: relative; -} - -.coverage_complete { - display: inline-block; - height: 100%; - background: #DFD; - float: left; -} - -.coverage_legend { - position: absolute; - height: 100%; - width: 100%; - left: 0; - top: 0; - text-align: center; -} - -.line, .mut { - vertical-align: middle; -} - -.coverage_percentage { - display: inline-block; - width: 3em; - text-align: right; -} - -.pop { - outline:none; -} - -.pop strong { - line-height: 30px; -} - -.pop { - text-decoration: none; -} - -.pop span { - z-index: 10; - display: none; - padding: 14px 20px; - margin-top: -30px; - margin-left: 28px; - width: 800px; - line-height: 16px; - word-wrap: break-word; - border-radius: 4px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - -moz-box-shadow: 5px 5px 8px #CCC; - -webkit-box-shadow: 5px 5px 8px #CCC; - box-shadow: 5px 5px 8px #CCC; -} - -.pop:hover span { - display: inline; - position: absolute; - color: #111; - border: 1px solid #DCA; - background: #fffAF0; -} - -.width-1 { - width: 1%; -} - -.width-2 { - width: 2%; -} - -.width-3 { - width: 3%; -} - -.width-4 { - width: 4%; -} - -.width-5 { - width: 5%; -} - -.width-6 { - width: 6%; -} - -.width-7 { - width: 7%; -} - -.width-8 { - width: 8%; -} - -.width-9 { - width: 9%; -} - -.width-10 { - width: 10%; -} - -.width-11 { - width: 11%; -} - -.width-12 { - width: 12%; -} - -.width-13 { - width: 13%; -} - -.width-14 { - width: 14%; -} - -.width-15 { - width: 15%; -} - -.width-16 { - width: 16%; -} - -.width-17 { - width: 17%; -} - -.width-18 { - width: 18%; -} - -.width-19 { - width: 19%; -} - -.width-20 { - width: 20%; -} - -.width-21 { - width: 21%; -} - -.width-22 { - width: 22%; -} - -.width-23 { - width: 23%; -} - -.width-24 { - width: 24%; -} - -.width-25 { - width: 25%; -} - -.width-26 { - width: 26%; -} - -.width-27 { - width: 27%; -} - -.width-28 { - width: 28%; -} - -.width-29 { - width: 29%; -} - -.width-30 { - width: 30%; -} - -.width-31 { - width: 31%; -} - -.width-32 { - width: 32%; -} - -.width-33 { - width: 33%; -} - -.width-34 { - width: 34%; -} - -.width-35 { - width: 35%; -} - -.width-36 { - width: 36%; -} - -.width-37 { - width: 37%; -} - -.width-38 { - width: 38%; -} - -.width-39 { - width: 39%; -} - -.width-40 { - width: 40%; -} - -.width-41 { - width: 41%; -} - -.width-42 { - width: 42%; -} - -.width-43 { - width: 43%; -} - -.width-44 { - width: 44%; -} - -.width-45 { - width: 45%; -} - -.width-46 { - width: 46%; -} - -.width-47 { - width: 47%; -} - -.width-48 { - width: 48%; -} - -.width-49 { - width: 49%; -} - -.width-50 { - width: 50%; -} - -.width-51 { - width: 51%; -} - -.width-52 { - width: 52%; -} - -.width-53 { - width: 53%; -} - -.width-54 { - width: 54%; -} - -.width-55 { - width: 55%; -} - -.width-56 { - width: 56%; -} - -.width-57 { - width: 57%; -} - -.width-58 { - width: 58%; -} - -.width-59 { - width: 59%; -} - -.width-60 { - width: 60%; -} - -.width-61 { - width: 61%; -} - -.width-62 { - width: 62%; -} - -.width-63 { - width: 63%; -} - -.width-64 { - width: 64%; -} - -.width-65 { - width: 65%; -} - -.width-66 { - width: 66%; -} - -.width-67 { - width: 67%; -} - -.width-68 { - width: 68%; -} - -.width-69 { - width: 69%; -} - -.width-70 { - width: 70%; -} - -.width-71 { - width: 71%; -} - -.width-72 { - width: 72%; -} - -.width-73 { - width: 73%; -} - -.width-74 { - width: 74%; -} - -.width-75 { - width: 75%; -} - -.width-76 { - width: 76%; -} - -.width-77 { - width: 77%; -} - -.width-78 { - width: 78%; -} - -.width-79 { - width: 79%; -} - -.width-80 { - width: 80%; -} - -.width-81 { - width: 81%; -} - -.width-82 { - width: 82%; -} - -.width-83 { - width: 83%; -} - -.width-84 { - width: 84%; -} - -.width-85 { - width: 85%; -} - -.width-86 { - width: 86%; -} - -.width-87 { - width: 87%; -} - -.width-88 { - width: 88%; -} - -.width-89 { - width: 89%; -} - -.width-90 { - width: 90%; -} - -.width-91 { - width: 91%; -} - -.width-92 { - width: 92%; -} - -.width-93 { - width: 93%; -} - -.width-94 { - width: 94%; -} - -.width-95 { - width: 95%; -} - -.width-96 { - width: 96%; -} - -.width-97 { - width: 97%; -} - -.width-98 { - width: 98%; -} - -.width-99 { - width: 99%; -} - -.width-100 { - width: 100%; -} \ No newline at end of file From e9c81c731b030a7c8d42ee83bccedab6d1ecf8ea Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 28 Jul 2024 23:21:06 -0700 Subject: [PATCH 19/82] Bumped bld to version 2.0.1 --- .idea/libraries/bld.xml | 4 ++-- .vscode/settings.json | 2 +- README.md | 2 +- examples/.idea/libraries/bld.xml | 4 ++-- examples/.vscode/settings.json | 2 +- examples/lib/bld/bld-wrapper.jar | Bin 29519 -> 29577 bytes examples/lib/bld/bld-wrapper.properties | 2 +- lib/bld/bld-wrapper.jar | Bin 29769 -> 29577 bytes lib/bld/bld-wrapper.properties | 7 +++---- .../bld/extension/PitestOperationBuild.java | 9 +-------- 10 files changed, 12 insertions(+), 20 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 2fb5ff0..4dd96bf 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index 33a9922..5b2667b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.0.0-SNAPSHOT.jar", + "${HOME}/.bld/dist/bld-2.0.1.jar", "lib/**/*.jar" ] } diff --git a/README.md b/README.md index 7949376..719aff1 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) -[![bld](https://img.shields.io/badge/1.9.1-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/2.0.1-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/bld-pitest/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-pitest) [![Snapshot](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/snapshots/com/uwyn/rife2/bld-pitest/maven-metadata.xml?label=snapshot)](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-pitest) [![GitHub CI](https://github.com/rife2/bld-pitest/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/bld-pitest/actions/workflows/bld.yml) diff --git a/examples/.idea/libraries/bld.xml b/examples/.idea/libraries/bld.xml index 2fb5ff0..4dd96bf 100644 --- a/examples/.idea/libraries/bld.xml +++ b/examples/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/examples/.vscode/settings.json b/examples/.vscode/settings.json index 33a9922..5b2667b 100644 --- a/examples/.vscode/settings.json +++ b/examples/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.0.0-SNAPSHOT.jar", + "${HOME}/.bld/dist/bld-2.0.1.jar", "lib/**/*.jar" ] } diff --git a/examples/lib/bld/bld-wrapper.jar b/examples/lib/bld/bld-wrapper.jar index 9b4171437891511f0ae86c15f176ff70d5724e86..be17d84af117da3cec8350cc18e9234a35098835 100644 GIT binary patch delta 27394 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 delta 27444 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 diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index ef5c8dc..3809896 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -4,4 +4,4 @@ bld.downloadLocation= bld.extension-pitest=com.uwyn.rife2:bld-pitest:0.9.8 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= -bld.version=2.0.0-SNAPSHOT +bld.version=2.0.1 diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index e4421c534210cc2fd10ca450d388b35034abc580..2ed4ea388bcd002571fe64a263d844920f36250b 100644 GIT binary patch delta 27511 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

      S9bPTvT?%WYeajTqnu`dj`IpM))Vc6SaJT!Cg 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 diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 9d4088a..79b2f59 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,9 +1,8 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.1 -bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.6 -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.2 +bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.2 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.4 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= -bld.version=2.0.0-SNAPSHOT +bld.version=2.0.1 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 60affa1..ae0444e 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -44,7 +44,7 @@ public class PitestOperationBuild extends Project { var pitest = version(1, 16, 1); scope(compile) - .include(dependency("com.uwyn.rife2", "bld", version(2, 0, 0, "SNAPSHOT"))); + .include(dependency("com.uwyn.rife2", "bld", version(2, 0, 1))); scope(test) .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) @@ -93,13 +93,6 @@ public class PitestOperationBuild extends Project { new PitestOperationBuild().start(args); } - @BuildCommand(summary = "Generates JaCoCo Reports") - public void jacoco() throws Exception { - new JacocoReportOperation() - .fromProject(this) - .execute(); - } - @BuildCommand(summary = "Runs PMD analysis") public void pmd() throws Exception { new PmdOperation() From 3436395de265e1e706ae40179af805c13972b8ab Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 28 Jul 2024 23:25:42 -0700 Subject: [PATCH 20/82] Version 0.9.9 --- examples/lib/bld/bld-wrapper.properties | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 3809896..bfb37e0 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-pitest=com.uwyn.rife2:bld-pitest:0.9.8 +bld.extension-pitest=com.uwyn.rife2:bld-pitest:0.9.9 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= bld.version=2.0.1 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index ae0444e..afad98f 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -33,7 +33,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(0, 9, 9, "SNAPSHOT"); + version = version(0, 9, 9); javaRelease = 17; From 44bbb80b0f698f0fffb0948e889526dd127a80ce Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 28 Aug 2024 16:11:19 -0700 Subject: [PATCH 21/82] Bumped JUnit to version 5.11.0 --- examples/src/bld/java/com/example/ExamplesBuild.java | 4 ++-- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index 39ae49d..d9ffe1a 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -30,8 +30,8 @@ public class ExamplesBuild extends Project { .include(dependency("org.pitest", "pitest", version(1, 16, 1))) .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 1))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 3))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 3))); + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 0))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 0))); } public static void main(String[] args) { diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index afad98f..4b2987a 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -49,8 +49,8 @@ public class PitestOperationBuild extends Project { .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 3))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 3))) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 0))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 0))) .include(dependency("org.assertj", "assertj-core", version(3, 26, 3))); javadocOperation() From 9455947111d9c091e0a9b0741908943d9603be47 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 28 Aug 2024 16:12:44 -0700 Subject: [PATCH 22/82] Cleaned up API to match bld operations aand options APIs --- .idea/bld.xml | 6 + examples/lib/bld/bld-wrapper.properties | 2 +- .../bld/extension/PitestOperationBuild.java | 2 +- .../rife/bld/extension/PitestOperation.java | 364 +++++++++++++++++- .../bld/extension/PitestOperationTest.java | 171 ++++++++ 5 files changed, 534 insertions(+), 11 deletions(-) create mode 100644 .idea/bld.xml diff --git a/.idea/bld.xml b/.idea/bld.xml new file mode 100644 index 0000000..6600cee --- /dev/null +++ b/.idea/bld.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index bfb37e0..65e3751 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-pitest=com.uwyn.rife2:bld-pitest:0.9.9 +bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.0-SNAPSHOT bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= bld.version=2.0.1 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 4b2987a..6c13a33 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -33,7 +33,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(0, 9, 9); + version = version(1, 0, 0, "SNAPSHOT"); javaRelease = 17; diff --git a/src/main/java/rife/bld/extension/PitestOperation.java b/src/main/java/rife/bld/extension/PitestOperation.java index 36758ef..3c5b2b3 100644 --- a/src/main/java/rife/bld/extension/PitestOperation.java +++ b/src/main/java/rife/bld/extension/PitestOperation.java @@ -22,6 +22,7 @@ import rife.bld.operations.exceptions.ExitStatusException; import java.io.File; import java.io.IOException; +import java.nio.file.Path; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; @@ -60,6 +61,7 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** * List of packages and classes which are to be considered outside the scope of mutation. Any lines of code * containing calls to these classes will not be mutated. @@ -129,8 +131,31 @@ public class PitestOperation extends AbstractProcessOperation { * @see #classPath(Collection) */ public PitestOperation classPath(String... path) { - options_.put("--classPath", String.join(",", Arrays.stream(path).filter(this::isNotBlank).toList())); - return this; + return classPath(List.of(path)); + } + + /** + * List of packages and classes which are to be considered outside the scope of mutation. Any lines of code + * containing calls to these classes will not be mutated. + *

      + * If a list is not explicitly supplied then PIT will default to a list of common logging packages as follows + *

      + *

        + *
      • java.util.logging
      • + *
      • org.apache.log4j
      • + *
      • org.slf4j
      • + *
      • org.apache.commons.logging
      • + *
      + *

      + * If the feature {@code FLOGCALL} is disabled, this parameter is ignored and logging calls are also mutated. + * Additional classpath entries to use when looking for tests and mutable code. + * + * @param path one or more paths + * @return this operation instance + * @see #classPathPaths(Collection) + */ + public PitestOperation classPath(Path... path) { + return classPathPaths(List.of(path)); } /** @@ -145,6 +170,30 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * List of packages and classes which are to be considered outside the scope of mutation. Any lines of code + * containing calls to these classes will not be mutated. + *

      + * If a list is not explicitly supplied then PIT will default to a list of common logging packages as follows + *

      + *

        + *
      • java.util.logging
      • + *
      • org.apache.log4j
      • + *
      • org.slf4j
      • + *
      • org.apache.commons.logging
      • + *
      + *

      + * If the feature {@code FLOGCALL} is disabled, this parameter is ignored and logging calls are also mutated. + * Additional classpath entries to use when looking for tests and mutable code. + * + * @param path one or more paths + * @return this operation instance + * @see #classPathFiles(Collection) + */ + public PitestOperation classPath(File... path) { + return classPathFiles(List.of(path)); + } + /** * File with a list of additional classpath elements (one per line). * @@ -158,6 +207,28 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * Additional classpath entries to use when looking for tests and mutable code. + * + * @param path the list of paths + * @return this operation instance + * @see #classPath(File...) + */ + public PitestOperation classPathFiles(Collection path) { + return classPath(path.stream().map(File::getAbsolutePath).toList()); + } + + /** + * Additional classpath entries to use when looking for tests and mutable code. + * + * @param path the list of paths + * @return this operation instance + * @see #classPath(Path...) + */ + public PitestOperation classPathPaths(Collection path) { + return classPath(path.stream().map(Path::toFile).map(File::getAbsolutePath).toList()); + } + /** * Line coverage threshold below which the build will fail. This is an integer percent (0-100) that represents the * fraction of the project covered by the tests. @@ -470,6 +541,26 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * Path to a file containing history information for incremental analysis. + * + * @param path the path + * @return this operation instance + */ + public PitestOperation historyInputLocation(File path) { + return historyInputLocation(path.getAbsolutePath()); + } + + /** + * Path to a file containing history information for incremental analysis. + * + * @param path the path + * @return this operation instance + */ + public PitestOperation historyInputLocation(Path path) { + return historyInputLocation(path.toFile()); + } + /** * Path to write history information for incremental analysis. May be the same as * {@link #historyInputLocation(String) @@ -484,6 +575,28 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * Path to write history information for incremental analysis. May be the same as + * {@link #historyInputLocation(String) + * + * @param path the path + * @return this operation instance + */ + public PitestOperation historyOutputLocation(File path) { + return historyOutputLocation(path.getAbsolutePath()); + } + + /** + * Path to write history information for incremental analysis. May be the same as + * {@link #historyInputLocation(String) + * + * @param path the path + * @return this operation instance + */ + public PitestOperation historyOutputLocation(Path path) { + return historyOutputLocation(path.toFile()); + } + /** * Indicates if the PIT should try to mutate classes on the classpath with which it was launched. If not supplied * this flag defaults to {@code true}. If set to {@code false} only classes found on the paths specified by the @@ -603,6 +716,28 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * The path to the java executable to be used to launch test with. If none is supplied defaults to the one + * pointed to by {@code JAVA_HOME}. + * + * @param path the path + * @return this operation instance + */ + public PitestOperation jvmPath(File path) { + return jvmPath(path.getAbsolutePath()); + } + + /** + * The path to the java executable to be used to launch test with. If none is supplied defaults to the one + * pointed to by {@code JAVA_HOME}. + * + * @param path the path + * @return this operation instance + */ + public PitestOperation jvmPath(Path path) { + return jvmPath(path.toFile()); + } + /** * Maximum number of surviving mutants to allow without throwing an error. * @@ -640,8 +775,43 @@ public class PitestOperation extends AbstractProcessOperation { * @see #mutableCodePaths(Collection) */ public PitestOperation mutableCodePaths(String... path) { - options_.put("--mutableCodePaths", String.join(",", Arrays.stream(path).filter(this::isNotBlank).toList())); - return this; + return mutableCodePaths(List.of(path)); + } + + /** + * List of classpaths which should be considered to contain mutable code. If your build maintains separate output + * directories for tests and production classes this parameter should be set to your code output directory in order + * to avoid mutating test helper classes etc. + *

      + * If no mutableCodePath is supplied PIT will default to considering anything not defined within a jar or zip file + * as being a candidate for mutation. + *

      + * PIT will always attempt not to mutate test classes even if they are defined on a mutable path. + * + * @param path one or one paths + * @return this operation instance + * @see #mutableCodePathsPaths(Collection) + */ + public PitestOperation mutableCodePaths(Path... path) { + return mutableCodePathsPaths(List.of(path)); + } + + /** + * List of classpaths which should be considered to contain mutable code. If your build maintains separate output + * directories for tests and production classes this parameter should be set to your code output directory in order + * to avoid mutating test helper classes etc. + *

      + * If no mutableCodePath is supplied PIT will default to considering anything not defined within a jar or zip file + * as being a candidate for mutation. + *

      + * PIT will always attempt not to mutate test classes even if they are defined on a mutable path. + * + * @param path one or one paths + * @return this operation instance + * @see #mutableCodePathsFiles(Collection) + */ + public PitestOperation mutableCodePaths(File... path) { + return mutableCodePathsFiles(List.of(path)); } /** @@ -663,6 +833,42 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * List of classpaths which should be considered to contain mutable code. If your build maintains separate output + * directories for tests and production classes this parameter should be set to your code output directory in order + * to avoid mutating test helper classes etc. + *

      + * If no mutableCodePath is supplied PIT will default to considering anything not defined within a jar or zip file + * as being a candidate for mutation. + *

      + * PIT will always attempt not to mutate test classes even if they are defined on a mutable path. + * + * @param paths the list of paths + * @return this operation instance + * @see #mutableCodePaths(File...) + */ + public PitestOperation mutableCodePathsFiles(Collection paths) { + return mutableCodePaths(paths.stream().map(File::getAbsolutePath).toList()); + } + + /** + * List of classpaths which should be considered to contain mutable code. If your build maintains separate output + * directories for tests and production classes this parameter should be set to your code output directory in order + * to avoid mutating test helper classes etc. + *

      + * If no mutableCodePath is supplied PIT will default to considering anything not defined within a jar or zip file + * as being a candidate for mutation. + *

      + * PIT will always attempt not to mutate test classes even if they are defined on a mutable path. + * + * @param paths the list of paths + * @return this operation instance + * @see #mutableCodePaths(Path...) + */ + public PitestOperation mutableCodePathsPaths(Collection paths) { + return mutableCodePaths(paths.stream().map(Path::toFile).map(File::getAbsolutePath).toList()); + } + /** * Mutation engine to use. *

      @@ -752,6 +958,34 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * A list of formats in which to write mutation results as the mutations are analysed. + * Supported formats are {@code HTML}, {@code XML}, {@code CSV}. + *

      + * Defaults to {@code HTML}. + * + * @param outputFormat one or more output formats + * @return this operation instance + * @see #outputFormatsFiles(Collection) + */ + public PitestOperation outputFormats(File... outputFormat) { + return outputFormatsFiles(List.of(outputFormat)); + } + + /** + * A list of formats in which to write mutation results as the mutations are analysed. + * Supported formats are {@code HTML}, {@code XML}, {@code CSV}. + *

      + * Defaults to {@code HTML}. + * + * @param outputFormat one or more output formats + * @return this operation instance + * @see #outputFormatsPaths(Collection) + */ + public PitestOperation outputFormats(Path... outputFormat) { + return outputFormatsPaths(List.of(outputFormat)); + } + /** * A list of formats in which to write mutation results as the mutations are analysed. * Supported formats are {@code HTML}, {@code XML}, {@code CSV}. @@ -763,9 +997,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #outputFormats(Collection) */ public PitestOperation outputFormats(String... outputFormat) { - options_.put("--outputFormats", - String.join(",", Arrays.stream(outputFormat).filter(this::isNotBlank).toList())); - return this; + return outputFormats(List.of(outputFormat)); } /** @@ -783,6 +1015,35 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * A list of formats in which to write mutation results as the mutations are analysed. + * Supported formats are {@code HTML}, {@code XML}, {@code CSV}. + *

      + * Defaults to {@code HTML}. + * + * @param outputFormats the list of output formats + * @return this operation instance + * @see #outputFormats(File...) + */ + public PitestOperation outputFormatsFiles(Collection outputFormats) { + return outputFormats(outputFormats.stream().map(File::getAbsolutePath).toList()); + } + + /** + * A list of formats in which to write mutation results as the mutations are analysed. + * Supported formats are {@code HTML}, {@code XML}, {@code CSV}. + *

      + * Defaults to {@code HTML}. + * + * @param outputFormats the list of output formats + * @return this operation instance + * @see #outputFormats(Path...) + */ + public PitestOperation outputFormatsPaths(Collection outputFormats) { + return outputFormats(outputFormats.stream().map(Path::toFile).map(File::getAbsolutePath).toList()); + + } + /** * Custom plugin properties. * @@ -806,6 +1067,27 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * Project base. + * + * @param file the file + * @return this operations instance + */ + public PitestOperation projectBase(File file) { + return projectBase(file.getAbsolutePath()); + } + + /** + * Project base. + * + * @param file the file + * @return this operations instance + */ + public PitestOperation projectBase(Path file) { + return projectBase(file.toFile()); + } + + /** * Output directory for the reports. * @@ -819,6 +1101,26 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * Output directory for the reports. + * + * @param dir the directory + * @return this operation instance + */ + public PitestOperation reportDir(File dir) { + return reportDir(dir.getAbsolutePath()); + } + + /** + * Output directory for the reports. + * + * @param dir the directory + * @return this operation instance + */ + public PitestOperation reportDir(Path dir) { + return reportDir(dir.toFile()); + } + /** * whether to ignore failing tests when computing coverage. *

      @@ -844,8 +1146,29 @@ public class PitestOperation extends AbstractProcessOperation { * @see #sourceDirs(Collection) */ public PitestOperation sourceDirs(String... dir) { - options_.put(SOURCE_DIRS, String.join(",", Arrays.stream(dir).filter(this::isNotBlank).toList())); - return this; + return sourceDirs(List.of(dir)); + } + + /** + * The folder(s) containing the source code. + * + * @param dir one or more directories + * @return this operation instance + * @see #sourceDirsFiles(Collection) + */ + public PitestOperation sourceDirs(File... dir) { + return sourceDirsFiles(List.of(dir)); + } + + /** + * The folder(s) containing the source code. + * + * @param dir one or more directories + * @return this operation instance + * @see #sourceDirsPaths(Collection) + */ + public PitestOperation sourceDirs(Path... dir) { + return sourceDirsPaths(List.of(dir)); } /** @@ -860,6 +1183,29 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + /** + * The folder(s) containing the source code. + * + * @param dirs the list of directories + * @return this operation instance + * @see #sourceDirs(File...) + */ + public PitestOperation sourceDirsFiles(Collection dirs) { + return sourceDirs(dirs.stream().map(File::getAbsolutePath).toList()); + } + + /** + * The folder(s) containing the source code. + * + * @param dirs the list of directories + * @return this operation instance + * @see #sourceDirs(Path...) + */ + public PitestOperation sourceDirsPaths(Collection dirs) { + return sourceDirs(dirs.stream().map(Path::toFile).map(File::getAbsolutePath).toList()); + + } + /** * The classes to be mutated. This is expressed as a list of globs. *

      diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index 0fb9902..82f446c 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -22,6 +22,7 @@ import rife.bld.Project; import rife.bld.WebProject; import rife.bld.operations.exceptions.ExitStatusException; +import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; @@ -33,6 +34,7 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static rife.bld.extension.PitestOperation.FALSE; import static rife.bld.extension.PitestOperation.TRUE; +@SuppressWarnings("PMD.AvoidDuplicateLiterals") class PitestOperationTest { private static final String AS_LIST = "as list"; private final static String BAR = "bar"; @@ -589,6 +591,175 @@ class PitestOperationTest { assertThat(op.options().get("--targetTests")).as(AS_LIST).isEqualTo(FOOBAR); } + @Test + void testClassPath() { + var foo = new File(FOO); + var bar = new File(BAR); + + var foobar = String.format("%s,%s", FOO, BAR); + var op = new PitestOperation().classPath(FOO, BAR); + assertThat(op.options().get("--classPath")).as("String...").isEqualTo(foobar); + + op = new PitestOperation().classPath(List.of(FOO, BAR)); + assertThat(op.options().get("--classPath")).as("List(String...)").isEqualTo(foobar); + + foobar = String.format("%s,%s", foo.getAbsolutePath(), bar.getAbsolutePath()); + op = new PitestOperation().classPath(foo, bar); + assertThat(op.options().get("--classPath")).as("File...").isEqualTo(foobar); + + op = new PitestOperation().classPathFiles(List.of(foo, bar)); + assertThat(op.options().get("--classPath")).as("List(String...)").isEqualTo(foobar); + + op = new PitestOperation().classPath(foo.toPath(), bar.toPath()); + assertThat(op.options().get("--classPath")).as("Path...").isEqualTo(foobar); + + op = new PitestOperation().classPathPaths(List.of(foo.toPath(), bar.toPath())); + assertThat(op.options().get("--classPath")).as("List(Path...)").isEqualTo(foobar); + } + + @Test + void testHistoryInputLocation() { + var foo = new File(FOO); + var op = new PitestOperation().historyInputLocation(FOO); + assertThat(op.options().get("--historyInputLocation")).as("as string").isEqualTo(FOO); + + op = new PitestOperation().historyInputLocation(foo); + assertThat(op.options().get("--historyInputLocation")).as("as file").isEqualTo(foo.getAbsolutePath()); + + op = new PitestOperation().historyInputLocation(foo.toPath()); + assertThat(op.options().get("--historyInputLocation")).as("as path").isEqualTo(foo.getAbsolutePath()); + } + + @Test + void testHistoryOutputLocation() { + var foo = new File(FOO); + var op = new PitestOperation().historyOutputLocation(FOO); + assertThat(op.options().get("--historyOutputLocation")).as("as string").isEqualTo(FOO); + + op = new PitestOperation().historyOutputLocation(foo); + assertThat(op.options().get("--historyOutputLocation")).as("as file").isEqualTo(foo.getAbsolutePath()); + + op = new PitestOperation().historyOutputLocation(foo.toPath()); + assertThat(op.options().get("--historyOutputLocation")).as("as path").isEqualTo(foo.getAbsolutePath()); + } + + @Test + void testJvmPath() { + var foo = new File(FOO); + var op = new PitestOperation().jvmPath(FOO); + assertThat(op.options().get("--jvmPath")).as("as string").isEqualTo(FOO); + + op = new PitestOperation().jvmPath(foo); + assertThat(op.options().get("--jvmPath")).as("as file").isEqualTo(foo.getAbsolutePath()); + + op = new PitestOperation().jvmPath(foo.toPath()); + assertThat(op.options().get("--jvmPath")).as("as path").isEqualTo(foo.getAbsolutePath()); + } + + @Test + void testMutableCodePaths() { + var foo = new File(FOO); + var bar = new File(BAR); + + var foobar = String.format("%s,%s", FOO, BAR); + var op = new PitestOperation().mutableCodePaths(FOO, BAR); + assertThat(op.options().get("--mutableCodePaths")).as("String...").isEqualTo(foobar); + + op = new PitestOperation().mutableCodePaths(List.of(FOO, BAR)); + assertThat(op.options().get("--mutableCodePaths")).as("List(String...)").isEqualTo(foobar); + + foobar = String.format("%s,%s", foo.getAbsolutePath(), bar.getAbsolutePath()); + op = new PitestOperation().mutableCodePaths(foo, bar); + assertThat(op.options().get("--mutableCodePaths")).as("File...").isEqualTo(foobar); + + op = new PitestOperation().mutableCodePathsFiles(List.of(foo, bar)); + assertThat(op.options().get("--mutableCodePaths")).as("List(String...)").isEqualTo(foobar); + + op = new PitestOperation().mutableCodePaths(foo.toPath(), bar.toPath()); + assertThat(op.options().get("--mutableCodePaths")).as("Path...").isEqualTo(foobar); + + op = new PitestOperation().mutableCodePathsPaths(List.of(foo.toPath(), bar.toPath())); + assertThat(op.options().get("--mutableCodePaths")).as("List(Path...)").isEqualTo(foobar); + } + + @Test + void testOutputFormats() { + var foo = new File(FOO); + var bar = new File(BAR); + + var foobar = String.format("%s,%s", FOO, BAR); + var op = new PitestOperation().outputFormats(FOO, BAR); + assertThat(op.options().get("--outputFormats")).as("String...").isEqualTo(foobar); + + op = new PitestOperation().outputFormats(List.of(FOO, BAR)); + assertThat(op.options().get("--outputFormats")).as("List(String...)").isEqualTo(foobar); + + foobar = String.format("%s,%s", foo.getAbsolutePath(), bar.getAbsolutePath()); + op = new PitestOperation().outputFormats(foo, bar); + assertThat(op.options().get("--outputFormats")).as("File...").isEqualTo(foobar); + + op = new PitestOperation().outputFormatsFiles(List.of(foo, bar)); + assertThat(op.options().get("--outputFormats")).as("List(String...)").isEqualTo(foobar); + + op = new PitestOperation().outputFormats(foo.toPath(), bar.toPath()); + assertThat(op.options().get("--outputFormats")).as("Path...").isEqualTo(foobar); + + op = new PitestOperation().outputFormatsPaths(List.of(foo.toPath(), bar.toPath())); + assertThat(op.options().get("--outputFormats")).as("List(Path...)").isEqualTo(foobar); + } + + @Test + void testProjectBase() { + var foo = new File(FOO); + var op = new PitestOperation().projectBase(FOO); + assertThat(op.options().get("--projectBase")).as("as string").isEqualTo(FOO); + + op = new PitestOperation().projectBase(foo); + assertThat(op.options().get("--projectBase")).as("as file").isEqualTo(foo.getAbsolutePath()); + + op = new PitestOperation().projectBase(foo.toPath()); + assertThat(op.options().get("--projectBase")).as("as path").isEqualTo(foo.getAbsolutePath()); + } + + @Test + void testReportDir() { + var foo = new File(FOO); + var op = new PitestOperation().reportDir(FOO); + assertThat(op.options().get("--reportDir")).as("as string").isEqualTo(FOO); + + op = new PitestOperation().reportDir(foo); + assertThat(op.options().get("--reportDir")).as("as file").isEqualTo(foo.getAbsolutePath()); + + op = new PitestOperation().reportDir(foo.toPath()); + assertThat(op.options().get("--reportDir")).as("as path").isEqualTo(foo.getAbsolutePath()); + } + + @Test + void testSourceDirs() { + var foo = new File(FOO); + var bar = new File(BAR); + + var foobar = String.format("%s,%s", FOO, BAR); + var op = new PitestOperation().sourceDirs(FOO, BAR); + assertThat(op.options().get("--sourceDirs")).as("String...").isEqualTo(foobar); + + op = new PitestOperation().sourceDirs(List.of(FOO, BAR)); + assertThat(op.options().get("--sourceDirs")).as("List(String...)").isEqualTo(foobar); + + foobar = String.format("%s,%s", foo.getAbsolutePath(), bar.getAbsolutePath()); + op = new PitestOperation().sourceDirs(foo, bar); + assertThat(op.options().get("--sourceDirs")).as("File...").isEqualTo(foobar); + + op = new PitestOperation().sourceDirsFiles(List.of(foo, bar)); + assertThat(op.options().get("--sourceDirs")).as("List(String...)").isEqualTo(foobar); + + op = new PitestOperation().sourceDirs(foo.toPath(), bar.toPath()); + assertThat(op.options().get("--sourceDirs")).as("Path...").isEqualTo(foobar); + + op = new PitestOperation().sourceDirsPaths(List.of(foo.toPath(), bar.toPath())); + assertThat(op.options().get("--sourceDirs")).as("List(Path...)").isEqualTo(foobar); + } + @Test void testStrengthThreshold() { var op = new PitestOperation() From f8718774ae6bab724a09114f95d3753e916870d1 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 28 Aug 2024 18:29:26 -0700 Subject: [PATCH 23/82] Bumped PIT to version 1.16.2 --- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 6c13a33..c221910 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -42,7 +42,7 @@ public class PitestOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pitest = version(1, 16, 1); + var pitest = version(1, 16, 2); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 0, 1))); scope(test) From 35dc6d38cc8652d2b7d5451c0acbf3a8e3d79db4 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 28 Aug 2024 18:29:26 -0700 Subject: [PATCH 24/82] Bumped PIT to version 1.16.2 --- examples/src/bld/java/com/example/ExamplesBuild.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index d9ffe1a..058fbc2 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -27,8 +27,8 @@ public class ExamplesBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 16, 1))) - .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 1))) + .include(dependency("org.pitest", "pitest", version(1, 16, 2))) + .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 2))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 0))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 0))); From d0f782a9aa1c67c8a52279de0013206ed8f6379f Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Thu, 29 Aug 2024 22:22:28 -0700 Subject: [PATCH 25/82] Bumped bld to version 2.1.0 --- .idea/libraries/bld.xml | 4 ++-- .idea/libraries/compile.xml | 4 ++-- .idea/libraries/runtime.xml | 4 ++-- .idea/libraries/test.xml | 4 ++-- .vscode/settings.json | 2 +- README.md | 2 +- examples/.idea/libraries/bld.xml | 4 ++-- examples/.idea/libraries/compile.xml | 4 ++-- examples/.idea/libraries/runtime.xml | 4 ++-- examples/.idea/libraries/test.xml | 4 ++-- examples/.vscode/settings.json | 2 +- examples/lib/bld/bld-wrapper.jar | Bin 29577 -> 30440 bytes examples/lib/bld/bld-wrapper.properties | 2 +- lib/bld/bld-wrapper.jar | Bin 29577 -> 30440 bytes lib/bld/bld-wrapper.properties | 2 +- .../bld/extension/PitestOperationBuild.java | 2 +- 16 files changed, 22 insertions(+), 22 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 4dd96bf..5c4010c 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.idea/libraries/compile.xml b/.idea/libraries/compile.xml index 9bd86aa..99cc0c0 100644 --- a/.idea/libraries/compile.xml +++ b/.idea/libraries/compile.xml @@ -7,7 +7,7 @@ - - + + \ No newline at end of file diff --git a/.idea/libraries/runtime.xml b/.idea/libraries/runtime.xml index 2ae5c4b..d4069f2 100644 --- a/.idea/libraries/runtime.xml +++ b/.idea/libraries/runtime.xml @@ -8,7 +8,7 @@ - - + + \ No newline at end of file diff --git a/.idea/libraries/test.xml b/.idea/libraries/test.xml index b80486a..57ed5ef 100644 --- a/.idea/libraries/test.xml +++ b/.idea/libraries/test.xml @@ -8,7 +8,7 @@ - - + + \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 5b2667b..4c33beb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.0.1.jar", + "${HOME}/.bld/dist/bld-2.1.0.jar", "lib/**/*.jar" ] } diff --git a/README.md b/README.md index 719aff1..5cb787b 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) -[![bld](https://img.shields.io/badge/2.0.1-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/2.1.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/bld-pitest/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-pitest) [![Snapshot](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/snapshots/com/uwyn/rife2/bld-pitest/maven-metadata.xml?label=snapshot)](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-pitest) [![GitHub CI](https://github.com/rife2/bld-pitest/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/bld-pitest/actions/workflows/bld.yml) diff --git a/examples/.idea/libraries/bld.xml b/examples/.idea/libraries/bld.xml index 4dd96bf..5c4010c 100644 --- a/examples/.idea/libraries/bld.xml +++ b/examples/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/examples/.idea/libraries/compile.xml b/examples/.idea/libraries/compile.xml index 9bd86aa..99cc0c0 100644 --- a/examples/.idea/libraries/compile.xml +++ b/examples/.idea/libraries/compile.xml @@ -7,7 +7,7 @@ - - + + \ No newline at end of file diff --git a/examples/.idea/libraries/runtime.xml b/examples/.idea/libraries/runtime.xml index 2ae5c4b..d4069f2 100644 --- a/examples/.idea/libraries/runtime.xml +++ b/examples/.idea/libraries/runtime.xml @@ -8,7 +8,7 @@ - - + + \ No newline at end of file diff --git a/examples/.idea/libraries/test.xml b/examples/.idea/libraries/test.xml index b80486a..57ed5ef 100644 --- a/examples/.idea/libraries/test.xml +++ b/examples/.idea/libraries/test.xml @@ -8,7 +8,7 @@ - - + + \ No newline at end of file diff --git a/examples/.vscode/settings.json b/examples/.vscode/settings.json index 5b2667b..4c33beb 100644 --- a/examples/.vscode/settings.json +++ b/examples/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.0.1.jar", + "${HOME}/.bld/dist/bld-2.1.0.jar", "lib/**/*.jar" ] } diff --git a/examples/lib/bld/bld-wrapper.jar b/examples/lib/bld/bld-wrapper.jar index be17d84af117da3cec8350cc18e9234a35098835..f20c09c0bf97b73be7f5db2a739a0f3512b188b1 100644 GIT binary patch delta 15855 zcmYj&WmFz9w>4UzxH~OSin}`$FFd%rySop?o#Oi7?(SOL-5rX%JA8fL`>l0vW@SxQ zvd_-RpPA(3?63pK!!t+}d1+`EEC_gbcnJIqVvSf7ADI8XV;BJ+1aIYe?1z?z&S9B2 zxIiSxKV*>p#xdFcXhI?wUsGV?A!^MtzF}g3On1ft#nu)V8Z32$PAZ!l$VSkz!xt7R z<}J%q%PJbYDk>@((p8?`4>~zn?cxx&9^N`N4?5bwUgs@lT@U@qU26|)==9F>%~GEU zz8s(5CO6$VC)fd>pPrvzbFSwXSObt8Td2psaeBa*fR9!WX)mr|ITAP60ymoM{P4(c{Q3Geu~>W zIEW@kv3w60i|Pn7jU>@Zw#*pFS<5$amuZYDGa}-goz=NsQ|M-EYwa zZsOXF?k1=$?JX9GXX4KZO#J?|w=nsS_fGw0UJN7+^C-vcpm%~S*zfdzJ5%4s(SfgP z#7OF)8Rj!mGVyECTZKY$Q;Q0iR(2@&AuBe{xarD3V(X&g*c`g`Vuz)S<_~Gumepro z-naG_$Mqc~HoyL4#Ov?XrAR^ETF0%u>e9sXZ6!VV;+p8YOQOk4Fx|NO(MuoxE-nFk zK;iXf&g^+n~2YtBQ(PrVOsondtG5 z8mp546RRjGD+}<~-mVrxJbc&&oZ?v-9&q)V!x?E8?d&Mc-zgH~x-s+W-;9ndm~_%X3~x%1JEmZ)D2wM0l>vSt&vclLxh6;)I0y+_UxEcE6Iy}X4c~@ua)!%XY!pMQZRNh1y97mIBjss6d$egj z*~CkwBY09H-y%!=(LAac&#rK;OrKyq@@|FDug3|63E(#Xg(NPK-;P0a@E9tA2xUrh zFj>2Fjc59u5&oJu=(wC*j}$IoC(_figOIm~2H!(o318DaOwa);h(N}?(RJq_DZM

      (QD6Zvw*7^l%{Y!lFB7v?Qa_La;UGqqOnMPF1$sKsF z>hq@+pV;~JScdjrdeG>HMOH^VoIbtzCoW9}`W7pj`w?Y1d zZM?6s@n2<&1<{Vqqc8zV%b84r(AoOhoPtIH3Ws}Nlbxm6!atURCwKrChR6|h ze5Pr_=iuBq#o4vE&sk1tFf$s?D?2tNyEODhr9~h?b=# zWhK^?77HD{1TlE=z$Kba$MlyS4cvXZhRuo5%c;q1XJTw7n~RiNCr{kQPblstT3k!B zU#{wK0{Wwu`%{j0&%2n8l5Yj*48ECb?A5^buB@QSJhMN5%r-X$E1S}N5drEJ-c!Zm zHsrcvDH@{!q-XxO9uUBGBzJ2d<1ql|poX_Noy57L-j-bm_$xn_m+|ImDDk31j!Jxg z3wr;o*Vena8}n$zYh|sbuRZegdAsWac}{9c0G@?T55lm2V{h>9P8N`IOZ|q42pM+l zv;K>V41%wu+alP*Jr|qh%I-NP{oQKD>{d`XKI9~2bL(WUqrA!*;y`F}iR`QSNOkvJ z%4bv`NI^4IV3`@;8I6oSkUC$UNvRiEEW*EDAS4K~Dp* zvZ~D5R-BH8uTT;4F~l&sE%OXk-qJ83dol57x4SM_E0W{~ z8&_S_8#*1N<>1AM3!ku?aU?&M}-}e|WeHdfl$>>Lo{OHAPmfB4NhO zox%>g4Kh$_F;Ug1vda^c$3e28TC}ShMYj*QgOMmf86P>()ejFcMCXEBaC4B8SW~3b ze#26blF4fAm#UE;thBtoVK5HG?B~j?8^M|faz9-WX(fu@hD@kRq^l&Q8RC;0K!tIA z;`42xmc?;daYGW#*7-yE(u6dU(3kH(Pl+w=A)5D90ZNNOmRT%bsQmcz!=1ehH|xBo zqNpyPYXP-t%`1NK@m{zRs3v%q(#_4CnI|iedLiu2)*+2r*6daMTLEmgM72ZY2Y%rt z5XSMFq>#K`j5A7BF+4+5U!Az{5>YgSr1_fkOVUNPbgNN?PRxc*?kfERTfau6{QVR| zckL*yt>5x~XGbACylB2S1a^RtSh~BdgR3G&&cn8$ns^YIL3BwlFl<#}GIWr-;~hN4m?Y`D+vy>yC&4lCly_&ncoRednjRw{vcUQDs0boj>K z35v+-wjqx;BB!GEpq9EyqT!6SqO%Iep*wcj3nAzVyS=ui@O=V$9!hX^mrKo9clxu8Yey#=x;0;#xb=k>yWIqW)tq! z*TH-um`_;f$J)tqT6Il|V#-aeK5BU(>(E6_g2u~4iK9dqS|;Vng3;PL4YA;59vTlx zT-L%U!Z&0!iV>5xv%16Ej{SxX>|3qVnCB{SXU(pwbvCxiaau&wU=ka$GAvlI0wG5G zNLMLK{h!XmM7Mb0Idx}@44bHP4N(_{JkXf*dRqH~8Y1U)l}<53v$p%@&(|(c=&nU@)E;T#d5w9sE5! z26V+K>)VDi_{qmG90-*YzOjGc_5~}I-Gu_Ax>WQHnA_It?|@PGNBCs6XHN^Mo|kb8 z>mrziqBLsfpzzV(M*fr4U|^4c`Old_SZ`0}Z(qVm6w?%$quO1c8wi*hLac;;Gbj~G zaYC$0c`vC{OOCLWvVu;Mj-*JWGwNl+P+%%%*!JL2GzaPQRI=bTcB#v(_NbIhEod!G zF1aSZ*MW`_jR2u}4fHhet{Q)S|WMp~8*)=2` zy0g<>jcF%#5J8hLfJnepRfCC0yqf4ztnv1V-Q6`}OEZC&_|J7UzkoN)>;&_kHb*x3 zS)hdf^j|)uiG$MvnBS}Wb;rU_kWJcXqtQGZ(h+bOLK?zGeAl9nMtknbiG|v9Wsggc z*-*qpBtRik^!?Un5`|v!BzPMB++MapNiM2doKAEJ&M;Ufzuj0$BeCJTg8O@|v%9I{ zlbc0eMI>eds82`2Rgn~`h}+Qp@H_U=CMzTVtG z_3%B~t%K!Nx7$JM{QMp^?|ksqFB&Q2Xh?hg8D9W6RkCotS}in>zZ%&s`;RlaK;Pna z1n|h^G4%M5#?tMbgiqMQG6%i-=_Y!h4#cC!<6n`Zt39?Sm4nZRv0&_dU0%SiKSjdp zK+T!v7_TaQ$4;MEF`xKYVpU#RZdGBaT@$P_g`*i;jswZphP( z&N_l9<3TD7Kd4-8z{POz90Bq`SY-WJ27Il`xe06TR7gCy&Gqzryn|oUUR$+vEk?@z z&NI7Fj15no4<%iDiu!aSzaO6?`!=Set`zJ*f4)aGLuSM*ffNd|O!}y9I(>! zWArus#6SI&C%mUPr?{2kbuKS{+6JEEp~+3<-rA2K!ugIT8gFI~T-Yw1rKd4Wn|V#5 zv@t3XU}Q*_XnfFz8o)o*a;%d?CH_@k=#y#MOX_Q0(uJd#u|-*QRA5B zi3`V(Tllf*Eg`U<#0z?AUQ0an1{PO(kAsoQ0*d&>1i~&A&Si;&29~{5I6Ua+ne|6H z%E`1f@r{SxuG?&%5~#D1;0)iR&-{A0FA(bB3ib4*px!~QQd7AGd~2;aXk07@qA+zK z{3JuBqh_Ed{-=z+n7(aUdP!LSCn}CPdH~JogAIBP7Mf5Sm#F?dnN%+hU~Jn%1wD~J z{iMrcC!(6dc~|<1Br_vM3W=kva7< z7Pe0>`Cj;8H!sc(L9cn#AKwIFN;DVBiy^HFe=3Z`$UNabsnL$j78T~ayMjHqIF4w3 zfjgb%0$;&=YAr@+Y>%5?za*uFF|v=%dK-=aLvj_bULArn*nx|H{fxoHWJuPmzkE;Y zu3n+KzywSFWhSPQ|K&6pu4&x~Y8S4>eq zFEGxwK*oehjm{(;%B8sLynA3v1A?CswvKq&*cNuN%l#0m!Oz;mg}xK*5G>zC11dYL2;fM-mcklYI`^u6{oc9)cD~-!b)X4#>J*1DM3D zF6~<5%=6mO+7hTokco}Mi^#CW2rQGzH{3DIJjNv?A>O$zze;c%1KBm<^d@eZGmu?! zOJsKlIr9Lz^fPm5wFr<(!I{T}2Jt#6a`}L=bjp3k_QH>~kR{s|My&lu#S5>BlB65w zUGzSKTJ>7G3^prp$*~GF3_*_^q4r8rHmmB~X^kzsAkzA3g=J8QtO95$kTqZ((#!gN zN}XSHM*>*CglaAUge{j)4yB7CZpCW4!*w*tD#cfhG{cir51NwZT&l;`}SYA6TiavNj(=s2=@kDo`;{Q~MD`}=9==W$G{ zx&;6=ddFi4FrFQuvlg}Pkt)1yVSZrEXa1V4G4jCF_KW--d&yV=(AScV$rvvHB5=ky}=7e@3;&xuv|mfY-Ly;>eBsjV*~S z)-RDV>^hbTzkB20dDgA$s2-$Pmhq^`_rwAyfg7L9?vWOp9cJk(zZ2zt<+>bfS2raVT@J4(#AG~+JOGs2>x-q9i zPHAbhk{T8`l;uo}cbyKC4OS5bW|HBY`_HC-~+hA`geN0iDcrm2XnaYd)9Xj=`wbb8{ zPglt#>j=paK}FtSZ&1@Om7XINnH=+wcQP|#gZZi51|6N9eax#&Q^A7?2Tz$mNv2V( zH1xyq%kYo4Zso}nnFf<7jiuejwLING9 z#cFZJDs7eJ)<8S_@8`;;iylotT(f^X8DVC7m_%pW@)Qv?$z7pOAW$fhYF3<8(zJd| ztn`+FkPtr-5J*+@^3)ypi}?oVG%M9Rq-~6%EhjQ2o2=a6oUclWSi4+#_9EN1CMfV7 zkGv)nXy#^{dFX70R6Z%7v-AYkGcV>6!^*>Tj8FMuL zM8|wp1UDD8GWLu}a^*)Ad~j(Z7Tt1zlw#IuoSf zY-wv<{MTCh6)kt!Ncpqo<%c8Nkc4_v8R0PjZP}fLWJISTw}GUNw`{SjYN$%0%BUsZ z00!2wc>N75nwDCvD2MXGB0RzF>pQ6e7+;J2@8UVzqhVckyD(>_lD>!X%n%l_<4zQa zot7ZoN(&%JXESlyy<;zGoMThxEVGbgF)EaLoOI3< z(PQ(()pgxk_8*fHggLG`^B!BmYr#G$nYxcyIRf{(v^*bcBkelv|os2`-YnAK=z&KS}V|JAP6@u9IekGgDH!r!5EF%>(+U zP6C})ge&%a)!8MH0&mL_IOUzFJqlJaKBthiJi5GR&|W^YQ31tV7}WlVsyWZD6}P=D zcqX(}3y*H$N8ZdiiFV(sD-ATH>Olg3bNDa(ecIPoRvq{N%JTT5iiwWt7rcFn{?>tc zGgG%_cGKG@R|j>*Cb%EWFc7`23&1i;$$HZA5nm|SF-1ggYli#KE8ubb57s8xCBvVb zfIWC*{*L|)l5J)?qN?o)ha9DQ9>Gm+EH)p?5guC`o2GABb~%(2&xJ($>X=$KV2j54 zl_EFHV8MiXlQc7F*_!2Jv~8{Mp5DymoR5?qvs}b*_5DI(0;{rkLQ4s~Qh+Tpq-k&H z{EuePk2fE5z`xKxTJUzh#~^40Vq)9)1mnY#STgdsZYHO~CMkhp)=s`sc{8bYvZ|dr zx&sEgFwK`%GerRoXs#Z*F41N(U73Zt$O7DHS2~ ze$iQe+EcaKJwOo&gzcx6qu+`Cm2IRn^>~>l%SSYgON8=6*K#46S>T1PE5au(HZbE} z((qu3nZ_PtWTH#W(m(W^>*X78Lt6Y*?2c*7>l$6-4|zk9t+h{C6+mAei_%XwUQar> zEg}io*gz*)wtH)|lTCB)is@^5Kc)IU(_LC`mgxY`>?-SfYmbNWT`kRp5o6A-w<`iR z>g4LK(dF?vev<0O41s6=60js|ftIm^QlCk6eP>>Jf<5EE&&nQ_91Fy*iUxi+p`(bH zLKFS+6eJ&R)ptPK2E1VS=|<7-o4+*|@^P1ZbH*7qflp&=rZ{RWqaA;bq`a@FxNPQo ztuRhavWcOE765V6fQDRDs=JEFnONfn)mX0$8O%3im}hqhQk~)E!*8!M&P8=I5U)j3 z2NPjKloNXLu9|CeYK(9rgnOSn$g0ZA=_Ypx0=O}mj5B(tc!h%oh4#BLGYp^$k%^?|wf6jrP7>-vvqYG&Tm0GY%G zH&xc*A%HOwfoY-NnIdg1DwJxIpk1nAQ?Xccr*l#^Z`Dx8528o~(-%~Fdl5rLtb>&@or$<@;XxwC`* z`*`@_uJ5Wt7gPbs{u=y;}Ka_EzIDo^p z%ys3rX5DAY*NGhTM{x8op*a%!jHsrt$DC;YTx26oX?Eh*K^mSQ)!heWO$nheAlAcps*8N# zrnGn2cAfcxrhir(4hyAAZhyI@q5&AfW}b6*sKBv)tcp!wkOfw*%x5cg4^@Cr*q0ZY zi1aocm5(Nhqn)*Mtm>>Lb*^Oz8})k^xG9ILt=B!AXR-LSavze%iBZ_=EJsqrB7ws; zk5wA(Fym=}p_OSdbf$pf;(>|qeU~P4N^RwX7CeIjvSdYx%jV2A>YzT*Q zW?mfs$I%pgVfq+jv{^W-3h-o|=MEm~JX5Swh=*Y)L?7VqSUM0NC+LHKQ(k4QSI_G80sibJRanb47!?Xc+(xfR-J?O%jH zUk~y+#5v1;_RSFM49)0Bm^pw1gW{IT6i^?_l@NvH|1Mhq-a%TS063;Fr%L6*N6nj> z(?0oWC~M1k_1V!0gG)cs6WJ-Gv=d{EPoQt#j%a?*E4Tqev9X4P8E$u{6GU6FfY`7 zj$~IRDnliW7BOZl$mWkujq%5@j=qsYcgC8&VMA%Wq4Es7J~By@7R=wfCBJ=P_UweB zc%otQ(YZJvJIwZ`sd;cR@fQ5$rHu(jUlcW4@?wd$jMCk}1VDG%aWX|%%5J|Ut~asj zhi~ZT3YhD({(3M7$B9RLYZ1RktbUv(AU#~r2wlP7~8LmzMFw7zKHxA z!PM?>{?ATJK$crc(nfE}1M@L%wRl%wxL~&Hb7<>fl{146k|Y3EE(dvr8G0-Dwee#n zeF_FvAakDpvIBws3e?Q-{ih$(DEzUiJbfqg>Mmj3`bLUO>qHInV7vobw^F#svcALN z9DSC;bzy@6e*8S`tQ#?=wXCb&O_A&Af@cq=QT!1ye5)0y`VQDe#8q%!O zGp?HUI>k1s9`@>6isLu*7E!Qh3=I!+mzhJYN-@N4(u`?4T`9SD@>Cw9iVFYns#O~> zaN~O&fnZ`Mv>u_+61-8Q_{$)+a&H|pFEr%^Ht+?lG&=TYtiisS}Iw7$SChm?f zpXcPx5G`8Un2SZ+sds?I4aU~i>N^Z8^5>IV`=SHvSQ3iO*J)Q^*%QvO31LKwaT)mm z|4ekB@=y2Szx{@fAHt&)YCH(%9p+nHu_wn+{>(bf%n`Xo^HQFX&`h}OHJeR7{PlEq ze5O27O9j9Ap62a`ZYR-(14*SV%a%{E2%T!I(`Sn6EkP# zOTTw41x+7UjgSmFq8Rf?ooE44B|+8-__sKclyFZOM|iQT4;A24nxwbL25Y7G_oUE$(`Kz~jf*D{6}XKsig_ zib6(pWnQ>YD(c)KmUaF^*&c0W)V{HX>bukP(-eKuqV~jEcu~ZIuUW?QY`w_TmVJv3 z&bzC+Go+t(3Wj9A{?{TBj3Kds{>CxxUkS*cW;n3mgLR+~nVc`ndjh-^k&<53+N^Ko zV0+a2Blm`cjZG6x5+(ZCU-~%pf#bf&o*95+FZ4ILFCJm?dyS?B!kcT!D^u8h+{bxR z1-k7Ia99%L!aBvvR}hLM1t-=X$o4(IDbEL0oUho}Zq+*-sQapXLl_^I zul0sFYZCVngG;aBgUh%B&t-W#!|YCc*RljUV`7QW2!u-xmu^$+r`!?H0527;qghAl z&8!oD%Tf6ZKb&LK0ri(8UB0@2@8fP~*$y|X&9;F$2WeTU>5%&+N1z8GLbZ4>Q^vr{2& zO1K?fZhh^%@mERDrRIfZ6kY+atzui0-O`U|jMOZpOf73($w74t00A1h2Xl38N295E zmY&2pVh~>3zLpE#%;1qBsp6*@ZDOm$nk_MmK&5a;=<%AfTthH(97{<34zS=()iSpm zpK^!zdG*f~>s$?L{qNLyTKxdq(C{yFzmj#!H)FOcjFTUyNv`69cMgW5M$CS?E$p(F zsozL@iXh;*s}4hgfFA0l1IK3Jx}(SDGNxbDjE%p@8{=`AC$SuO$NTE!ts_QLaCzPN z>F1e7Y63Q=cQ9I2*;YLRm2~VJ#AW78@c)ep*IT&AMn`_>hqLz7SmT=;9d&AL}Tn$^S}9#XS##X@7ex4|oa=qY<^ zU?t{u7Uy%(L`j@@>|kW#r4*6xr-ZX>!?d;Qcv_Pe>zF#=7DRX*QC&gEjQg;G*5vvP z;l^=Mr&+F;0QLw8^9uKbl|D@8M)$Z0?6&QZv%JxM-&R#`T=6Svy#69mE4W)(x_~vJ zAf2{Y5DqBMnQLUT?;LBErtMtZk&yGKY1R2;e1*4_kwN7FzX-oc$Y5{`tl~s#>5e-1 zdlc^cReR9WNgyvz)+n9*1%8 zZTg5Utkcwba1{n-zDbz58nQT?vD$J7s*DJcP0A;FO4WIMFGwA+4g3wzvec^CQ^$!J zfo?Pc@>m87>d1AuJ3XSd6EU6RL}fA9mbyE3nCv~6p$9iJmh9D*>|+}LrI^?kE!i(N zw>utJPwBY{3G$%$JgNB$_^2P+75X!v$i?G_EKcEtYuaJZGn|tTgVL? z74ZcZud^W|xvsa}urNe)C}nuPDLf+Prx!i8i8eJDoLquq3ev`;9w${SEeNq>TV z?FjgmXMJ`w<^P(TYF&@JbQM#yM2nbL`#3H9TfjMcKP+#*hFEJDP#6xbhc2!W0G}nA z+{s&9r`Y_xA2B+?pFhRTW@ogZ3JQQ^o%ZL_Cv5qNR-U_g#k;H9tH5J)r^eDZ*arX^ zbkg2GF#84d$pwN^-f0;!Qz)WGtqE}hMk0CZVY4K6BY8E9857mHKoRGP~uJh+x#HEx~t4!JJ*nZU%$Owoq zT?*>Ia3_r5PIbYR$j1%bb0K;YtvUjPTE1=4M(N@~IE@KnN|9~owHoi@-m@*NitrKm@q$c-^&n0^GnA}W{_;wNh|tmW`0gMV9MSfpl+Fy9VrTkJr*hn z?#Y%3p*(|esRG3~^Ny1}#dK(#+7cn_F+kt?cqVJ37d#jqQMi}6v>CIijbs2m7*3*l zCH-*vJaT2L!gd3*gDdX7kfj{;wv1&x zWYZ85(2xYzrc5N(9YFyaKX8XxTE!;(zo^JIjT#-wdeHHIi^&6DyRXn6OhIxd>;9&k zDsx2dV3f=68vgm*RF3m=0lrC_Or}K{YebV-ngJL4+SsAC922<~oz@&}yjCiMCcXct zR?K-MF;}7z7u_SRS-CO1tUzv!fwvD_3tFRZ>(9HEsnOF^u)+cqQ$f0CRtWM^%Rf}b zQ(I+c&WhVm?J@*-e=ZhGLmoc7^jK#YowATj6~UnPm@NO|5g<&VvtuR+bW@iU8xYAT z71G|~Bq_{mDD+uL>h;)R@oN0+5Ox)s)ceyR^NQ-3x)kRCZ*w4B_+s{D!0pl6?_Io# zAf|uv(?n6Z($+NKk!;z7!Yp-=%mz-RXWLeOfyq`%KGQzrhs)t!AHK7dRo^;bWf91$ z4bYFd%||( zl7TLtM*Z|xAiAOMU)B}6(H&{Bw|JH*{*lq&8-=Hx5=}FpJ$!oYo&av%;y!)&dJ^)U zuHqBK%N?=uVmA9!y5=w&F6vO$S^R}1g^FjlrRU`Gt+X_-%zZNheZ!CQHSmbYFS&=+ z@(0uG4=Z#2Oi>-@#@7;G-6)D1Ob1FZDCVSyg2#r9&SlsFHYs1zrrn{?CY%w_( zB)997T{x)iF-1g1MF!hEn@c8qke^Z|?*`&|A}5M0jhfK=KLwdXExDo|SLRr_%KthG zBMf-s>6#eO??O5>(lD)b@xGk<%O~-J$O@@h%#|+=a7DF|4$o0(C!UVddQWI6M2^Cj zo!AycGQwxA85A(`)T(A_%c_MnOFu6{8V$yaacWTO{F3-(4%^Hl6Jwts5sV@i186T_ z(#<}?oljn*ExO;@sje_Q!SSuVhK>j>_9l3jGqKQoY{*058J8=Z@L-6syj*4HLarc0(KZ~lD^^NBkNW663C5N`HI5~2wTnD9k`Hetc8-R_?ffFv2F zKXtF0m^I{58}CgvSuSN~-sa{54?9ztbs9!kEd$eC79m;%^Q6HtA&*5;oZtNT@*MH8QjeIpIk7A3Xu{dR_aKlF_8ZT-8E8T4>!zw$}v96VW)<1y?4 zu6XY2jlEig+p6qr7c2^e!-GM~U zc~ORHuZ%psc1uS`F$HB%Sm{xjwDhA}R~o{g3idIRI(A)h=|}^O(x3prBEoZYh<700 zwZcf;W+BlN9#WqykLJ0*t~->eGbb2;;cpQ|nflz4tUBz&l=ZTkYL`t|B;l1oa)!fS zz2!0xF(9qJ^f{#_IqHj{mt4TF$JndSEjwBkcU|loA1Yf5g<#R)zm8~D&XMZJMoe>( zXlDj=&oHlA23h8&moI*reKEzQ+EHfgO4;sJnluQaTb~ABSWed6f3`P>?-7gx(8qrv z=eai7v(q#-5lQb$**_hfS}Hf3tJuWtd)=2YoKF2a8+eqpAJg%tkM-d6^ec9F9VR^C zw?zK@asku*w{_dcBvgA+7u$9Ab!=^{!!ka*n8%K{B80V&q5eiZO7)i#;mx@AtgP+W zU(N~JV(I-Dzt|z-8a18o=0ZB1fSixcYBe$3Cfj~W%lW}_-db5DMuL&RNIzLybHFv% z*$ZD(l-f5Fz@~6FXkaONb6~I4W}p{Cdx3SptmT|5Z?83Vmam0`__(x8?ZA_5(j(k2pC_etb-?}18308ZdlAYuH5O{^0hXga63+#Y4q zdq?AYB-f=-`fG>gA$tdR*~Y{miT z55qC+Rht3wrRBJyF%MEp;gyzYkM7I$%>QO5^WE zCbOJM;u&>4QtTo2R^?SEHNM=Ot_v6^6k<`Opmd+-{A4bwyuPKvDK<|ZYS4b%NSv^r zs3dn^YL`*$v zzaYt!X1R>SubSjlicE_;iZOe5a+to$uiRS-^RI9k!mM&707G1b1*9L+GtrdW<<3Y~%I>9K`9>F=Wu;F2I66l}ND^gr_r@^B zYJ-MEf(G<}dNdF8hgbIDM@{yof!Xpe@mqq!rU#E-AUthdDQ$w()R0{6eLAb5)(e%) zk70d6H;8D9lXG*sI={_Jd3uz_-!k_TwcUU?tB_T{6m^-(siSV5NL=mS?w;*B|ID&W z_)E|>M{6k5Q7DyQb*d!jG83A379GHtbQB_D4|2MWQ$TTGN*yb)s8BNpXahv z+_k6}DX5bd&;sSq)5O@yD;>H1HpI>J`&9kpAnnVthY#$sTGJHu4{W-0yFu>}0=u;O zC|PSFa(G!na0u>75mCSvXn?+D{@$YfOex*WH1_1HTrNdNQb8|ICBycvrNumkkMQ@V z@XAR5jpf@t1D07u#F_Geww2XJw*cuFvAo^cTERxt{Lz^qvtrj;k%0Y-oxGv~_7uE| zWS$DbUYR0|f(e^+;w+KMj%4D53lW=z;6FWHR=3r$z55#ntZvuaXLn-6_GoBbr(cT* z-Bu)*X{hb{BnY~39}~^vClbr;ou%JsY;CB3JtJfHsIHLHH+0#6XQdLCd>OFSW9Wm} z2~&*S6Q3N3&tdw>iUs!Il3Dk6iI%a0I!7IED0cj99oV^BL(QL~y9b_{!X=o)1+xAq z<@pYl|I)=(lnYC9GD?eo&_|p7pcEOuEFq~|Ds851p~=M5DG(74%Pcxn(xMH}8aML= zC=X|+&F)gOe2Oiy%r{cGUJ3Ch+4~4~O#9J~3U0ErYw3qER^uY+Rtnx(n62iX1|2Hh zra%x4MCs18EDUgS&hJj!9AlK$o1M9bu#REi4CRfycU?7Qy=%4u zQm4q_hpE4DM7vAel{-YqFBy<`2$_#S$DH5sBgjF~f0@h<8oxAlW{#Rok$swNUPi1m zD7xo`sDY-Er3exX5PnSOSOp14n%rrY#x{&CxGP$~aa-@~Drx-EOB(x_N+?Hq=b-YX z9wGbr>7+4thaU?+VN7L~sBdUWGvHQ>(e9i6+XZbmOT7LY1wM{Pf~Lers^*Ry%Wl&xFE`{{wcV)K`OB;EFUEFQCTUYtBl>l*+ko zF(p^8(IcwldC#SaS*J_;klhqGOeSm}ka@cfU!U=e7h#DQYh7P^@?(QyVj{< zrnMw`34BJZ%bl9j6ysj`>|XMDLXthOCV2nXFAXBO;Ga5Dqb1mO{K^t~0i5pqHlmR= zVdn+ow^Yuzwmc!3g%!6@VCkx9k6V=2KE1MnY6iVS;-?ud^N1l))34#cl(`xLLh@AC z&yUvIDy@&glTDd7-X9;)GhGW*Rqx}|UAwn-l~x?oi=vC)7O`IF8Q(e9RkB~OTJ|mU zf^Q`Luz%zugr1|e(rmFlwBR)36cm(=TUMO()jKarRrXg}j=TxVOT)oKrrndC@Ja$E@IQTn))SEb(@M2v`k&GGaeI<) zbFBYigM*)T)KGzgfPjGgSLLN4p|BwSSL_^*>hJ^QKWgXybs=8QLEyi1@i`6zP%V7% z4h{tIzq!%l4;_%c{s$^HjGD>`1p#3V0|7z(kMn&LZ#Lb3!w?Yv4;6v_ AT>t<8 delta 15009 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

      s$*rls@!sHBO;ZCZI;P{yKGwD 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 L_^*Fz5Rm@|%_AvF diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 65e3751..648a6d1 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -4,4 +4,4 @@ bld.downloadLocation= bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.0-SNAPSHOT bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= -bld.version=2.0.1 +bld.version=2.1.0 diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 2ed4ea388bcd002571fe64a263d844920f36250b..458e738edf030d228a4d41e7435d978b076565bd 100644 GIT binary patch delta 15855 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 AEdT%j delta 15009 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

      s$*rls@!sHBO;ZCZI;P{yKGwD zr+ydZ11ibk3|<{!W2?KyUimE|>R~zud`_X2=pLhxyGB~{k5atW(ZVz?)CzCfV5-V7 zzmt@jsuNskPkC<40M}q+Wt+5{A<>-N570PeqlgJYT4$RCUz^SF-p9;>cTbBF z%~cGoK99|`o%)VxLB%p$p{7!eW~m;>1kGfcTX&Aa!t-?z z@4?gX!aR=1p7d3H(k_wQs~M<`LWE_BgO02Yix~K?{esz z0$PF6#H`M$Zq+qL4h`nd(iJTt@GBas!;lAU2fZh^J8YoKz^*l75KFb70i?c ze$C=3AqQiwU7ED?SFRy@D%t1$4UR5t8;C{8(csV9ZaS_kVkYh_Gacm_OL}0F=a^Al z{bA-zO~9CUjHjyv01-KNiiF?bex(_V@AC-zKc|$fYy{&k6L3^&Y69ac6o;M z*3}!q&!gZ<|3n62Yk2+#sjV1WHHO5(F=S9wfwxHkVnNBAh)F^n4jy`Oo#8rtDbOBI z!7B{eL}`TZcyiB!7vxtjo>Ru`QboZ?xyBlg<2Fz?#7*Is99B3PU`Nf|Al*RP#(Y3{ znBHhP;p~F=^$lV@HGFdlWqv&{X|;2PH`A^yrQR0Ln6G!y>sFHa#aPcN<_YJuMeV@6 zZ+zVc*F`Bd7pV$E#^ynnpwW!#~6s11cMVj05 z`vc06D;|{WF$W}a-W_BpoHHck>0RK3HzaJD<}+&4W2a>w?W1BK(D3yWj!mjM6n_%KR05d-%b%hs5ok#B6`?z7gba%ZN$?Ncm*Ac4RJnUE8l zR@eg4`;MqN+Ip;XXVOk`PRiY3>V{1&jV`FM>f**Buc4PzCxYE!_$c_gllI*CE+but zF+l}P?469`r*br@+sE#U=gK?$BT-RS26>_O0i$T6eH^)*Ie8U-#ZYV(w5fh*CKPEO zG9CO_Q-ouc+Q^};&y{6ffzgqh#ssy4d#Gh$XOfxc zF`;_JAu8s>Ht}x`(z5Qs;1S}Uj%x`Th(6TjeGZrNcf2ZFjP(~TpXT>UP(;ei;AxHI z#K%!a#piT*$JoJ?S5gHfYjGvn(bO?bE$zN(KN|R$ih5V<%8>e$a=^KfMx}sI{ushf zh>?+^rX$#SzlcrQ9}jAmg-2T-vC|PUi?}8~;b5`hhrW!=fm?%!KGL0+==ZyCu4wm` z3Nr=@sO4S05PbV%Kpn$1VYmZxrX!#vcVGQ-I z12WFyJ1h%MRf|Dn?C^IIp9ODWKbl$%H!HlRyT2JjwzS*60sLe95rBv>|HR<;l9mKG zu8TLYXld0#Q-Gj&@7K^O!#2dWlM*Xo^542`CxLNJw5VhUmJ+YKPM!s|yrdWXNf-UY zR#|<|uiP+{Xy}*@6&eS(GztT@FTcNvfKr@?f|dNf{ihM{BAEN65^@0ph4I#2W!?mBXH zRf$LR#Sr~koi~#c)V-mu{I%J*RB_9AOHypy&XB(GMhH)kdW89&`$b0;%C{kcp)AL( zWTgrxEZ~r7Fo{inJV9e)Z$zaynNq!hBbyi1b1SRoE*m0y`Iz`rSn~2*>q`8$-L&Jk zG;J3>i8N?Swuyb=SCVf|bj8p5@2ghjUd7s`xKC-PstML|jceRaH2fgYS(B9>wZdZG z)|8L981#5rKBleTXoKlKT@>YU_uU$tFb(CEtO5O6Pa%E9BZyF}l(l$+dP#9&1ZW^` z0!kjL^GBC#u`guDGfi}oV8IEK?!oQRb%K5g+5uj8L%$|&$_V7tY`fI!ng0}|F{3#S z5;hV~avt%ljavS4xmZmozD*p)GO)23mBUGBGbMl9>*t4sBZFyz40Qz2cQ`eHYss*;VtBWV#3dpusikcz?+%hPX zy6QAGPl{1!|71ZM(0K9n!ov4tlWjxheF~B8=UB!2BI#ZWWYK(qF}~C^NPk9iCeo`7yD-?n4ISG&!J8K*A<$;%n zR_B3H@Se2rQIt32XvuT-J~XqBiT$jsqb|QGXX91J!AyyuQ?8wA8*IY6zDMea_hUJZ zCipb-^=e~rmkpquSGB^wHDpZ)xIOK)FMQnabn4MboaS|&Dsg_il3(mwu!;F2UY&sC zN7a;y`OC2$2&dB{wJ66?wjeq;06C_64{X;gQ2l4&Y@Ym1`<~R|qKU%&D4?=x`ZP*u zY$|56wq}H|`te^BRsCmZ`1%G)sAxx=iMP!39rctXJ_`L*6`Ey!rvGl1_@dsF`e_a| zTj~?n2&hgz@!4ZZa#>VjO2$nb72NUr_OTM~sE{xG1>^aZOg1&y5U70Z3aBBPmF=); zAIy0sNt#(hWQBPYjmeqf4vS7+m*MekH)3H;c{)Fw z^(ss6Z)ur>tsl>)ie}k%c@tr)TG40a+aadLwBn7E_P4Xx;w$0 z9W#S%D#;q3CIy=S_bE?e0?2fifjoe3xb(wQ-{8PSotA+bO zj~2ho8~hu!Lj1j})HAP-_W=LTAA$x8(?n-S3J-S}AMa`YpSpqu%hQ|>cl3LrOoug5 z26){rUH&=GuR%9mmvn`SvQJWcO^4 zyvPo|1QliQp3_5dbgqPCGprE*$e>{ysWM5SK|nwt|5Zg9P%w0m|4qY8uy++f{7)X{ z|9(M2m#e^k>EhjR!L+#(W?XR-uJ};s{{N=pqey9-U?3p25FjAb|ET}BknsK2DB6wS zzdQ-m|A=Y?62{!9i2pMbS>#BD6DSBs&_83=|F!xjwb~}IIkG3Dxg-1+=!EAjy!#KB z2@V26_J4qp_6bnV6#oH={)h4ZJ45*Y1MGGL0TGcEGf)>-R*_PWSCoN-`i~yw-{bmk L_^*Fz5Rm@|y|gIm diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 79b2f59..afd920b 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -5,4 +5,4 @@ bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.2 bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.4 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= -bld.version=2.0.1 +bld.version=2.1.0 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index c221910..3b2375e 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -44,7 +44,7 @@ public class PitestOperationBuild extends Project { var pitest = version(1, 16, 2); scope(compile) - .include(dependency("com.uwyn.rife2", "bld", version(2, 0, 1))); + .include(dependency("com.uwyn.rife2", "bld", version(2, 1, 0))); scope(test) .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) From bf097e614a3179e56a317aeab41f3f16688f5606 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 30 Aug 2024 14:54:01 -0700 Subject: [PATCH 26/82] Updated extensions dependencies --- lib/bld/bld-wrapper.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index afd920b..5d0bba4 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,8 +1,8 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.2 -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.4 +bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.3 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.5 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= bld.version=2.1.0 From cfdb81dad470850deb29d7d1eff23847e6e8b07a Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 30 Aug 2024 15:08:38 -0700 Subject: [PATCH 27/82] Minor cleanups --- README.md | 4 +-- .../rife/bld/extension/PitestOperation.java | 34 ++++++------------- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 5cb787b..cb220dd 100755 --- a/README.md +++ b/README.md @@ -40,8 +40,8 @@ Don't forget to add the Pitest `test` dependencies to your build file, as they a ```java repositories = List.of(MAVEN_CENTRAL); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 16, 1))) - .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 1))) + .include(dependency("org.pitest", "pitest", version(1, 16, 2))) + .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 2))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.pitest", "pitest-testng-plugin", version(1, 0, 0))); ``` diff --git a/src/main/java/rife/bld/extension/PitestOperation.java b/src/main/java/rife/bld/extension/PitestOperation.java index 3c5b2b3..eb6c5c7 100644 --- a/src/main/java/rife/bld/extension/PitestOperation.java +++ b/src/main/java/rife/bld/extension/PitestOperation.java @@ -106,8 +106,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #avoidCallsTo(Collection) */ public PitestOperation avoidCallsTo(String... avoidCallTo) { - options_.put("--avoidCallsTo", String.join(",", Arrays.stream(avoidCallTo).filter(this::isNotBlank).toList())); - return this; + return avoidCallsTo(List.of(avoidCallTo)); } /** @@ -292,9 +291,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #excludedClasses(Collection) */ public PitestOperation excludedClasses(String... excludedClass) { - options_.put("--excludedClasses", - String.join(",", Arrays.stream(excludedClass).filter(this::isNotBlank).toList())); - return this; + return excludedClasses(List.of(excludedClass)); } /** @@ -318,9 +315,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #excludedGroups(Collection) */ public PitestOperation excludedGroups(String... excludedGroup) { - options_.put("--excludedGroups", - String.join(",", Arrays.stream(excludedGroup).filter(this::isNotBlank).toList())); - return this; + return excludedGroups(List.of(excludedGroup)); } /** @@ -344,9 +339,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #excludedMethods(Collection) */ public PitestOperation excludedMethods(String... excludedMethod) { - options_.put("--excludedMethods", - String.join(",", Arrays.stream(excludedMethod).filter(this::isNotBlank).toList())); - return this; + return excludedMethods(List.of(excludedMethod)); } /** @@ -382,8 +375,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #excludedTestClasses(Collection) */ public PitestOperation excludedTestClasses(String... testClasses) { - options_.put("--excludedTestClasses", String.join(",", testClasses)); - return this; + return excludedTestClasses(List.of(testClasses)); } /** @@ -509,8 +501,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #features(Collection) */ public PitestOperation features(String... feature) { - options_.put("--features", String.join(",", Arrays.stream(feature).filter(this::isNotBlank).toList())); - return this; + return features(List.of(feature)); } /** @@ -625,9 +616,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #includedGroups(Collection) */ public PitestOperation includedGroups(String... includedGroup) { - options_.put("--includedGroups", - String.join(",", Arrays.stream(includedGroup).filter(this::isNotBlank).toList())); - return this; + return includedGroups(List.of(includedGroup)); } /** @@ -685,8 +674,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #jvmArgs(Collection) */ public PitestOperation jvmArgs(String... args) { - options_.put("--jvmArgs", String.join(",", Arrays.stream(args).filter(this::isNotBlank).toList())); - return this; + return jvmArgs(List.of(args)); } /** @@ -1238,8 +1226,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #targetClasses(String...) */ public PitestOperation targetClasses(String... targetClass) { - options_.put("--targetClasses", String.join(",", Arrays.stream(targetClass).filter(this::isNotBlank).toList())); - return this; + return targetClasses(List.of(targetClass)); } /** @@ -1255,8 +1242,7 @@ public class PitestOperation extends AbstractProcessOperation { * @see #targetTests(Collection) */ public PitestOperation targetTests(String... test) { - options_.put("--targetTests", String.join(",", Arrays.stream(test).filter(this::isNotBlank).toList())); - return this; + return targetTests(List.of(test)); } /** From b67915a310e0e257923aab3f04890eda1c9dfecb Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 30 Aug 2024 15:09:13 -0700 Subject: [PATCH 28/82] Version 1.0.0 --- examples/lib/bld/bld-wrapper.properties | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 648a6d1..77be62a 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.0-SNAPSHOT +bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.0 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= bld.version=2.1.0 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 3b2375e..4580b1c 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -33,7 +33,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(1, 0, 0, "SNAPSHOT"); + version = version(1, 0, 0); javaRelease = 17; From fd54c6bd0e20c6f4e9b6f82bbe056d1181ad01da Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 2 Sep 2024 10:21:09 -0700 Subject: [PATCH 29/82] Bumped PIT to version 1.16.3 --- README.md | 4 ++-- examples/src/bld/java/com/example/ExamplesBuild.java | 4 ++-- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cb220dd..890c64c 100755 --- a/README.md +++ b/README.md @@ -40,8 +40,8 @@ Don't forget to add the Pitest `test` dependencies to your build file, as they a ```java repositories = List.of(MAVEN_CENTRAL); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 16, 2))) - .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 2))) + .include(dependency("org.pitest", "pitest", version(1, 16, 3))) + .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 3))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.pitest", "pitest-testng-plugin", version(1, 0, 0))); ``` diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index 058fbc2..3109ff7 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -27,8 +27,8 @@ public class ExamplesBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 16, 2))) - .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 2))) + .include(dependency("org.pitest", "pitest", version(1, 16, 3))) + .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 3))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 0))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 0))); diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 4580b1c..e8216c7 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -42,7 +42,7 @@ public class PitestOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pitest = version(1, 16, 2); + var pitest = version(1, 16, 3); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 1, 0))); scope(test) From 393d8736aa9f5be0629f8d5b8a11d9c5861f59cf Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 2 Sep 2024 10:21:35 -0700 Subject: [PATCH 30/82] Added soft assertions for parameters check --- .../rife/bld/extension/PitestOperationTest.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index 82f446c..5026c91 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -16,6 +16,7 @@ package rife.bld.extension; +import org.assertj.core.api.AutoCloseableSoftAssertions; import org.junit.jupiter.api.Test; import rife.bld.BaseProject; import rife.bld.Project; @@ -121,15 +122,17 @@ class PitestOperationTest { .verbosity("default") .executeConstructProcessCommandList(); - for (var p : args) { - var found = false; - for (var a : params) { - if (a.startsWith(p)) { - found = true; - break; + try (var softly = new AutoCloseableSoftAssertions()) { + for (var p : args) { + var found = false; + for (var a : params) { + if (a.startsWith(p)) { + found = true; + break; + } } + softly.assertThat(found).as(p + " not found.").isTrue(); } - assertThat(found).as(p + " not found.").isTrue(); } } From d568ee486f92092f76f6f45662cd6e297befeadc Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 2 Sep 2024 10:21:45 -0700 Subject: [PATCH 31/82] Version 1.0.1 --- examples/lib/bld/bld-wrapper.properties | 2 +- .../bld/extension/PitestOperationBuild.java | 30 +++++++++---------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 77be62a..82c1350 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.0 +bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.1 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= bld.version=2.1.0 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index e8216c7..3aeb211 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -33,7 +33,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(1, 0, 0); + version = version(1, 0, 1); javaRelease = 17; @@ -62,28 +62,26 @@ public class PitestOperationBuild extends Project { publishOperation() .repository(version.isSnapshot() ? repository("rife2-snapshot") : repository("rife2")) + .repository(repository("github")) .info() .groupId("com.uwyn.rife2") .artifactId("bld-pitest") .description("PIT Mutation Testing Extension for bld") .url("https://github.com/rife2/bld-pitest") - .developer( - new PublishDeveloper() - .id("ethauvin") - .name("Erik C. Thauvin") - .email("erik@thauvin.net") - .url("https://erik.thauvin.net/") + .developer(new PublishDeveloper() + .id("ethauvin") + .name("Erik C. Thauvin") + .email("erik@thauvin.net") + .url("https://erik.thauvin.net/") ) - .license( - new PublishLicense() - .name("The Apache License, Version 2.0") - .url("https://www.apache.org/licenses/LICENSE-2.0.txt") + .license(new PublishLicense() + .name("The Apache License, Version 2.0") + .url("https://www.apache.org/licenses/LICENSE-2.0.txt") ) - .scm( - new PublishScm() - .connection("scm:git:https://github.com/rife2/bld-pitest.git") - .developerConnection("scm:git:git@github.com:rife2/bld-pitest.git") - .url("https://github.com/rife2/bld-pitest") + .scm(new PublishScm() + .connection("scm:git:https://github.com/rife2/bld-pitest.git") + .developerConnection("scm:git:git@github.com:rife2/bld-pitest.git") + .url("https://github.com/rife2/bld-pitest") ) .signKey(property("sign.key")) .signPassphrase(property("sign.passphrase")); From f70c8c89bf303e8e2203e6901c4c2fb997df99da Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 17 Sep 2024 04:08:26 -0700 Subject: [PATCH 32/82] Bumped PIT to version 1.17.0 --- README.md | 4 ++-- examples/lib/bld/bld-wrapper.properties | 2 +- examples/src/bld/java/com/example/ExamplesBuild.java | 4 ++-- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 890c64c..cb0522f 100755 --- a/README.md +++ b/README.md @@ -40,8 +40,8 @@ Don't forget to add the Pitest `test` dependencies to your build file, as they a ```java repositories = List.of(MAVEN_CENTRAL); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 16, 3))) - .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 3))) + .include(dependency("org.pitest", "pitest", version(1, 17, 0))) + .include(dependency("org.pitest", "pitest-command-line", version(1, 17, 0))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.pitest", "pitest-testng-plugin", version(1, 0, 0))); ``` diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 82c1350..445f4e5 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.1 +bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.2 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= bld.version=2.1.0 diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index 3109ff7..0c7a676 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -27,8 +27,8 @@ public class ExamplesBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 16, 3))) - .include(dependency("org.pitest", "pitest-command-line", version(1, 16, 3))) + .include(dependency("org.pitest", "pitest", version(1, 17, 0))) + .include(dependency("org.pitest", "pitest-command-line", version(1, 17, 0))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 0))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 0))); diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 3aeb211..7d99d4a 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -33,7 +33,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(1, 0, 1); + version = version(1, 0, 2); javaRelease = 17; @@ -42,7 +42,7 @@ public class PitestOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pitest = version(1, 16, 3); + var pitest = version(1, 17, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 1, 0))); scope(test) From 9089cae653213f6e48a6dd4c9c67702313a8b8d4 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 27 Oct 2024 17:10:26 -0700 Subject: [PATCH 33/82] Minor cleanups --- src/test/java/rife/bld/extension/PitestOperationTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index 5026c91..d301eb0 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -38,9 +38,9 @@ import static rife.bld.extension.PitestOperation.TRUE; @SuppressWarnings("PMD.AvoidDuplicateLiterals") class PitestOperationTest { private static final String AS_LIST = "as list"; - private final static String BAR = "bar"; - private final static String FOO = "foo"; - private final static String FOOBAR = FOO + ',' + BAR; + private static final String BAR = "bar"; + private static final String FOO = "foo"; + private static final String FOOBAR = FOO + ',' + BAR; @Test void argLine() { From 6f62c38a9b0d1a9eadb81107ead92217c876b1ec Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 27 Oct 2024 17:10:59 -0700 Subject: [PATCH 34/82] Updated dependencies Bumped JUnit version to 5.11.3 Bumped PMD extension version to 1.1.7 Bumped JDK to version 23 (GitHub CI Workflow) --- .github/workflows/bld.yml | 2 +- config/pmd.xml | 4 ++-- examples/src/bld/java/com/example/ExamplesBuild.java | 4 ++-- lib/bld/bld-wrapper.properties | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index bf65051..f7e10f8 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: - java-version: [17, 21, 22] + java-version: [17, 21, 23] steps: - name: Checkout source repository diff --git a/config/pmd.xml b/config/pmd.xml index 3d3203c..2641880 100644 --- a/config/pmd.xml +++ b/config/pmd.xml @@ -7,9 +7,9 @@ - - + + diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index 0c7a676..391e1aa 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -30,8 +30,8 @@ public class ExamplesBuild extends Project { .include(dependency("org.pitest", "pitest", version(1, 17, 0))) .include(dependency("org.pitest", "pitest-command-line", version(1, 17, 0))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 0))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 0))); + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 3))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 3))); } public static void main(String[] args) { diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 5d0bba4..196e2c9 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -2,7 +2,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.3 -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.5 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.7 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= bld.version=2.1.0 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 7d99d4a..8fae124 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -49,8 +49,8 @@ public class PitestOperationBuild extends Project { .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 0))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 0))) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 3))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 3))) .include(dependency("org.assertj", "assertj-core", version(3, 26, 3))); javadocOperation() From 4adc28d4a58beb2504de005f9d8a60977fac4d6d Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 4 Nov 2024 10:50:20 -0800 Subject: [PATCH 35/82] Added pmd-cli command --- .../rife/bld/extension/PitestOperationBuild.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 8fae124..7923188 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -30,6 +30,11 @@ import static rife.bld.dependencies.Scope.test; import static rife.bld.operations.JavadocOptions.DocLinkOption.NO_MISSING; public class PitestOperationBuild extends Project { + final PmdOperation pmdOp = new PmdOperation() + .fromProject(this) + .failOnViolation(true) + .ruleSets("config/pmd.xml"); + public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; @@ -93,11 +98,12 @@ public class PitestOperationBuild extends Project { @BuildCommand(summary = "Runs PMD analysis") public void pmd() throws Exception { - new PmdOperation() - .fromProject(this) - .failOnViolation(true) - .ruleSets("config/pmd.xml") - .execute(); + pmdOp.execute(); + } + + @BuildCommand(value = "pmd-cli", summary = "Runs PMD analysis (CLI)") + public void pmdCli() throws Exception { + pmdOp.includeLineNumber(false).execute(); } @Override From 1227115805201abb4a6e14d0451bb5e1493e1491 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 4 Nov 2024 10:51:11 -0800 Subject: [PATCH 36/82] Bumped PIT to version 1.17.1 --- examples/src/bld/java/com/example/ExamplesBuild.java | 4 ++-- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index 391e1aa..514542b 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -27,8 +27,8 @@ public class ExamplesBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 17, 0))) - .include(dependency("org.pitest", "pitest-command-line", version(1, 17, 0))) + .include(dependency("org.pitest", "pitest", version(1, 17, 1))) + .include(dependency("org.pitest", "pitest-command-line", version(1, 17, 1))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 3))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 3))); diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 7923188..6ff815a 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -47,7 +47,7 @@ public class PitestOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pitest = version(1, 17, 0); + var pitest = version(1, 17, 1); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 1, 0))); scope(test) From c26f5313296dbc5f9e152e2dca9a26edddf57ca3 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 4 Nov 2024 10:51:29 -0800 Subject: [PATCH 37/82] Version 1.0.3 --- .idea/misc.xml | 1 + examples/lib/bld/bld-wrapper.properties | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 92bc43d..192c134 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,6 +4,7 @@ +

      + * Defaults to {@code false} + * + * @param isDryRun {@code true} or {@code false} + * @return this operation instance + */ + public PitestOperation dryRun(boolean isDryRun) { + if (isDryRun) { + options_.put("--dryRun", TRUE); + } else { + options_.put("--dryRun", FALSE); + } + return this; + } + /** * List of globs to match against class names. Matching classes will be excluded from mutation. * diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index d301eb0..5bb4ea2 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -77,6 +77,7 @@ class PitestOperationTest { .classPathFile(FOO) .coverageThreshold(0) .detectInlinedCode(false) + .dryRun(false) .excludedClasses("class") .excludedClasses(List.of(FOO, BAR)) .excludedGroups("group") diff --git a/src/test/resources/pitest-args.txt b/src/test/resources/pitest-args.txt index 348f16e..df24bfb 100644 --- a/src/test/resources/pitest-args.txt +++ b/src/test/resources/pitest-args.txt @@ -4,6 +4,7 @@ --classPathFile --coverageThreshold --detectInlinedCode +--dryRun --excludedClasses --excludedGroups --excludedMethods From 9ed731e9361054fef07c28072b3b886af343829c Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 16 Dec 2024 09:24:51 -0800 Subject: [PATCH 45/82] Version 1.0.5 --- examples/lib/bld/bld-wrapper.properties | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index deaf240..23ac57b 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.4 +bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.5 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= bld.version=2.1.0 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index c5217c5..7fbe9f8 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -38,7 +38,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(1, 0, 4); + version = version(1, 0, 5); javaRelease = 17; From c03dc8a894bc79edd6aff6141b17cde0890ba282 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sat, 28 Dec 2024 18:06:10 -0800 Subject: [PATCH 46/82] Bumped PMD extension to version 1.1.9 --- lib/bld/bld-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 76a15a0..f1493b7 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -2,7 +2,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.3 -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.8 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.9 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= bld.version=2.1.0 From d49fc24bd7646a9afec3fd2304fa70eded8ebe03 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sat, 28 Dec 2024 18:06:41 -0800 Subject: [PATCH 47/82] Bumped AssertJ to version 3.27.0 --- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 7fbe9f8..472ade9 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -56,7 +56,7 @@ public class PitestOperationBuild extends Project { .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 4))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 4))) - .include(dependency("org.assertj", "assertj-core", version(3, 26, 3))); + .include(dependency("org.assertj", "assertj-core", version(3, 27, 0))); javadocOperation() .javadocOptions() From 7028acf4d022ea8a436e8ca7f2c8f6b0398fa15c Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 10 Jan 2025 06:31:12 -0800 Subject: [PATCH 48/82] Bumped AssertJ to version 3.27.2 --- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 472ade9..04d8ee0 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -56,7 +56,7 @@ public class PitestOperationBuild extends Project { .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 4))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 4))) - .include(dependency("org.assertj", "assertj-core", version(3, 27, 0))); + .include(dependency("org.assertj", "assertj-core", version(3, 27, 2))); javadocOperation() .javadocOptions() From e5a56b518ccc4d13edd31f17ac9adcd7f125ae5a Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 10 Jan 2025 06:32:38 -0800 Subject: [PATCH 49/82] Bumped PIT to version 1.17.4 --- README.md | 4 ++-- examples/src/bld/java/com/example/ExamplesBuild.java | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3d4919b..fb10b1d 100755 --- a/README.md +++ b/README.md @@ -40,8 +40,8 @@ Don't forget to add the Pitest `test` dependencies to your build file, as they a ```java repositories = List.of(MAVEN_CENTRAL); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 17, 3))) - .include(dependency("org.pitest", "pitest-command-line", version(1, 17, 3))) + .include(dependency("org.pitest", "pitest", version(1, 17, 4))) + .include(dependency("org.pitest", "pitest-command-line", version(1, 17, 4))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.pitest", "pitest-testng-plugin", version(1, 0, 0))); ``` diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index 3e5e910..f76636e 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -26,7 +26,7 @@ public class ExamplesBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); - var pitest = version(1, 17, 3); + var pitest = version(1, 17, 4); scope(test) .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 04d8ee0..252b53e 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -47,7 +47,7 @@ public class PitestOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pitest = version(1, 17, 3); + var pitest = version(1, 17, 4); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 1, 0))); scope(test) From 9ff912ac7fa478d191ffe4f2ed36addcd30d33b8 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 10 Jan 2025 06:50:28 -0800 Subject: [PATCH 50/82] Updated copyright for 2025 --- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- src/main/java/rife/bld/extension/PitestOperation.java | 2 +- src/test/java/rife/bld/extension/PitestOperationTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 252b53e..a426715 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/rife/bld/extension/PitestOperation.java b/src/main/java/rife/bld/extension/PitestOperation.java index f619c38..ff51a82 100644 --- a/src/main/java/rife/bld/extension/PitestOperation.java +++ b/src/main/java/rife/bld/extension/PitestOperation.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index 5bb4ea2..109e17b 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 3a67e0e1b67d2f4b87eb821a209c8571d2f97415 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 10 Jan 2025 06:53:17 -0800 Subject: [PATCH 51/82] Version 1.0.6 --- examples/lib/bld/bld-wrapper.properties | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 23ac57b..bc182bc 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.5 +bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.6 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= bld.version=2.1.0 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index a426715..60d8358 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -38,7 +38,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(1, 0, 5); + version = version(1, 0, 6); javaRelease = 17; From 7dfb3cda5907e68f1b2c624338f7a9f2ceaf1c68 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 10 Jan 2025 06:58:14 -0800 Subject: [PATCH 52/82] Fixed copyright template --- .idea/copyright/Apache_License.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.idea/copyright/Apache_License.xml b/.idea/copyright/Apache_License.xml index ade80da..4446c15 100644 --- a/.idea/copyright/Apache_License.xml +++ b/.idea/copyright/Apache_License.xml @@ -1,6 +1,6 @@ - - + \ No newline at end of file From 16cf748853435fc04b7abbf4508ba80653dab992 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 13 Jan 2025 22:09:17 -0800 Subject: [PATCH 53/82] Bumped PMD extension to version 1.1.10 --- lib/bld/bld-wrapper.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index f1493b7..714a3e3 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -3,6 +3,7 @@ bld.downloadExtensionSources=true bld.downloadLocation= bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.3 bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.9 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.10 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= -bld.version=2.1.0 +bld.version=2.2.0 From eb20bb7432703b65adf0d5ed7226fe807ab7f926 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 13 Jan 2025 22:10:53 -0800 Subject: [PATCH 54/82] Bumped Exec extension to version 1.0.4 --- lib/bld/bld-wrapper.properties | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 714a3e3..9e371e3 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,8 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.3 -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.9 +bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.4 bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.10 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= From 8d4fa46d3cb96135a52c3d0c12f9202c85319482 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 13 Jan 2025 22:12:35 -0800 Subject: [PATCH 55/82] Bumped bld to version 2.2.0 --- .idea/libraries/bld.xml | 4 ++-- .vscode/settings.json | 2 +- README.md | 2 +- examples/.idea/libraries/bld.xml | 4 ++-- examples/.vscode/settings.json | 2 +- examples/lib/bld/bld-wrapper.jar | Bin 30440 -> 30440 bytes examples/lib/bld/bld-wrapper.properties | 2 +- lib/bld/bld-wrapper.jar | Bin 30440 -> 30440 bytes .../bld/extension/PitestOperationBuild.java | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 5c4010c..553c281 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index 4c33beb..a3f4fd0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.1.0.jar", + "${HOME}/.bld/dist/bld-2.2.0.jar", "lib/**/*.jar" ] } diff --git a/README.md b/README.md index fb10b1d..95d23d8 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) -[![bld](https://img.shields.io/badge/2.1.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/2.2.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/bld-pitest/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-pitest) [![Snapshot](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/snapshots/com/uwyn/rife2/bld-pitest/maven-metadata.xml?label=snapshot)](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-pitest) [![GitHub CI](https://github.com/rife2/bld-pitest/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/bld-pitest/actions/workflows/bld.yml) diff --git a/examples/.idea/libraries/bld.xml b/examples/.idea/libraries/bld.xml index 5c4010c..553c281 100644 --- a/examples/.idea/libraries/bld.xml +++ b/examples/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/examples/.vscode/settings.json b/examples/.vscode/settings.json index 4c33beb..a3f4fd0 100644 --- a/examples/.vscode/settings.json +++ b/examples/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.1.0.jar", + "${HOME}/.bld/dist/bld-2.2.0.jar", "lib/**/*.jar" ] } diff --git a/examples/lib/bld/bld-wrapper.jar b/examples/lib/bld/bld-wrapper.jar index f20c09c0bf97b73be7f5db2a739a0f3512b188b1..fa1c322a702a351735d3243a1e9fced63579dc43 100644 GIT binary patch delta 203 zcmaFymhr_~M!o=VW)=|!4h{~6-xIZ?Ci2y?fas0=CN^NkqnshM0T=HiJZzMV+Mu*Z+4E3GxFi=3=9mcKpf!B$Rxsmuy1l+ qi4(-0EhQdc#-!3qnshM0T=HiJZzMV+Mu*Z+4E3GxFi=3=9mcKpf!B$Rxsmuy1l+ qi4(-0EhQdc#-!3 Date: Tue, 14 Jan 2025 11:00:23 -0800 Subject: [PATCH 56/82] Version 1.0.7 --- .idea/icon.svg | 13 +++++++++++++ examples/lib/bld/bld-wrapper.properties | 2 +- .../rife/bld/extension/PitestOperationBuild.java | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 .idea/icon.svg diff --git a/.idea/icon.svg b/.idea/icon.svg new file mode 100644 index 0000000..81220b4 --- /dev/null +++ b/.idea/icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 7bbe4b7..247da80 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.6 +bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.7 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= bld.version=2.2.0 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 2b7c164..ba00757 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -38,7 +38,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(1, 0, 6); + version = version(1, 0, 7); javaRelease = 17; From 390bceaf4c9e58331430a5189d664fdde6452d89 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 11 Feb 2025 11:56:22 -0800 Subject: [PATCH 57/82] Bumped AssertJ to version 3.27.3 --- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index ba00757..215df56 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -56,7 +56,7 @@ public class PitestOperationBuild extends Project { .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 4))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 4))) - .include(dependency("org.assertj", "assertj-core", version(3, 27, 2))); + .include(dependency("org.assertj", "assertj-core", version(3, 27, 3))); javadocOperation() .javadocOptions() From d20b0d3521c3fe524bd22c2f67df52a2994ef481 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 11 Feb 2025 11:57:27 -0800 Subject: [PATCH 58/82] Updated to the latest artifacts actions versions --- .github/workflows/pages.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index bf43624..508f6a5 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -47,11 +47,11 @@ jobs: uses: actions/configure-pages@v3 - name: Upload artifact - uses: actions/upload-pages-artifact@v1 + uses: actions/upload-pages-artifact@v3 with: # Upload generated Javadocs repository path: "build/javadoc/" - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v1 + uses: actions/deploy-pages@v4 From a7945aea0c181d4809a17f599255b6b90441ed33 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 11 Feb 2025 11:59:16 -0800 Subject: [PATCH 59/82] Bumped PIT to version 1.18.0 --- README.md | 2 +- examples/src/bld/java/com/example/ExamplesBuild.java | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 95d23d8..1735d6c 100755 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ Don't forget to add the Pitest `test` dependencies to your build file, as they a ```java repositories = List.of(MAVEN_CENTRAL); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 17, 4))) + .include(dependency("org.pitest", "pitest", version(1, 18, 0))) .include(dependency("org.pitest", "pitest-command-line", version(1, 17, 4))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.pitest", "pitest-testng-plugin", version(1, 0, 0))); diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index f76636e..1719398 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -26,7 +26,7 @@ public class ExamplesBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); - var pitest = version(1, 17, 4); + var pitest = version(1, 18, 0); scope(test) .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 215df56..4421a5c 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -47,7 +47,7 @@ public class PitestOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pitest = version(1, 17, 4); + var pitest = version(1, 18, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 0))); scope(test) From dee9abae139f11f73a9efc4ad06e90492a5fc216 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 11 Feb 2025 11:59:51 -0800 Subject: [PATCH 60/82] Bumped PMD extension to version 1.2.0 --- lib/bld/bld-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 9e371e3..9dfabb0 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -2,7 +2,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.4 -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.10 +Abld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.0 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= bld.version=2.2.0 From a83bea7f2710d0109dd6ab0f96fbdf76c420a1bd Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 11 Feb 2025 12:00:37 -0800 Subject: [PATCH 61/82] Version 1.0.8 --- examples/lib/bld/bld-wrapper.properties | 2 +- lib/bld/bld-wrapper.properties | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 247da80..9c9bc9e 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.7 +bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.8 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= bld.version=2.2.0 diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 9dfabb0..4f5f791 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -2,7 +2,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.4 -Abld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.0 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.0 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= bld.version=2.2.0 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 4421a5c..945dba2 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -38,7 +38,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(1, 0, 7); + version = version(1, 0, 8); javaRelease = 17; From c81b0fac5da048ed3fb0a5b5b2d5baf22a9a291c Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 12 Feb 2025 14:53:05 -0800 Subject: [PATCH 62/82] Bumped PIT to version 1.18.1 --- README.md | 2 +- examples/src/bld/java/com/example/ExamplesBuild.java | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1735d6c..e1e61db 100755 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ Don't forget to add the Pitest `test` dependencies to your build file, as they a ```java repositories = List.of(MAVEN_CENTRAL); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 18, 0))) + .include(dependency("org.pitest", "pitest", version(1, 18, 1))) .include(dependency("org.pitest", "pitest-command-line", version(1, 17, 4))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.pitest", "pitest-testng-plugin", version(1, 0, 0))); diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index 1719398..7fefded 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -26,7 +26,7 @@ public class ExamplesBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); - var pitest = version(1, 18, 0); + var pitest = version(1, 18, 1); scope(test) .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 945dba2..7b480c4 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -47,7 +47,7 @@ public class PitestOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pitest = version(1, 18, 0); + var pitest = version(1, 18, 1); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 0))); scope(test) From bc35adebfd9d825761465bfca92528f363a6b332 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Wed, 12 Feb 2025 14:53:31 -0800 Subject: [PATCH 63/82] Version 1.0.9 --- examples/lib/bld/bld-wrapper.properties | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 9c9bc9e..a3f3455 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.8 +bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.9 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= bld.version=2.2.0 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 7b480c4..a569c9a 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -38,7 +38,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(1, 0, 8); + version = version(1, 0, 9); javaRelease = 17; From c0afb715d73dcc57f401c4cd9bcfa6cd2b19f99a Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 17 Feb 2025 10:00:56 -0800 Subject: [PATCH 64/82] Bump PIT to version 1.18.2 --- README.md | 2 +- examples/src/bld/java/com/example/ExamplesBuild.java | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e1e61db..fa99879 100755 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ Don't forget to add the Pitest `test` dependencies to your build file, as they a ```java repositories = List.of(MAVEN_CENTRAL); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 18, 1))) + .include(dependency("org.pitest", "pitest", version(1, 18, 2))) .include(dependency("org.pitest", "pitest-command-line", version(1, 17, 4))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) .include(dependency("org.pitest", "pitest-testng-plugin", version(1, 0, 0))); diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index 7fefded..adb363b 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -26,7 +26,7 @@ public class ExamplesBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); - var pitest = version(1, 18, 1); + var pitest = version(1, 18, 2); scope(test) .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index a569c9a..335e313 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -38,7 +38,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(1, 0, 9); + version = version(1, 0, 10, "SNAPSHOT"); javaRelease = 17; @@ -47,7 +47,7 @@ public class PitestOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pitest = version(1, 18, 1); + var pitest = version(1, 18, 2); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 0))); scope(test) From 3d8d41ae3dec1b750c87ca17571eab27dfaffd75 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 24 Feb 2025 22:53:44 -0800 Subject: [PATCH 65/82] Bump JUnit to version 5.12.0 --- examples/src/bld/java/com/example/ExamplesBuild.java | 4 ++-- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index adb363b..5ce3188 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -31,8 +31,8 @@ public class ExamplesBuild extends Project { .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 4))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 4))); + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 0))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 0))); } public static void main(String[] args) { diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 335e313..5e0d73c 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -54,8 +54,8 @@ public class PitestOperationBuild extends Project { .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 4))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 4))) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 0))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 0))) .include(dependency("org.assertj", "assertj-core", version(3, 27, 3))); javadocOperation() From 80c4ae074462e3061f76601014010bee6e6a3ddd Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 24 Feb 2025 22:54:59 -0800 Subject: [PATCH 66/82] Bump bld to version 2.2.1 --- .idea/libraries/bld.xml | 4 ++-- .vscode/settings.json | 2 +- README.md | 2 +- examples/.idea/libraries/bld.xml | 4 ++-- examples/.vscode/settings.json | 2 +- examples/lib/bld/bld-wrapper.jar | Bin 30440 -> 30440 bytes examples/lib/bld/bld-wrapper.properties | 2 +- lib/bld/bld-wrapper.jar | Bin 30440 -> 30440 bytes lib/bld/bld-wrapper.properties | 2 +- .../bld/extension/PitestOperationBuild.java | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 553c281..153a060 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index a3f4fd0..ba429d0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.2.0.jar", + "${HOME}/.bld/dist/bld-2.2.1.jar", "lib/**/*.jar" ] } diff --git a/README.md b/README.md index fa99879..f3d113e 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) -[![bld](https://img.shields.io/badge/2.2.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/2.2.1-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/bld-pitest/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-pitest) [![Snapshot](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/snapshots/com/uwyn/rife2/bld-pitest/maven-metadata.xml?label=snapshot)](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-pitest) [![GitHub CI](https://github.com/rife2/bld-pitest/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/bld-pitest/actions/workflows/bld.yml) diff --git a/examples/.idea/libraries/bld.xml b/examples/.idea/libraries/bld.xml index 553c281..153a060 100644 --- a/examples/.idea/libraries/bld.xml +++ b/examples/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/examples/.vscode/settings.json b/examples/.vscode/settings.json index a3f4fd0..ba429d0 100644 --- a/examples/.vscode/settings.json +++ b/examples/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.2.0.jar", + "${HOME}/.bld/dist/bld-2.2.1.jar", "lib/**/*.jar" ] } diff --git a/examples/lib/bld/bld-wrapper.jar b/examples/lib/bld/bld-wrapper.jar index fa1c322a702a351735d3243a1e9fced63579dc43..7731211fac404a740e9b7670f6f95a1372eb2d7e 100644 GIT binary patch delta 187 zcmaFymhr_~M&1B#W)=|!4h{|m)y)wTdFz;g)W$wj8xTFY*Isk;dz;xzAkOAq`)&wB z+KF8cETUR)o)OIWUT6rGnyg)-sK~+);LXk<_eVm3oq>UY6^H}88JR>F;I>T8EpY}L ozq!N{O#d$l0n=fn5PEH?E13VaG!7zO=Fb6iK@`Z$$!p830dQJ80RR91 delta 187 zcmaFymhr_~M&1B#W)=|!4h{~6-xIYb^42i}sf~T6HXwR(uf68x_cpVcK%C9J_T3PM zv=h4?SVXnpJR_L#z0eRWHCekvQIUZmz?+?;A60|1q!MO^>@ diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index a3f3455..e279419 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -4,4 +4,4 @@ bld.downloadLocation= bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.9 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= -bld.version=2.2.0 +bld.version=2.2.1 diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 30ddd38133867d0a51f14dd42995917184778867..1b14a16a06f254a2bd6cc807bde26adfeb9233b3 100644 GIT binary patch delta 187 zcmaFymhr_~M&1B#W)=|!4h{|mrOgo&dFz;g)W$wj8xTFY*Isk;dz;xzAkOAq`)&wB z+KF8cETUR)o)OIWUT6rGnyg)-sK~+);LXk<_eVm3oq>UY6^H}88JR>F;I>T8EpY}L ozq!N{O#d$l0n=fn5PEH?E13VaG!7zO=Fb6iK@`Z$$!p830biaw(EtDd delta 187 zcmaFymhr_~M&1B#W)=|!4h{~69}~4F^42i}sf~T6HXwR(uf68x_cpVcK%C9J_T3PM zv=h4?SVXnpJR_L#z0eRWHCekvQIUZmz?+?;A60|12SMJ)gT diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 4f5f791..6d3e0c7 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -5,4 +5,4 @@ bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.4 bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.0 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= -bld.version=2.2.0 +bld.version=2.2.1 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 5e0d73c..2b17ad4 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -49,7 +49,7 @@ public class PitestOperationBuild extends Project { var pitest = version(1, 18, 2); scope(compile) - .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 0))); + .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1))); scope(test) .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) From f089ff8c9f9c46c3e03cd03af19a438f27e0f19d Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 24 Feb 2025 22:57:08 -0800 Subject: [PATCH 67/82] Bump PIT Junit5 plugin to version 1.2.2 --- README.md | 2 +- examples/src/bld/java/com/example/ExamplesBuild.java | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f3d113e..fe4c26b 100755 --- a/README.md +++ b/README.md @@ -42,6 +42,6 @@ repositories = List.of(MAVEN_CENTRAL); scope(test) .include(dependency("org.pitest", "pitest", version(1, 18, 2))) .include(dependency("org.pitest", "pitest-command-line", version(1, 17, 4))) - .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) + .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 2))) .include(dependency("org.pitest", "pitest-testng-plugin", version(1, 0, 0))); ``` diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index 5ce3188..e7d7747 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -30,7 +30,7 @@ public class ExamplesBuild extends Project { scope(test) .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) - .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) + .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 2))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 0))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 0))); } diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 2b17ad4..de95960 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -53,7 +53,7 @@ public class PitestOperationBuild extends Project { scope(test) .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) - .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1))) + .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 2))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 0))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 0))) .include(dependency("org.assertj", "assertj-core", version(3, 27, 3))); From 22b0babdd5209fb2c54fe7cc626be15eb8e11282 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 17 Mar 2025 09:47:25 -0700 Subject: [PATCH 68/82] Bump PMD extension to version 1.2.1 --- lib/bld/bld-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 6d3e0c7..c5da09f 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -2,7 +2,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.4 -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.0 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.1 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= bld.version=2.2.1 From 2e3d65bd08dd6a47d3b815406605cbba805dcf54 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 17 Mar 2025 09:48:00 -0700 Subject: [PATCH 69/82] Bump PIT to version 1.19.0 --- README.md | 2 +- examples/src/bld/java/com/example/ExamplesBuild.java | 6 +++--- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index fe4c26b..ce58ec1 100755 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ Don't forget to add the Pitest `test` dependencies to your build file, as they a ```java repositories = List.of(MAVEN_CENTRAL); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 18, 2))) + .include(dependency("org.pitest", "pitest", version(1, 19, 0))) .include(dependency("org.pitest", "pitest-command-line", version(1, 17, 4))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 2))) .include(dependency("org.pitest", "pitest-testng-plugin", version(1, 0, 0))); diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index e7d7747..ce959ea 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -26,13 +26,13 @@ public class ExamplesBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); - var pitest = version(1, 18, 2); + var pitest = version(1, 19, 0); scope(test) .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 2))) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 0))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 0))); + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1))); } public static void main(String[] args) { diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index de95960..fc37994 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -47,15 +47,15 @@ public class PitestOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pitest = version(1, 18, 2); + var pitest = version(1, 19, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1))); scope(test) .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 2))) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 0))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 0))) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1))) .include(dependency("org.assertj", "assertj-core", version(3, 27, 3))); javadocOperation() From bff5cd76e6876bb0c55db4b95cb276c68f8ecc81 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 18 Mar 2025 13:04:31 -0700 Subject: [PATCH 70/82] Add generic installation instructions --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ce58ec1..815fd15 100755 --- a/README.md +++ b/README.md @@ -7,7 +7,15 @@ [![Snapshot](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/snapshots/com/uwyn/rife2/bld-pitest/maven-metadata.xml?label=snapshot)](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-pitest) [![GitHub CI](https://github.com/rife2/bld-pitest/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/bld-pitest/actions/workflows/bld.yml) -To install, please refer to the [extensions documentation](https://github.com/rife2/bld/wiki/Extensions). +To install the latest version, add the following to the `lib/bld/bld-wrapper.properties` file: + +```properties +bld.extension-pitest=com.uwyn.rife2:bld-pitest +``` + +For more information, please refer to the [extensions](https://github.com/rife2/bld/wiki/Extensions) documentation. + +## Mutation Testing with PIT To run mutation tests and coverage, add the following to your build file: From d373dd26c654af20bb234f48c1c77a4c567c4c57 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 18 Mar 2025 23:38:42 -0700 Subject: [PATCH 71/82] JDK 24 --- .github/workflows/bld.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index f7e10f8..138f5e5 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: - java-version: [17, 21, 23] + java-version: [17, 21, 24] steps: - name: Checkout source repository From dad854d7e8f8ed514c2c5e5720945b2160518216 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Mar 2025 13:11:25 -0700 Subject: [PATCH 72/82] Fix non system specific path separator --- src/main/java/rife/bld/extension/PitestOperation.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/rife/bld/extension/PitestOperation.java b/src/main/java/rife/bld/extension/PitestOperation.java index ff51a82..a9dd870 100644 --- a/src/main/java/rife/bld/extension/PitestOperation.java +++ b/src/main/java/rife/bld/extension/PitestOperation.java @@ -432,9 +432,9 @@ public class PitestOperation extends AbstractProcessOperation { if (project_ != null) { args.add(javaTool()); args.add("-cp"); - args.add(String.format("%s:%s:%s:%s", new File(project_.libTestDirectory(), "*"), - new File(project_.libCompileDirectory(), "*"), project_.buildMainDirectory(), - project_.buildTestDirectory())); + args.add(String.format("%s%s%s%s%s%s%s", new File(project_.libTestDirectory(), "*"), File.pathSeparator, + new File(project_.libCompileDirectory(), "*"), File.pathSeparator, project_.buildMainDirectory(), + File.pathSeparator, project_.buildTestDirectory())); args.add("org.pitest.mutationtest.commandline.MutationCoverageReport"); if (!options_.containsKey(SOURCE_DIRS)) { From 09beae6e4eee20847564d61448c2f28a73824c0a Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Mar 2025 13:14:57 -0700 Subject: [PATCH 73/82] Only check pitest arguments on Linux --- .../java/rife/bld/extension/PitestOperationBuild.java | 11 +++++++---- .../java/rife/bld/extension/PitestOperationTest.java | 3 +++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index fc37994..613592d 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -108,10 +108,13 @@ public class PitestOperationBuild extends Project { @Override public void test() throws Exception { - new ExecOperation() - .fromProject(this) - .command("scripts/cliargs.sh") - .execute(); + var os = System.getProperty("os.name"); + if (os != null && os.toLowerCase().contains("linux")) { + new ExecOperation() + .fromProject(this) + .command("scripts/cliargs.sh") + .execute(); + } super.test(); } } diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index 109e17b..bb5ed8c 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -18,6 +18,8 @@ package rife.bld.extension; import org.assertj.core.api.AutoCloseableSoftAssertions; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledOnOs; +import org.junit.jupiter.api.condition.OS; import rife.bld.BaseProject; import rife.bld.Project; import rife.bld.WebProject; @@ -64,6 +66,7 @@ class PitestOperationTest { } @Test + @EnabledOnOs(OS.LINUX) void checkAllParameters() throws IOException { var args = Files.readAllLines(Paths.get("src", "test", "resources", "pitest-args.txt")); From edbc515eba51e1a1ca6a5377592ef6b6f7d5aa18 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Mar 2025 13:15:09 -0700 Subject: [PATCH 74/82] Add OS matrix for Ubuntu, Windows and macOS --- .github/workflows/bld.yml | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index 138f5e5..f4aa3a2 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -1,14 +1,16 @@ name: bld-ci -on: [push, pull_request, workflow_dispatch] +on: [ push, pull_request, workflow_dispatch ] jobs: build-bld-project: - runs-on: ubuntu-latest - strategy: matrix: - java-version: [17, 21, 24] + java-version: [ 17, 21, 24 ] + kotlin-version: [ 1.9.25, 2.0.21, 2.1.20 ] + os: [ ubuntu-latest, windows-latest, macos-latest ] + + runs-on: ${{ matrix.os }} steps: - name: Checkout source repository @@ -22,8 +24,16 @@ jobs: distribution: "zulu" java-version: ${{ matrix.java-version }} + - name: Download dependencies [examples] + working-directory: examples + run: ./bld download + + - name: Run PIT tests [examples] + working-directory: examples + run: ./bld compile pit + - name: Download dependencies run: ./bld download - name: Run tests - run: ./bld compile test + run: ./bld compile test \ No newline at end of file From 4573055b56a1d2970c913dfbc9b88a90389b7e1a Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Mar 2025 13:18:02 -0700 Subject: [PATCH 75/82] Bump Pitest extension to version 1.1.10-SNAPSHOT --- examples/lib/bld/bld-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index e279419..7066b9d 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.9 +bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.10-SNAPSHOT bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= bld.version=2.2.1 From c4ba97ff6df8aab595d79edb16762b43717587b7 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Mar 2025 13:29:33 -0700 Subject: [PATCH 76/82] Enabled extensions logging --- .../src/bld/java/com/example/ExamplesBuild.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index ce959ea..6a88259 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -7,6 +7,9 @@ import rife.tools.FileUtils; import java.nio.file.Path; import java.util.List; +import java.util.logging.ConsoleHandler; +import java.util.logging.Level; +import java.util.logging.Logger; import static rife.bld.dependencies.Scope.test; @@ -36,6 +39,16 @@ public class ExamplesBuild extends Project { } public static void main(String[] args) { + // Enable detailed logging for the extensions + var level = Level.ALL; + var logger = Logger.getLogger("rife.bld.extension"); + var consoleHandler = new ConsoleHandler(); + + consoleHandler.setLevel(level); + logger.addHandler(consoleHandler); + logger.setLevel(level); + logger.setUseParentHandlers(false); + new ExamplesBuild().start(args); } From ebef9ea3d52be71f642a01dd3f804494feac73e1 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Mar 2025 13:30:05 -0700 Subject: [PATCH 77/82] Log process command line arguments --- src/main/java/rife/bld/extension/PitestOperation.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/rife/bld/extension/PitestOperation.java b/src/main/java/rife/bld/extension/PitestOperation.java index a9dd870..3d06036 100644 --- a/src/main/java/rife/bld/extension/PitestOperation.java +++ b/src/main/java/rife/bld/extension/PitestOperation.java @@ -449,6 +449,10 @@ public class PitestOperation extends AbstractProcessOperation { }); } + if (LOGGER.isLoggable(Level.FINE)) { + LOGGER.fine(String.join(" ", args)); + } + return args; } From e9f1fe25d950cc7afa9f82c16a7e4f5b61c46c00 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Mar 2025 14:37:33 -0700 Subject: [PATCH 78/82] Workaround for pitest not being able to deal with wildcard paths on Windows --- .../java/rife/bld/extension/PitestOperation.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/rife/bld/extension/PitestOperation.java b/src/main/java/rife/bld/extension/PitestOperation.java index 3d06036..5d681da 100644 --- a/src/main/java/rife/bld/extension/PitestOperation.java +++ b/src/main/java/rife/bld/extension/PitestOperation.java @@ -432,9 +432,10 @@ public class PitestOperation extends AbstractProcessOperation { if (project_ != null) { args.add(javaTool()); args.add("-cp"); - args.add(String.format("%s%s%s%s%s%s%s", new File(project_.libTestDirectory(), "*"), File.pathSeparator, - new File(project_.libCompileDirectory(), "*"), File.pathSeparator, project_.buildMainDirectory(), - File.pathSeparator, project_.buildTestDirectory())); + args.add(String.format("%s%s%s%s%s%s", joinClasspathJar(project_.testClasspathJars()), + joinClasspathJar(project_.compileClasspathJars()), + joinClasspathJar(project_.providedClasspathJars()), + project_.buildMainDirectory(), File.pathSeparator, project_.buildTestDirectory())); args.add("org.pitest.mutationtest.commandline.MutationCoverageReport"); if (!options_.containsKey(SOURCE_DIRS)) { @@ -686,6 +687,14 @@ public class PitestOperation extends AbstractProcessOperation { return s != null && !s.isBlank(); } + private String joinClasspathJar(List jars) { + if (!jars.isEmpty()) { + return String.join(File.pathSeparator, jars.stream().map(File::getAbsolutePath).toList()) + File.pathSeparator; + } else { + return ""; + } + } + /** * Argument string to use when PIT launches child processes. This is most commonly used to increase the amount of * memory available to the process, but may be used to pass any valid JVM argument. From 7fbe9751280c5648ef8b24d3a4931662cd644473 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Mar 2025 15:28:40 -0700 Subject: [PATCH 79/82] Cleanup workaround --- .../rife/bld/extension/PitestOperation.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/rife/bld/extension/PitestOperation.java b/src/main/java/rife/bld/extension/PitestOperation.java index 5d681da..632c58a 100644 --- a/src/main/java/rife/bld/extension/PitestOperation.java +++ b/src/main/java/rife/bld/extension/PitestOperation.java @@ -109,6 +109,19 @@ public class PitestOperation extends AbstractProcessOperation { return avoidCallsTo(List.of(avoidCallTo)); } + private String buildClassPath(String... path) { + var classpath = new StringBuilder(); + for (var p : path) { + if (!p.isBlank()) { + if (!classpath.isEmpty()) { + classpath.append(File.pathSeparator); + } + classpath.append(p); + } + } + return classpath.toString(); + } + /** * List of packages and classes which are to be considered outside the scope of mutation. Any lines of code * containing calls to these classes will not be mutated. @@ -432,10 +445,10 @@ public class PitestOperation extends AbstractProcessOperation { if (project_ != null) { args.add(javaTool()); args.add("-cp"); - args.add(String.format("%s%s%s%s%s%s", joinClasspathJar(project_.testClasspathJars()), + args.add(buildClassPath(joinClasspathJar(project_.testClasspathJars()), joinClasspathJar(project_.compileClasspathJars()), joinClasspathJar(project_.providedClasspathJars()), - project_.buildMainDirectory(), File.pathSeparator, project_.buildTestDirectory())); + project_.buildMainDirectory().getAbsolutePath(), project_.buildTestDirectory().getAbsolutePath())); args.add("org.pitest.mutationtest.commandline.MutationCoverageReport"); if (!options_.containsKey(SOURCE_DIRS)) { @@ -689,7 +702,7 @@ public class PitestOperation extends AbstractProcessOperation { private String joinClasspathJar(List jars) { if (!jars.isEmpty()) { - return String.join(File.pathSeparator, jars.stream().map(File::getAbsolutePath).toList()) + File.pathSeparator; + return String.join(File.pathSeparator, jars.stream().map(File::getAbsolutePath).toList()); } else { return ""; } From 926580f12e4ced2eaaedb304d196b82f8dc2d5a1 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 28 Mar 2025 11:19:37 -0700 Subject: [PATCH 80/82] Updated extensions dependencies Bump PMD from 1.2.1 to 1.2.2 Bump Exec from 1.0.4 to 1.0.5 --- lib/bld/bld-wrapper.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index c5da09f..2b5c0ac 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,8 +1,8 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.4 -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.1 +bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.5 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.2 bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= bld.version=2.2.1 From 0671bdfd7a961f53455f2b84e04725e67335cc62 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 28 Mar 2025 11:20:00 -0700 Subject: [PATCH 81/82] Version 1.0.10 --- examples/lib/bld/bld-wrapper.properties | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/lib/bld/bld-wrapper.properties b/examples/lib/bld/bld-wrapper.properties index 7066b9d..c84c8d7 100644 --- a/examples/lib/bld/bld-wrapper.properties +++ b/examples/lib/bld/bld-wrapper.properties @@ -1,7 +1,7 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= -bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.10-SNAPSHOT +bld.extension-pitest=com.uwyn.rife2:bld-pitest:1.0.10 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.sourceDirectories= bld.version=2.2.1 diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 613592d..8d74bd8 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -38,7 +38,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(1, 0, 10, "SNAPSHOT"); + version = version(1, 0, 10); javaRelease = 17; From 38d25733fc6fcdcc396ccfe9e80fb1eae8248c45 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 8 Apr 2025 09:02:58 -0700 Subject: [PATCH 82/82] Bump PIT from version 1.19.0 to 1.19.1 --- README.md | 2 +- examples/src/bld/java/com/example/ExamplesBuild.java | 2 +- src/bld/java/rife/bld/extension/PitestOperationBuild.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 815fd15..8e3243a 100755 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ Don't forget to add the Pitest `test` dependencies to your build file, as they a ```java repositories = List.of(MAVEN_CENTRAL); scope(test) - .include(dependency("org.pitest", "pitest", version(1, 19, 0))) + .include(dependency("org.pitest", "pitest", version(1, 19, 1))) .include(dependency("org.pitest", "pitest-command-line", version(1, 17, 4))) .include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 2))) .include(dependency("org.pitest", "pitest-testng-plugin", version(1, 0, 0))); diff --git a/examples/src/bld/java/com/example/ExamplesBuild.java b/examples/src/bld/java/com/example/ExamplesBuild.java index 6a88259..aa1c8a7 100644 --- a/examples/src/bld/java/com/example/ExamplesBuild.java +++ b/examples/src/bld/java/com/example/ExamplesBuild.java @@ -29,7 +29,7 @@ public class ExamplesBuild extends Project { repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES); - var pitest = version(1, 19, 0); + var pitest = version(1, 19, 1); scope(test) .include(dependency("org.pitest", "pitest", pitest)) .include(dependency("org.pitest", "pitest-command-line", pitest)) diff --git a/src/bld/java/rife/bld/extension/PitestOperationBuild.java b/src/bld/java/rife/bld/extension/PitestOperationBuild.java index 8d74bd8..67f664f 100644 --- a/src/bld/java/rife/bld/extension/PitestOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PitestOperationBuild.java @@ -38,7 +38,7 @@ public class PitestOperationBuild extends Project { public PitestOperationBuild() { pkg = "rife.bld.extension"; name = "PitestExtension"; - version = version(1, 0, 10); + version = version(1, 0, 11, "SNAPSHOT"); javaRelease = 17; @@ -47,7 +47,7 @@ public class PitestOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pitest = version(1, 19, 0); + var pitest = version(1, 19, 1); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1))); scope(test)