Compare commits

...

75 commits

Author SHA1 Message Date
38d25733fc
Bump PIT from version 1.19.0 to 1.19.1 2025-04-08 09:02:58 -07:00
0671bdfd7a
Version 1.0.10 2025-03-28 11:20:00 -07:00
926580f12e
Updated extensions dependencies
Bump PMD from 1.2.1 to 1.2.2
Bump Exec from 1.0.4 to 1.0.5
2025-03-28 11:19:37 -07:00
7fbe975128
Cleanup workaround 2025-03-25 15:28:40 -07:00
e9f1fe25d9
Workaround for pitest not being able to deal with wildcard paths on Windows 2025-03-25 14:37:33 -07:00
ebef9ea3d5
Log process command line arguments 2025-03-25 13:30:05 -07:00
c4ba97ff6d
Enabled extensions logging 2025-03-25 13:29:33 -07:00
4573055b56
Bump Pitest extension to version 1.1.10-SNAPSHOT 2025-03-25 13:18:02 -07:00
edbc515eba
Add OS matrix for Ubuntu, Windows and macOS 2025-03-25 13:15:09 -07:00
09beae6e4e
Only check pitest arguments on Linux 2025-03-25 13:14:57 -07:00
dad854d7e8
Fix non system specific path separator 2025-03-25 13:11:25 -07:00
d373dd26c6
JDK 24 2025-03-18 23:38:42 -07:00
bff5cd76e6
Add generic installation instructions 2025-03-18 13:04:31 -07:00
2e3d65bd08
Bump PIT to version 1.19.0 2025-03-17 09:48:00 -07:00
22b0babdd5
Bump PMD extension to version 1.2.1 2025-03-17 09:47:25 -07:00
f089ff8c9f
Bump PIT Junit5 plugin to version 1.2.2 2025-02-24 23:02:42 -08:00
80c4ae0744
Bump bld to version 2.2.1 2025-02-24 22:54:59 -08:00
3d8d41ae3d
Bump JUnit to version 5.12.0 2025-02-24 22:53:44 -08:00
c0afb715d7
Bump PIT to version 1.18.2 2025-02-17 10:00:56 -08:00
bc35adebfd
Version 1.0.9 2025-02-12 14:53:31 -08:00
c81b0fac5d
Bumped PIT to version 1.18.1 2025-02-12 14:53:05 -08:00
a83bea7f27
Version 1.0.8 2025-02-11 12:12:06 -08:00
dee9abae13
Bumped PMD extension to version 1.2.0 2025-02-11 11:59:51 -08:00
a7945aea0c
Bumped PIT to version 1.18.0 2025-02-11 11:59:16 -08:00
d20b0d3521
Updated to the latest artifacts actions versions 2025-02-11 11:57:27 -08:00
390bceaf4c
Bumped AssertJ to version 3.27.3 2025-02-11 11:56:22 -08:00
34f933628d
Version 1.0.7 2025-01-14 11:00:23 -08:00
8d4fa46d3c
Bumped bld to version 2.2.0 2025-01-13 22:12:35 -08:00
eb20bb7432
Bumped Exec extension to version 1.0.4 2025-01-13 22:10:53 -08:00
16cf748853
Bumped PMD extension to version 1.1.10 2025-01-13 22:09:17 -08:00
7dfb3cda59
Fixed copyright template 2025-01-10 06:58:14 -08:00
3a67e0e1b6
Version 1.0.6 2025-01-10 06:53:17 -08:00
9ff912ac7f
Updated copyright for 2025 2025-01-10 06:50:28 -08:00
e5a56b518c
Bumped PIT to version 1.17.4 2025-01-10 06:47:54 -08:00
7028acf4d0
Bumped AssertJ to version 3.27.2 2025-01-10 06:31:12 -08:00
d49fc24bd7
Bumped AssertJ to version 3.27.0 2024-12-28 18:06:41 -08:00
c03dc8a894
Bumped PMD extension to version 1.1.9 2024-12-28 18:06:10 -08:00
9ed731e936
Version 1.0.5 2024-12-16 09:27:45 -08:00
6243355364
Added dry run option 2024-12-16 09:27:44 -08:00
2412c525dd
Bumped PIT to version 1.17.3 2024-12-16 09:23:33 -08:00
4a4fa2fb83
Bumped Junit to version 5.11.3 2024-12-16 09:20:45 -08:00
11bdafa259
Version 1.0.4 2024-11-29 08:36:26 -08:00
1a2a854a8b
Bumped PIT to version 1.17.2 2024-11-29 08:31:44 -08:00
d9a225aa0e
Cleaned up examples 2024-11-04 12:21:41 -08:00
ce56ed6e1d
Minor version cleanup 2024-11-04 11:03:38 -08:00
c26f531329
Version 1.0.3 2024-11-04 10:55:18 -08:00
1227115805
Bumped PIT to version 1.17.1 2024-11-04 10:51:11 -08:00
4adc28d4a5
Added pmd-cli command 2024-11-04 10:50:20 -08:00
6f62c38a9b
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)
2024-10-27 17:10:59 -07:00
9089cae653
Minor cleanups 2024-10-27 17:10:26 -07:00
f70c8c89bf
Bumped PIT to version 1.17.0 2024-09-17 04:08:26 -07:00
d568ee486f
Version 1.0.1 2024-09-02 10:23:59 -07:00
393d8736aa
Added soft assertions for parameters check 2024-09-02 10:23:58 -07:00
fd54c6bd0e
Bumped PIT to version 1.16.3 2024-09-02 10:21:09 -07:00
b67915a310
Version 1.0.0 2024-08-30 15:11:29 -07:00
cfdb81dad4
Minor cleanups 2024-08-30 15:11:29 -07:00
bf097e614a
Updated extensions dependencies 2024-08-30 15:11:29 -07:00
d0f782a9aa
Bumped bld to version 2.1.0 2024-08-30 15:11:29 -07:00
35dc6d38cc
Bumped PIT to version 1.16.2 2024-08-30 15:11:29 -07:00
f8718774ae
Bumped PIT to version 1.16.2 2024-08-28 18:29:26 -07:00
9455947111
Cleaned up API to match bld operations aand options APIs 2024-08-28 16:12:44 -07:00
44bbb80b0f
Bumped JUnit to version 5.11.0 2024-08-28 16:11:19 -07:00
3436395de2
Version 0.9.9 2024-07-28 23:25:42 -07:00
e9c81c731b
Bumped bld to version 2.0.1 2024-07-28 23:21:06 -07:00
6afb669a0b
Removed report dir 2024-07-22 17:18:07 -07:00
8a5b9c9431
Ensured exit status is set on failure 2024-07-22 17:13:41 -07:00
6faea5a8f4
Bumped bld version 2.0.0-SHAPSHOT 2024-07-22 17:12:27 -07:00
75946b97b0
0.9.9-SNAPSHOT 2024-06-23 11:03:28 -07:00
44e55db532
Minor code cleanups 2024-06-23 11:02:53 -07:00
ecdc379b7b
Bumped PMD extension to version 1.1.0 2024-06-23 11:01:52 -07:00
a65e5e1ee1
Fixed bld URL 2024-06-14 23:52:18 -07:00
e6230a3644
Execute cliargs script before running tests 2024-05-28 14:27:54 -07:00
ec50e5272b
Read arguments from resource file 2024-05-27 20:14:33 -07:00
e7ed7edc30
Fixed missing maxMutationsPerClass parameter 2024-05-27 16:15:40 -07:00
ec0998caa4
Added script to list parameters 2024-05-27 16:14:03 -07:00
36 changed files with 1030 additions and 1468 deletions

