Compare commits

...

90 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
b6995b05a2
Version 0.9.8 2024-05-26 20:45:24 -07:00
e19b8de803
Added missing parameters and associated tests 2024-05-26 17:08:32 -07:00
87a55200b3
Bumped PIT to version 1.6.1 2024-05-08 18:19:08 -07:00
6bb66cd907
Bumped PMD extension to version 0.9.9 2024-05-08 18:17:54 -07:00
ba1d7143b9
Bumped bld to version 1.9.1 2024-05-08 18:16:50 -07:00
150d02edbf
Bumped PIT version to 1.16.0 2024-04-08 16:24:35 -07:00
0637096025
Bumped PMD and JaCoCo extensions to latest versions 2024-04-08 15:16:44 -07:00
44ad57c986
Bumped workflows actions to latest versions 2024-04-08 15:15:50 -07:00
b3a07f72fd
Added JDK 22 to CI 2024-03-21 13:42:04 -07:00
d208038f2d
Bumped to bld 1.9.0 2024-03-21 00:27:45 -07:00
ef429547d5
Improved Visual Studio Code support 2024-03-21 00:27:45 -07:00
ad06348567
Bumped PIT to 1.15.8 2024-03-21 00:27:45 -07:00
25c9aa83c3
Bumped PIT to 1.15.7 2024-03-21 00:27:44 -07:00
1a27995124
Version 0.9.2 2024-03-21 00:27:44 -07:00
caf67cf115
Bumped bld to 1.8.0 2024-03-21 00:27:40 -07:00
38 changed files with 1340 additions and 1419 deletions

View file

@ -4,29 +4,36 @@ on: [ push, pull_request, workflow_dispatch ]
jobs:
build-bld-project:
runs-on: ubuntu-latest
strategy:
matrix:
java-version: [ 17, 20 ]
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
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up JDK ${{ matrix.java-version }}
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
distribution: 'zulu'
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

@ -30,14 +30,14 @@ jobs:
steps:
- name: Checkout source repository
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up JDK 17
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
distribution: 'zulu'
distribution: "zulu"
java-version: 17
- name: Build Javadocs
@ -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/'
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.7.5.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.7.5-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">

9
.vscode/launch.json vendored
View file

@ -5,7 +5,14 @@
"type": "java",
"name": "Run Tests",
"request": "launch",
"mainClass": "rife.bld.extension.PitestExtensionTest"
"mainClass": "org.junit.platform.console.ConsoleLauncher",
"args": [
"--details=verbose",
"--scan-classpath",
"--disable-banner",
"--disable-ansi-colors",
"--exclude-engine=junit-platform-suite",
"--exclude-engine=junit-vintage"]
}
]
}

10
.vscode/settings.json vendored
View file

@ -3,13 +3,13 @@
"src/main/java",
"src/main/resources",
"src/test/java",
"src/bld/java"
"src/test/resources",
"src/bld/java",
"src/bld/resources"
],
"java.configuration.updateBuildConfiguration": "automatic",
"java.project.referencedLibraries": [
"${HOME}/.bld/dist/bld-1.7.5.jar",
"lib/compile/*.jar",
"lib/runtime/*.jar",
"lib/test/*.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.7.3-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, 15, 6)))
.include(dependency("org.pitest", "pitest-command-line", version(1, 15, 6)))
.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">
@ -19,12 +19,13 @@
</properties>
</rule>
<!-- CODE STYLE -->
<rule ref="category/java/codestyle.xml">
<exclude name="AtLeastOneConstructor"/>
<exclude name="ClassNamingConventions"/>
<exclude name="ConfusingTernary"/>
<exclude name="CommentDefaultAccessModifier"/>
<exclude name="ConfusingTernary"/>
<exclude name="FieldNamingConventions"/>
<exclude name="LocalVariableCouldBeFinal"/>
<exclude name="LongVariable"/>
@ -34,8 +35,9 @@
<exclude name="ShortClassName"/>
<exclude name="ShortMethodName"/>
<exclude name="ShortVariable"/>
<exclude name="UselessParentheses"/>
<exclude name="UseExplicitTypes"/>
<exclude name="UseUnderscoresInNumericLiterals"/>
<exclude name="UselessParentheses"/>
</rule>
<rule ref="category/java/codestyle.xml/UnnecessaryImport">
@ -51,8 +53,6 @@
<exclude name="AvoidUncheckedExceptionsInSignatures"/>
<exclude name="CognitiveComplexity"/>
<exclude name="CyclomaticComplexity"/>
<exclude name="ExcessiveClassLength"/>
<exclude name="ExcessiveMethodLength"/>
<exclude name="ExcessiveParameterList"/>
<exclude name="ExcessivePublicCount"/>
<exclude name="GodClass"/>
@ -106,4 +106,4 @@
<!-- SECURITY -->
<rule ref="category/java/security.xml">
</rule>
</ruleset>
</ruleset>

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.7.5.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.7.5-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

@ -5,7 +5,14 @@
"type": "java",
"name": "Run Tests",
"request": "launch",
"mainClass": "com.example.ExamplesTest"
"mainClass": "org.junit.platform.console.ConsoleLauncher",
"args": [
"--details=verbose",
"--scan-classpath",
"--disable-banner",
"--disable-ansi-colors",
"--exclude-engine=junit-platform-suite",
"--exclude-engine=junit-vintage"]
}
]
}

View file