View file

@ -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, 22]
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,11 +24,16 @@ 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 [examples]
working-directory: examples
run: ./bld download
- name: Run tests with bld
run: ./bld compile test
- 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

View file

@ -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

6
.idea/bld.xml generated Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="BldConfiguration">
<events />
</component>
</project>

View file

@ -1,6 +1,6 @@
<component name="CopyrightManager">
<copyright>
<option name="notice" value="Copyright 2023-Copyright &amp;#36;today.yearamp;#36;today.year the original author or authors.&#10; &#10;Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);&#10;you may not use this file except in compliance with the License.&#10;You may obtain a copy of the License at&#10;&#10; https://www.apache.org/licenses/LICENSE-2.0&#10;&#10;Unless required by applicable law or agreed to in writing, software&#10;distributed under the License is distributed on an &quot;AS IS&quot; BASIS,&#10;WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&#10;See the License for the specific language governing permissions and&#10;limitations under the License." />
<option name="notice" value="Copyright 2023-&amp;#36;today.year the original author or authors.&#10; &#10;Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);&#10;you may not use this file except in compliance with the License.&#10;You may obtain a copy of the License at&#10;&#10; https://www.apache.org/licenses/LICENSE-2.0&#10;&#10;Unless required by applicable law or agreed to in writing, software&#10;distributed under the License is distributed on an &quot;AS IS&quot; BASIS,&#10;WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&#10;See the License for the specific language governing permissions and&#10;limitations under the License." />
<option name="myName" value="Apache License" />
</copyright>
</component>
</component>

13
.idea/icon.svg generated Normal file
View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 179 108" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g transform="matrix(1,0,0,1,-210.511,-96.3382)">
<g transform="matrix(1,0,0,1,-23.3386,-649.816)">
<g transform="matrix(0.221288,0,0,0.24,73.9536,390.254)">
<path d="M722.568,1482.92L722.568,1921.1L808.968,1921.1L808.968,1888.7C822.168,1907.9 846.168,1930.1 893.568,1930.1C933.168,1930.1 961.968,1917.5 985.368,1893.5C1012.97,1865.9 1027.37,1827.5 1027.37,1786.1C1027.37,1741.7 1011.17,1705.1 985.368,1680.5C961.968,1658.3 928.968,1644.5 892.368,1644.5C862.968,1644.5 830.568,1654.1 808.968,1683.5L808.968,1482.92L722.568,1482.92ZM871.368,1718.9C888.768,1718.9 903.768,1723.7 917.568,1736.9C930.168,1748.9 938.568,1766.3 938.568,1787.9C938.568,1807.7 930.168,1825.1 917.568,1837.1C904.368,1849.7 887.568,1855.7 872.568,1855.7C856.368,1855.7 837.168,1849.1 823.368,1835.9C813.168,1826.3 803.568,1810.1 803.568,1787.9C803.568,1765.1 812.568,1749.5 822.768,1738.7C836.568,1724.3 852.768,1718.9 871.368,1718.9Z" style="fill:rgb(35,146,255);fill-rule:nonzero;"/>
<rect x="1083.77" y="1482.92" width="86.4" height="438.182" style="fill:rgb(250,144,82);fill-rule:nonzero;"/>
<path d="M1531.37,1482.92L1444.97,1482.92L1444.97,1683.5C1423.37,1654.1 1390.97,1644.5 1361.57,1644.5C1324.97,1644.5 1291.97,1658.3 1268.57,1680.5C1242.77,1705.1 1226.57,1741.7 1226.57,1786.1C1226.57,1827.5 1240.97,1865.9 1268.57,1893.5C1291.97,1917.5 1320.77,1930.1 1360.37,1930.1C1407.77,1930.1 1431.77,1907.9 1444.97,1888.7L1444.97,1921.1L1531.37,1921.1L1531.37,1482.92ZM1382.57,1718.9C1401.17,1718.9 1417.37,1724.3 1431.17,1738.7C1441.37,1749.5 1450.37,1765.1 1450.37,1787.9C1450.37,1810.1 1440.77,1826.3 1430.57,1835.9C1416.77,1849.1 1397.57,1855.7 1381.37,1855.7C1366.37,1855.7 1349.57,1849.7 1336.37,1837.1C1323.77,1825.1 1315.37,1807.7 1315.37,1787.9C1315.37,1766.3 1323.77,1748.9 1336.37,1736.9C1350.17,1723.7 1365.17,1718.9 1382.57,1718.9Z" style="fill:rgb(35,146,255);fill-rule:nonzero;"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -2,12 +2,12 @@
<library name="bld">
<CLASSES>
<root url="file://$PROJECT_DIR$/lib/bld" />
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.1.jar!/" />
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="file://$PROJECT_DIR$/lib/bld" />
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.1-sources.jar!/" />
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1-sources.jar!/" />
</SOURCES>
<excluded>
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />

View file

@ -7,7 +7,7 @@
<SOURCES>
<root url="file://$PROJECT_DIR$/lib/compile" />
</SOURCES>
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" />
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" type="SOURCES" />
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" />
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" type="SOURCES" />
</library>
</component>

View file

@ -8,7 +8,7 @@
<SOURCES>
<root url="file://$PROJECT_DIR$/lib/runtime" />
</SOURCES>
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" />
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" type="SOURCES" />
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" />
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" type="SOURCES" />
</library>
</component>

View file

@ -8,7 +8,7 @@
<SOURCES>
<root url="file://$PROJECT_DIR$/lib/test" />
</SOURCES>
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" />
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" type="SOURCES" />
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" />
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" type="SOURCES" />
</library>
</component>