@ -3,13 +3,13 @@
"src/main/java",
"src/main/resources",
"src/test/java",
"src/bld/java"
"src/test/resources",
"src/bld/java",
"src/bld/resources"
],
"java.configuration.updateBuildConfiguration": "automatic",
"java.project.referencedLibraries": [
"${HOME}/.bld/dist/bld-1.7.5.jar",
"lib/compile/*.jar",
"lib/runtime/*.jar",
"lib/test/*.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.1
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.7.5
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@2d2ffcb7_1'/>
1
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@2d2ffcb7_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@2d2ffcb7_2'/>
2
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@2d2ffcb7_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@2d2ffcb7_3'/>
3
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@2d2ffcb7_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@2d2ffcb7_4'/>
4
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@2d2ffcb7_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@2d2ffcb7_5'/>
5
</td>
<td class='killed'>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@2d2ffcb7_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@2d2ffcb7_6'/>
6
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@2d2ffcb7_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@2d2ffcb7_7'/>
7
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@2d2ffcb7_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@2d2ffcb7_5'>5</a></td>
<td></td>
<td>
<a name='grouporg.pitest.mutationtest.report.html.SourceFile@2d2ffcb7_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()] (9 ms)</li>
</ul>
<br/>
Report generated by <a href='https://pitest.org'>PIT</a> 1.15.6
</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@4e3958e7_1'/>
1
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@4e3958e7_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@4e3958e7_2'/>
2
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@4e3958e7_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@4e3958e7_3'/>
3
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@4e3958e7_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@4e3958e7_4'/>
4
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@4e3958e7_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@4e3958e7_5'/>
5
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@4e3958e7_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@4e3958e7_6'/>
6
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@4e3958e7_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@4e3958e7_7'/>
7
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@4e3958e7_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@4e3958e7_8'/>
8
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@4e3958e7_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@4e3958e7_9'/>
9
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@4e3958e7_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@4e3958e7_10'/>
10
</td>
<td class='survived'>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@4e3958e7_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@4e3958e7_11'/>
11
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@4e3958e7_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@4e3958e7_12'/>
12
</td>
<td class=''>
<span class='pop'>
<a href='#grouporg.pitest.mutationtest.report.html.SourceFile@4e3958e7_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@4e3958e7_10'>10</a></td>
<td></td>
<td>
<a name='grouporg.pitest.mutationtest.report.html.SourceFile@4e3958e7_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()] (9 ms)</li>
</ul>
<br/>
Report generated by <a href='https://pitest.org'>PIT</a> 1.15.6
</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.15.6
</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>
<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/>
Report generated by <a href='https://pitest.org'>PIT</a> 1.15.6
<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;
@ -19,17 +22,33 @@ 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);
var pitest = version(1, 19, 1);
scope(test)
.include(dependency("org.pitest", "pitest", version(1, 15, 6)))
.include(dependency("org.pitest", "pitest-command-line", version(1, 15, 6)))
.include(dependency("org.pitest", "pitest-junit5-plugin", version(1, 2, 1)))
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 1)))
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 1)));
.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);
}
@ -37,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.4
bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.1
bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,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.7.5
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, 2, "SNAPSHOT");
version = version(1, 0, 11, "SNAPSHOT");
javaRelease = 17;
downloadSources = true;
autoDownloadPurge = true;
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES);
var pitest = version(1, 15, 6);
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, 7, 5)));
.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, 1)))
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 1)))
.include(dependency("org.assertj", "assertj-core", version(3, 25, 1)));
.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("http://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,12 +57,87 @@ 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
@EnabledOnOs(OS.LINUX)
void checkAllParameters() throws IOException {
var args = Files.readAllLines(Paths.get("src", "test", "resources", "pitest-args.txt"));
assertThat(args).isNotEmpty();
var params = new PitestOperation()
.fromProject(new BaseProject())
.argLine(FOO)
.avoidCallsTo(FOO, BAR)
.classPath(FOO, BAR)
.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))
.excludedRunners("runners")
.excludedTestClasses("test")
.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")
.maxMutationsPerClass(3)
.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();
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();
}
}
}
@Test
@ -62,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
@ -75,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
@ -83,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
@ -96,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
@ -109,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
@ -122,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
@ -135,25 +218,33 @@ 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
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
@ -207,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
@ -225,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
@ -238,12 +335,20 @@ 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
void fullMutationMatrix() {
var op = new PitestOperation()
.fromProject(new BaseProject())
.fullMutationMatrix(true);
assertThat(op.options().get("--fullMutationMatrix")).isEqualTo(TRUE);
}
@Test
@ -251,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
@ -259,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
@ -267,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
@ -280,12 +385,28 @@ 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
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
@ -293,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
@ -306,7 +427,23 @@ 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
void maxSurviving() {
var op = new PitestOperation()
.fromProject(new Project())
.maxSurviving(1);
assertThat(op.options().get("--maxSurviving")).isEqualTo("1");
}
@Test
@ -314,12 +451,20 @@ 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
void mutationEngine() {
var op = new PitestOperation()
.fromProject(new Project())
.mutationEngine(FOO);
assertThat(op.options().get("--mutationEngine")).isEqualTo(FOO);
}
@Test
@ -327,12 +472,20 @@ 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
void mutationUnitSize() {
var op = new PitestOperation()
.fromProject(new Project())
.mutationUnitSize(2);
assertThat(op.options().get("--mutationUnitSize")).isEqualTo("2");
}
@Test
@ -340,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
@ -353,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
@ -361,12 +514,28 @@ 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
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
@ -374,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
@ -382,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
@ -395,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
@ -408,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
@ -421,12 +590,189 @@ 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
void testStrengthThreshold() {
var op = new PitestOperation()
.fromProject(new Project())
.testStrengthThreshold(6);
assertThat(op.options().get("--testStrengthThreshold")).isEqualTo("6");
}
@Test
@ -434,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
@ -442,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
@ -450,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
@ -458,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
@ -471,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
@ -484,11 +830,19 @@ 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
void verbosity() {
var op = new PitestOperation()
.fromProject(new Project())
.verbosity(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