1
.idea/misc.xml generated
View file

@ -4,6 +4,7 @@
<pattern value="rife.bld.extension.PitestOperationBuild" method="jacoco" />
<pattern value="rife.bld.extension.PitestOperationBuild" />
<pattern value="rife.bld.extension.PitestOperationBuild" method="pmd" />
<pattern value="rife.bld.extension.PitestOperationBuild" method="pmdCli" />
</component>
<component name="PDMPlugin">
<option name="customRuleSets">

View file

@ -9,7 +9,7 @@
],
"java.configuration.updateBuildConfiguration": "automatic",
"java.project.referencedLibraries": [
"${HOME}/.bld/dist/bld-1.9.1.jar",
"${HOME}/.bld/dist/bld-2.2.1.jar",
"lib/**/*.jar"
]
}

View file

@ -1,13 +1,21 @@
# [PIT Mutation Testing](https://pitest.org/) Extension for [b<span style="color:orange">l</span>d](https://rife2.com/bldb)
# [PIT Mutation Testing](https://pitest.org/) Extension for [b<span style="color:orange">l</span>d](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)
[![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.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)
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:
@ -16,7 +24,7 @@ To run mutation tests and coverage, add the following to your build file:
public void pit() throws Exception {
new PitestOperation()
.fromProject(this)
.reportDir(Path.of("reports", "mutations").toString())
.reportDir(Path.of("reports", "mutations"))
.targetClasses(pkg + ".*")
.targetTests(pkg + ".*")
.verbose(true)
@ -40,8 +48,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-junit5-plugin", version(1, 2, 1)))
.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)));
```

View file

@ -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

View file

@ -7,9 +7,9 @@
<!-- BEST PRACTICES -->
<rule ref="category/java/bestpractices.xml">
<exclude name="AvoidPrintStackTrace"/>
<exclude name="JUnit4TestShouldUseTestAnnotation"/>
<exclude name="JUnitTestContainsTooManyAsserts"/>
<exclude name="GuardLogStatement"/>
<exclude name="UnitTestContainsTooManyAsserts"/>
<exclude name="UnitTestShouldUseTestAnnotation"/>
</rule>
<rule ref="category/java/bestpractices.xml/MissingOverride">

5
examples/.gitignore vendored
View file

@ -52,4 +52,7 @@ atlassian-ide-plugin.xml
.idea/sonarlint/
# Editor-based Rest Client
.idea/httpRequests
.idea/httpRequests
reports

View file

@ -2,12 +2,12 @@
<library name="bld">
<CLASSES>
<root url="file://$PROJECT_DIR$/lib/bld" />
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.1.jar!/" />
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="file://$PROJECT_DIR$/lib/bld" />
<root url="jar://$USER_HOME$/.bld/dist/bld-1.9.1-sources.jar!/" />
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1-sources.jar!/" />
</SOURCES>
<excluded>
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />

View file

@ -7,7 +7,7 @@
<SOURCES>
<root url="file://$PROJECT_DIR$/lib/compile" />
</SOURCES>
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" />
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" type="SOURCES" />
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" />
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" type="SOURCES" />
</library>
</component>

View file

@ -8,7 +8,7 @@
<SOURCES>
<root url="file://$PROJECT_DIR$/lib/runtime" />
</SOURCES>
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" />
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" type="SOURCES" />
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" />
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" type="SOURCES" />
</library>
</component>

View file

@ -8,7 +8,7 @@
<SOURCES>
<root url="file://$PROJECT_DIR$/lib/test" />
</SOURCES>
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" />
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" type="SOURCES" />
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" />
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" type="SOURCES" />
</library>
</component>

View file

@ -9,7 +9,7 @@
],
"java.configuration.updateBuildConfiguration": "automatic",
"java.project.referencedLibraries": [
"${HOME}/.bld/dist/bld-1.9.1.jar",
"${HOME}/.bld/dist/bld-2.2.1.jar",
"lib/**/*.jar"
]
}

Binary file not shown.

View file

@ -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:1.0.10
bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS
bld.sourceDirectories=
bld.version=1.9.1
bld.version=2.2.1

View file

@ -1,166 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../style.css">
</head>
<body>
<h1>ExamplesLib.java</h1>
<table class="src">
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@446293d_1'/>
1
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@446293d_1'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''>package com.example;</span></pre></td></tr>
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@446293d_2'/>
2
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@446293d_2'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''></span></pre></td></tr>
<tr>
<td class='covered'>
<a name='org.pitest.mutationtest.report.html.SourceFile@446293d_3'/>
3
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@446293d_3'></a>
<span>
</span>
</span>
</td>
<td class='covered'><pre><span class=''>public class ExamplesLib {</span></pre></td></tr>
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@446293d_4'/>
4
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@446293d_4'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''> public String getMessage() {</span></pre></td></tr>
<tr>
<td class='covered'>
<a name='org.pitest.mutationtest.report.html.SourceFile@446293d_5'/>
5
</td>
<td class='killed'>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@446293d_5'>1</a>
<span>
1. getMessage : replaced return value with &#34;&#34; for com/example/ExamplesLib::getMessage &rarr; KILLED<br/>
</span>
</span>
</td>
<td class='covered'><pre><span class='killed'> return &#34;Hello World!&#34;;</span></pre></td></tr>
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@446293d_6'/>
6
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@446293d_6'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''> }</span></pre></td></tr>
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@446293d_7'/>
7
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@446293d_7'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''>}</span></pre></td></tr>
<tr><td></td><td></td><td><h2>Mutations</h2></td></tr>
<tr>
<td><a href='#org.pitest.mutationtest.report.html.SourceFile@446293d_5'>5</a></td>
<td></td>
<td>
<a name='grouporg.pitest.mutationtest.report.html.SourceFile@446293d_5'/>
<p class='KILLED'><span class='pop'>1.<span><b>1</b><br/><b>Location : </b>getMessage<br/><b>Killed by : </b>com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()]</span></span> replaced return value with &#34;&#34; for com/example/ExamplesLib::getMessage &rarr; KILLED</p>
</td>
</tr>
</table>
<h2>Active mutators</h2>
<ul>
<li class='mutator'>CONDITIONALS_BOUNDARY</li>
<li class='mutator'>EMPTY_RETURNS</li>
<li class='mutator'>FALSE_RETURNS</li>
<li class='mutator'>INCREMENTS</li>
<li class='mutator'>INVERT_NEGS</li>
<li class='mutator'>MATH</li>
<li class='mutator'>NEGATE_CONDITIONALS</li>
<li class='mutator'>NULL_RETURNS</li>
<li class='mutator'>PRIMITIVE_RETURNS</li>
<li class='mutator'>TRUE_RETURNS</li>
<li class='mutator'>VOID_METHOD_CALLS</li>
</ul>
<h2>Tests examined</h2>
<ul>
<li>com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (11 ms)</li>
</ul>
<br/>
Report generated by <a href='https://pitest.org'>PIT</a> 1.16.1
</body>
</html>

View file

@ -1,241 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../style.css">
</head>
<body>
<h1>ExamplesTest.java</h1>
<table class="src">
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@6c130c45_1'/>
1
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@6c130c45_1'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''>package com.example;</span></pre></td></tr>
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@6c130c45_2'/>
2
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@6c130c45_2'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''></span></pre></td></tr>
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@6c130c45_3'/>
3
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@6c130c45_3'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''>import org.junit.jupiter.api.Test;</span></pre></td></tr>
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@6c130c45_4'/>
4
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@6c130c45_4'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''></span></pre></td></tr>
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@6c130c45_5'/>
5
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@6c130c45_5'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''>import static org.junit.jupiter.api.Assertions.assertEquals;</span></pre></td></tr>
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@6c130c45_6'/>
6
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@6c130c45_6'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''></span></pre></td></tr>
<tr>
<td class='covered'>
<a name='org.pitest.mutationtest.report.html.SourceFile@6c130c45_7'/>
7
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@6c130c45_7'></a>
<span>
</span>
</span>
</td>
<td class='covered'><pre><span class=''>public class ExamplesTest {</span></pre></td></tr>
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@6c130c45_8'/>
8
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@6c130c45_8'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''> @Test</span></pre></td></tr>
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@6c130c45_9'/>
9
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@6c130c45_9'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''> void verifyHello() {</span></pre></td></tr>
<tr>
<td class='covered'>
<a name='org.pitest.mutationtest.report.html.SourceFile@6c130c45_10'/>
10
</td>
<td class='survived'>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@6c130c45_10'>1</a>
<span>
1. verifyHello : removed call to org/junit/jupiter/api/Assertions::assertEquals &rarr; SURVIVED<br/>
</span>
</span>
</td>
<td class='covered'><pre><span class='survived'> assertEquals(&#34;Hello World!&#34;, new ExamplesLib().getMessage());</span></pre></td></tr>
<tr>
<td class='covered'>
<a name='org.pitest.mutationtest.report.html.SourceFile@6c130c45_11'/>
11
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@6c130c45_11'></a>
<span>
</span>
</span>
</td>
<td class='covered'><pre><span class=''> }</span></pre></td></tr>
<tr>
<td class='na'>
<a name='org.pitest.mutationtest.report.html.SourceFile@6c130c45_12'/>
12
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@6c130c45_12'></a>
<span>
</span>
</span>
</td>
<td class=''><pre><span class=''>}</span></pre></td></tr>
<tr><td></td><td></td><td><h2>Mutations</h2></td></tr>
<tr>
<td><a href='#org.pitest.mutationtest.report.html.SourceFile@6c130c45_10'>10</a></td>
<td></td>
<td>
<a name='grouporg.pitest.mutationtest.report.html.SourceFile@6c130c45_10'/>
<p class='SURVIVED'><span class='pop'>1.<span><b>1</b><br/><b>Location : </b>verifyHello<br/><b>Killed by : </b>none</span></span> removed call to org/junit/jupiter/api/Assertions::assertEquals &rarr; SURVIVED</p>
</td>
</tr>
</table>
<h2>Active mutators</h2>
<ul>
<li class='mutator'>CONDITIONALS_BOUNDARY</li>
<li class='mutator'>EMPTY_RETURNS</li>
<li class='mutator'>FALSE_RETURNS</li>
<li class='mutator'>INCREMENTS</li>
<li class='mutator'>INVERT_NEGS</li>
<li class='mutator'>MATH</li>
<li class='mutator'>NEGATE_CONDITIONALS</li>
<li class='mutator'>NULL_RETURNS</li>
<li class='mutator'>PRIMITIVE_RETURNS</li>
<li class='mutator'>TRUE_RETURNS</li>
<li class='mutator'>VOID_METHOD_CALLS</li>
</ul>
<h2>Tests examined</h2>
<ul>
<li>com.example.ExamplesTest.[engine:junit-jupiter]/[class:com.example.ExamplesTest]/[method:verifyHello()] (11 ms)</li>
</ul>
<br/>
Report generated by <a href='https://pitest.org'>PIT</a> 1.16.1
</body>
</html>

View file

@ -1,69 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../style.css">
</head>
<body>
<h1>Pit Test Coverage Report</h1>
<h2>Package Summary</h2>
<h3>com.example</h3>
<table>
<thead>
<tr>
<th>Number of Classes</th>
<th>Line Coverage</th>
<th>Mutation Coverage</th>
<th>Test Strength</th>
</tr>
</thead>
<tbody>
<tr>
<td>2</td>
<td>100% <div class="coverage_bar"><div class="coverage_complete width-100"></div><div class="coverage_legend">5/5</div></div></td>
<td>50% <div class="coverage_bar"><div class="coverage_complete width-50"></div><div class="coverage_legend">1/2</div></div></td>
<td>50% <div class="coverage_bar"><div class="coverage_complete width-50"></div><div class="coverage_legend">1/2</div></div></td>
</tr>
</tbody>
</table>
<h3>Breakdown by Class</h3>
<table>
<thead>
<tr>
<th>Name</th>
<th>Line Coverage</th>
<th>Mutation Coverage</th>
<th>Test Strength</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="./ExamplesLib.java.html">ExamplesLib.java</a></td>
<td><div class="coverage_percentage">100% </div><div class="coverage_bar"><div class="coverage_complete width-100"></div><div class="coverage_legend">2/2</div></div></td>
<td><div class="coverage_percentage">100% </div><div class="coverage_bar"><div class="coverage_complete width-100"></div><div class="coverage_legend">1/1</div></div></td>
<td><div class="coverage_percentage">100% </div><div class="coverage_bar"><div class="coverage_complete width-100"></div><div class="coverage_legend">1/1</div></div></td>
</tr>
<tr>
<td><a href="./ExamplesTest.java.html">ExamplesTest.java</a></td>
<td><div class="coverage_percentage">100% </div><div class="coverage_bar"><div class="coverage_complete width-100"></div><div class="coverage_legend">3/3</div></div></td>
<td><div class="coverage_percentage">0% </div><div class="coverage_bar"><div class="coverage_complete width-0"></div><div class="coverage_legend">0/1</div></div></td>
<td><div class="coverage_percentage">0% </div><div class="coverage_bar"><div class="coverage_complete width-0"></div><div class="coverage_legend">0/1</div></div></td>
</tr>
</tbody>
</table>
<br/>
<hr/>
Report generated by <a href='https://pitest.org'>PIT</a> 1.16.1
</body>
</html>

View file

@ -1,72 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<h1>Pit Test Coverage Report</h1>
<h3>Project Summary</h3>
<table>
<thead>
<tr>
<th>Number of Classes</th>
<th>Line Coverage</th>
<th>Mutation Coverage</th>
<th>Test Strength</th>
</tr>
</thead>
<tbody>
<tr>
<td>2</td>
<td>100% <div class="coverage_bar"><div class="coverage_complete width-100"></div><div class="coverage_legend">5/5</div></div></td>
<td>50% <div class="coverage_bar"><div class="coverage_complete width-50"></div><div class="coverage_legend">1/2</div></div></td>
<td>50% <div class="coverage_bar"><div class="coverage_complete width-50"></div><div class="coverage_legend">1/2</div></div></td>
</tr>
</tbody>
</table>
<h3>Breakdown by Package</h3>
<table>
<thead>
<tr>
<th>Name</th>
<th>Number of Classes</th>
<th>Line Coverage</th>
<th>Mutation Coverage</th>
<th>Test Strength</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="./com.example/index.html">com.example</a></td>
<td>2</td>
<td><div class="coverage_percentage">100% </div><div class="coverage_bar"><div class="coverage_complete width-100"></div><div class="coverage_legend">5/5</div></div></td>
<td><div class="coverage_percentage">50% </div><div class="coverage_bar"><div class="coverage_complete width-50"></div><div class="coverage_legend">1/2</div></div></td>
<td><div class="coverage_percentage">50% </div><div class="coverage_bar"><div class="coverage_complete width-50"></div><div class="coverage_legend">1/2</div></div></td>
</tr>
</tbody>
</table>
<br/>
<hr/>
<ul>
</ul>
Report generated by <a href='https://pitest.org'>PIT</a> 1.16.1
<br/>
<br/>
Enhanced functionality available at <a href='https://www.arcmutate.com/'>arcmutate.com</a>
</body>
</html>

View file

@ -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%;
}

View file

@ -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;
@ -26,15 +29,26 @@ public class ExamplesBuild extends Project {
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES);
var pitest = version(1, 19, 1);
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-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.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, 1)))
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1)));
}
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);
}
@ -42,7 +56,7 @@ public class ExamplesBuild extends Project {
public void pit() throws Exception {
new PitestOperation()
.fromProject(this)
.reportDir(Path.of("reports", "mutations").toString())
.reportDir(Path.of("reports", "mutations"))
.targetClasses(pkg + ".*")
.targetTests(pkg + ".*")
.verbose(true)

Binary file not shown.

View file

@ -1,8 +1,8 @@
bld.downloadExtensionJavadoc=false
bld.downloadExtensionSources=true
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=
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=1.9.1
bld.version=2.2.1

12
scripts/checkcliargs.sh Executable file
View file

@ -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

7
scripts/cliargs.sh Executable file
View file

@ -0,0 +1,7 @@
#!/bin/bash
java -cp "lib/test/*" org.pitest.mutationtest.commandline.MutationCoverageReport --help |\
grep "^.*--.*" |\
sed -e "s/\* --/--/" -e "s/ .*//" |\
sort |\
sed -e '/testPlugin/d' -e '/--help/d' -e '/---/d' > src/test/resources/pitest-args.txt

View file

@ -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.
@ -22,36 +22,41 @@ 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;
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";
version = version(0, 9, 8);
version = version(1, 0, 11, "SNAPSHOT");
javaRelease = 17;
downloadSources = true;
autoDownloadPurge = true;
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES);
var pitest = version(1, 16, 1);
repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS);
var pitest = version(1, 19, 1);
scope(compile)
.include(dependency("com.uwyn.rife2", "bld", version(1, 9, 1)));
.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, 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.pitest", "pitest-junit5-plugin", version(1, 2, 2)))
.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()
.javadocOptions()
@ -62,28 +67,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"));
@ -93,19 +96,25 @@ public class PitestOperationBuild extends Project {
new PitestOperationBuild().start(args);
}
@BuildCommand(summary = "Generates JaCoCo Reports")
public void jacoco() throws IOException {
new JacocoReportOperation()
.fromProject(this)
.execute();
@BuildCommand(summary = "Runs PMD analysis")
public void pmd() throws Exception {
pmdOp.execute();
}
@BuildCommand(summary = "Runs PMD analysis")
public void pmd() {
new PmdOperation()
.fromProject(this)
.failOnViolation(true)
.ruleSets("config/pmd.xml")
.execute();
@BuildCommand(value = "pmd-cli", summary = "Runs PMD analysis (CLI)")
public void pmdCli() throws Exception {
pmdOp.includeLineNumber(false).execute();
}
@Override
public void test() throws Exception {
var os = System.getProperty("os.name");
if (os != null && os.toLowerCase().contains("linux")) {
new ExecOperation()
.fromProject(this)
.command("scripts/cliargs.sh")
.execute();
}
super.test();
}
}

File diff suppressed because it is too large Load diff

View file

@ -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.
@ -16,32 +16,40 @@
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;
import rife.bld.operations.exceptions.ExitStatusException;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
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;
@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() {
var op = new PitestOperation()
.fromProject(new BaseProject())
.argLine(FOO);
assertThat(op.options.get("--argLine")).isEqualTo(FOO);
assertThat(op.options().get("--argLine")).isEqualTo(FOO);
}
@Test
@ -49,66 +57,22 @@ 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
void checkAllParameters() {
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"
);
@EnabledOnOs(OS.LINUX)
void checkAllParameters() throws IOException {
var args = Files.readAllLines(Paths.get("src", "test", "resources", "pitest-args.txt"));
var args = new PitestOperation()
assertThat(args).isNotEmpty();
var params = new PitestOperation()
.fromProject(new BaseProject())
.argLine(FOO)
.avoidCallsTo(FOO, BAR)
@ -116,14 +80,15 @@ class PitestOperationTest {
.classPathFile(FOO)
.coverageThreshold(0)
.detectInlinedCode(false)
.dryRun(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")
.excludedTestClasses("test")
.exportLineCoverage(true)
.failWhenNoMutations(true)
.features("feature")
@ -136,6 +101,7 @@ class PitestOperationTest {
.inputEncoding("encoding")
.jvmArgs("-XX:+UnlogregckDiagnosticVMOptions")
.jvmPath("path")
.maxMutationsPerClass(3)
.maxSurviving(1)
.mutableCodePaths("codePaths")
.mutationEngine("engine")
@ -160,15 +126,17 @@ class PitestOperationTest {
.verbosity("default")
.executeConstructProcessCommandList();
for (var p : params) {
var found = false;
for (var a : args) {
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();
}
}
@ -177,12 +145,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
@ -190,7 +158,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
@ -198,12 +166,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
@ -211,12 +179,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
@ -224,12 +192,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
@ -237,12 +205,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
@ -250,12 +218,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
@ -263,7 +231,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
@ -271,12 +239,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
@ -330,17 +298,23 @@ 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()
.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
@ -348,12 +322,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
@ -361,12 +335,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
@ -374,7 +348,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
@ -382,7 +356,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
@ -390,7 +364,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
@ -398,12 +372,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
@ -411,12 +385,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
@ -424,7 +398,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
@ -432,7 +406,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
@ -440,12 +414,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
@ -453,7 +427,15 @@ 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
void maxMutationsPerClass() {
var op = new PitestOperation()
.fromProject(new BaseProject())
.maxMutationsPerClass(12);
assertThat(op.options().get("--maxMutationsPerClass")).isEqualTo("12");
}
@Test
@ -461,7 +443,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
@ -469,12 +451,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
@ -482,7 +464,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
@ -490,12 +472,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
@ -503,7 +485,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
@ -511,12 +493,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
@ -524,7 +506,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
@ -532,12 +514,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
@ -545,7 +527,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
@ -553,7 +535,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
@ -561,7 +543,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
@ -569,12 +551,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
@ -582,12 +564,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
@ -595,12 +577,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
@ -608,12 +590,181 @@ 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
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
@ -621,7 +772,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
@ -629,7 +780,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
@ -637,7 +788,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
@ -645,7 +796,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
@ -653,12 +804,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
@ -666,12 +817,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
@ -679,12 +830,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
@ -692,6 +843,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);
}
}

View file

@ -0,0 +1,48 @@
--argLine
--avoidCallsTo
--classPath
--classPathFile
--coverageThreshold
--detectInlinedCode
--dryRun
--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