Compare commits
No commits in common. "master" and "0.9.0" have entirely different histories.
34 changed files with 256 additions and 990 deletions
29
.github/workflows/bld.yml
vendored
29
.github/workflows/bld.yml
vendored
|
@ -4,36 +4,29 @@ on: [ push, pull_request, workflow_dispatch ]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-bld-project:
|
build-bld-project:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
java-version: [ 17, 21, 24 ]
|
java-version: [ 17, 20 ]
|
||||||
kotlin-version: [ 1.9.25, 2.0.21, 2.1.20 ]
|
|
||||||
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout source repository
|
- name: Checkout source repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Set up JDK ${{ matrix.java-version }}
|
- name: Set up JDK ${{ matrix.java-version }}
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
distribution: "zulu"
|
distribution: 'zulu'
|
||||||
java-version: ${{ matrix.java-version }}
|
java-version: ${{ matrix.java-version }}
|
||||||
|
|
||||||
- name: Download dependencies [examples]
|
- name: Grant execute permission for bld
|
||||||
working-directory: examples
|
run: chmod +x bld
|
||||||
|
|
||||||
|
- name: Download the dependencies
|
||||||
run: ./bld download
|
run: ./bld download
|
||||||
|
|
||||||
- name: Compile and run JaCoCo [examples]
|
- name: Run tests with bld
|
||||||
working-directory: examples
|
|
||||||
run: ./bld compile jacoco
|
|
||||||
|
|
||||||
- name: Download dependencies
|
|
||||||
run: ./bld download
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
run: ./bld compile test
|
run: ./bld compile test
|
12
.github/workflows/pages.yml
vendored
12
.github/workflows/pages.yml
vendored
|
@ -30,14 +30,14 @@ jobs:
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout source repository
|
- name: Checkout source repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Set up JDK 17
|
- name: Set up JDK 17
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
distribution: "zulu"
|
distribution: 'zulu'
|
||||||
java-version: 17
|
java-version: 17
|
||||||
|
|
||||||
- name: Build Javadocs
|
- name: Build Javadocs
|
||||||
|
@ -47,11 +47,11 @@ jobs:
|
||||||
uses: actions/configure-pages@v3
|
uses: actions/configure-pages@v3
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-pages-artifact@v3
|
uses: actions/upload-pages-artifact@v1
|
||||||
with:
|
with:
|
||||||
# Upload generated Javadocs repository
|
# Upload generated Javadocs repository
|
||||||
path: "build/javadoc/"
|
path: 'build/javadoc/'
|
||||||
|
|
||||||
- name: Deploy to GitHub Pages
|
- name: Deploy to GitHub Pages
|
||||||
id: deployment
|
id: deployment
|
||||||
uses: actions/deploy-pages@v4
|
uses: actions/deploy-pages@v1
|
6
.idea/bld.xml
generated
6
.idea/bld.xml
generated
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="BldConfiguration">
|
|
||||||
<events />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
2
.idea/copyright/Apache_License.xml
generated
2
.idea/copyright/Apache_License.xml
generated
|
@ -1,6 +1,6 @@
|
||||||
<component name="CopyrightManager">
|
<component name="CopyrightManager">
|
||||||
<copyright>
|
<copyright>
|
||||||
<option name="notice" value="Copyright 2023-&#36;today.year 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. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License." />
|
<option name="notice" value=" Copyright &#36;today.year 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. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License." />
|
||||||
<option name="myName" value="Apache License" />
|
<option name="myName" value="Apache License" />
|
||||||
</copyright>
|
</copyright>
|
||||||
</component>
|
</component>
|
13
.idea/icon.svg
generated
13
.idea/icon.svg
generated
|
@ -1,13 +0,0 @@
|
||||||
<?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>
|
|
Before Width: | Height: | Size: 2.4 KiB |
204
.idea/intellij-javadocs-4.0.1.xml
generated
204
.idea/intellij-javadocs-4.0.1.xml
generated
|
@ -1,204 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="JavaDocConfiguration">
|
|
||||||
<GENERAL>
|
|
||||||
<MODE>UPDATE</MODE>
|
|
||||||
<OVERRIDDEN_METHODS>false</OVERRIDDEN_METHODS>
|
|
||||||
<SPLITTED_CLASS_NAME>true</SPLITTED_CLASS_NAME>
|
|
||||||
<LEVELS>
|
|
||||||
<LEVEL>METHOD</LEVEL>
|
|
||||||
<LEVEL>FIELD</LEVEL>
|
|
||||||
<LEVEL>TYPE</LEVEL>
|
|
||||||
</LEVELS>
|
|
||||||
<VISIBILITIES>
|
|
||||||
<VISIBILITY>PUBLIC</VISIBILITY>
|
|
||||||
<VISIBILITY>DEFAULT</VISIBILITY>
|
|
||||||
<VISIBILITY>PROTECTED</VISIBILITY>
|
|
||||||
</VISIBILITIES>
|
|
||||||
</GENERAL>
|
|
||||||
<TEMPLATES>
|
|
||||||
<CLASSES>
|
|
||||||
<CLASS>
|
|
||||||
<KEY>^.*(public|protected|private)*.+interface\s+\w+.*</KEY>
|
|
||||||
<VALUE>/**\n
|
|
||||||
* The interface ${name}.\n
|
|
||||||
<#if element.typeParameters?has_content> * \n
|
|
||||||
</#if>
|
|
||||||
<#list element.typeParameters as typeParameter>
|
|
||||||
* @param <${typeParameter.name}> the type parameter\n
|
|
||||||
</#list>
|
|
||||||
*/</VALUE>
|
|
||||||
</CLASS>
|
|
||||||
<CLASS>
|
|
||||||
<KEY>^.*(public|protected|private)*.+enum\s+\w+.*</KEY>
|
|
||||||
<VALUE>/**\n
|
|
||||||
* The enum ${name}.\n
|
|
||||||
*/</VALUE>
|
|
||||||
</CLASS>
|
|
||||||
<CLASS>
|
|
||||||
<KEY>^.*(public|protected|private)*.+class\s+\w+.*</KEY>
|
|
||||||
<VALUE>/**\n
|
|
||||||
* The type ${name}.\n
|
|
||||||
<#if element.typeParameters?has_content> * \n
|
|
||||||
</#if>
|
|
||||||
<#list element.typeParameters as typeParameter>
|
|
||||||
* @param <${typeParameter.name}> the type parameter\n
|
|
||||||
</#list>
|
|
||||||
*/</VALUE>
|
|
||||||
</CLASS>
|
|
||||||
<CLASS>
|
|
||||||
<KEY>.+</KEY>
|
|
||||||
<VALUE>/**\n
|
|
||||||
* The type ${name}.\n
|
|
||||||
*/</VALUE>
|
|
||||||
</CLASS>
|
|
||||||
</CLASSES>
|
|
||||||
<CONSTRUCTORS>
|
|
||||||
<CONSTRUCTOR>
|
|
||||||
<KEY>.+</KEY>
|
|
||||||
<VALUE>/**\n
|
|
||||||
* Instantiates a new ${name}.\n
|
|
||||||
<#if element.parameterList.parameters?has_content>
|
|
||||||
*\n
|
|
||||||
</#if>
|
|
||||||
<#list element.parameterList.parameters as parameter>
|
|
||||||
* @param ${parameter.name} the ${paramNames[parameter.name]}\n
|
|
||||||
</#list>
|
|
||||||
<#if element.throwsList.referenceElements?has_content>
|
|
||||||
*\n
|
|
||||||
</#if>
|
|
||||||
<#list element.throwsList.referenceElements as exception>
|
|
||||||
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
|
||||||
</#list>
|
|
||||||
*/</VALUE>
|
|
||||||
</CONSTRUCTOR>
|
|
||||||
</CONSTRUCTORS>
|
|
||||||
<METHODS>
|
|
||||||
<METHOD>
|
|
||||||
<KEY>^.*(public|protected|private)*\s*.*(\w(\s*<.+>)*)+\s+get\w+\s*\(.*\).+</KEY>
|
|
||||||
<VALUE>/**\n
|
|
||||||
* Gets ${partName}.\n
|
|
||||||
<#if element.typeParameters?has_content> * \n
|
|
||||||
</#if>
|
|
||||||
<#list element.typeParameters as typeParameter>
|
|
||||||
* @param <${typeParameter.name}> the type parameter\n
|
|
||||||
</#list>
|
|
||||||
<#if element.parameterList.parameters?has_content>
|
|
||||||
*\n
|
|
||||||
</#if>
|
|
||||||
<#list element.parameterList.parameters as parameter>
|
|
||||||
* @param ${parameter.name} the ${paramNames[parameter.name]}\n
|
|
||||||
</#list>
|
|
||||||
<#if isNotVoid>
|
|
||||||
*\n
|
|
||||||
* @return the ${partName}\n
|
|
||||||
</#if>
|
|
||||||
<#if element.throwsList.referenceElements?has_content>
|
|
||||||
*\n
|
|
||||||
</#if>
|
|
||||||
<#list element.throwsList.referenceElements as exception>
|
|
||||||
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
|
||||||
</#list>
|
|
||||||
*/</VALUE>
|
|
||||||
</METHOD>
|
|
||||||
<METHOD>
|
|
||||||
<KEY>^.*(public|protected|private)*\s*.*(void|\w(\s*<.+>)*)+\s+set\w+\s*\(.*\).+</KEY>
|
|
||||||
<VALUE>/**\n
|
|
||||||
* Sets ${partName}.\n
|
|
||||||
<#if element.typeParameters?has_content> * \n
|
|
||||||
</#if>
|
|
||||||
<#list element.typeParameters as typeParameter>
|
|
||||||
* @param <${typeParameter.name}> the type parameter\n
|
|
||||||
</#list>
|
|
||||||
<#if element.parameterList.parameters?has_content>
|
|
||||||
*\n
|
|
||||||
</#if>
|
|
||||||
<#list element.parameterList.parameters as parameter>
|
|
||||||
* @param ${parameter.name} the ${paramNames[parameter.name]}\n
|
|
||||||
</#list>
|
|
||||||
<#if isNotVoid>
|
|
||||||
*\n
|
|
||||||
* @return the ${partName}\n
|
|
||||||
</#if>
|
|
||||||
<#if element.throwsList.referenceElements?has_content>
|
|
||||||
*\n
|
|
||||||
</#if>
|
|
||||||
<#list element.throwsList.referenceElements as exception>
|
|
||||||
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
|
||||||
</#list>
|
|
||||||
*/</VALUE>
|
|
||||||
</METHOD>
|
|
||||||
<METHOD>
|
|
||||||
<KEY>^.*((public\s+static)|(static\s+public))\s+void\s+main\s*\(\s*String\s*(\[\s*\]|\.\.\.)\s+\w+\s*\).+</KEY>
|
|
||||||
<VALUE>/**\n
|
|
||||||
* The entry point of application.\n
|
|
||||||
|
|
||||||
<#if element.parameterList.parameters?has_content>
|
|
||||||
*\n
|
|
||||||
</#if>
|
|
||||||
* @param ${element.parameterList.parameters[0].name} the input arguments\n
|
|
||||||
<#if element.throwsList.referenceElements?has_content>
|
|
||||||
*\n
|
|
||||||
</#if>
|
|
||||||
<#list element.throwsList.referenceElements as exception>
|
|
||||||
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
|
||||||
</#list>
|
|
||||||
*/</VALUE>
|
|
||||||
</METHOD>
|
|
||||||
<METHOD>
|
|
||||||
<KEY>.+</KEY>
|
|
||||||
<VALUE>/**\n
|
|
||||||
* ${name}<#if isNotVoid> ${return}</#if>.\n
|
|
||||||
<#if element.typeParameters?has_content> * \n
|
|
||||||
</#if>
|
|
||||||
<#list element.typeParameters as typeParameter>
|
|
||||||
* @param <${typeParameter.name}> the type parameter\n
|
|
||||||
</#list>
|
|
||||||
<#if element.parameterList.parameters?has_content>
|
|
||||||
*\n
|
|
||||||
</#if>
|
|
||||||
<#list element.parameterList.parameters as parameter>
|
|
||||||
* @param ${parameter.name} the ${paramNames[parameter.name]}\n
|
|
||||||
</#list>
|
|
||||||
<#if isNotVoid>
|
|
||||||
*\n
|
|
||||||
* @return the ${return}\n
|
|
||||||
</#if>
|
|
||||||
<#if element.throwsList.referenceElements?has_content>
|
|
||||||
*\n
|
|
||||||
</#if>
|
|
||||||
<#list element.throwsList.referenceElements as exception>
|
|
||||||
* @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
|
|
||||||
</#list>
|
|
||||||
*/</VALUE>
|
|
||||||
</METHOD>
|
|
||||||
</METHODS>
|
|
||||||
<FIELDS>
|
|
||||||
<FIELD>
|
|
||||||
<KEY>^.*(public|protected|private)*.+static.*(\w\s\w)+.+</KEY>
|
|
||||||
<VALUE>/**\n
|
|
||||||
* The constant ${element.getName()}.\n
|
|
||||||
*/</VALUE>
|
|
||||||
</FIELD>
|
|
||||||
<FIELD>
|
|
||||||
<KEY>^.*(public|protected|private)*.*(\w\s\w)+.+</KEY>
|
|
||||||
<VALUE>/**\n
|
|
||||||
<#if element.parent.isInterface()>
|
|
||||||
* The constant ${element.getName()}.\n
|
|
||||||
<#else>
|
|
||||||
* The ${name}.\n
|
|
||||||
</#if> */</VALUE>
|
|
||||||
</FIELD>
|
|
||||||
<FIELD>
|
|
||||||
<KEY>.+</KEY>
|
|
||||||
<VALUE>/**\n
|
|
||||||
<#if element.parent.isEnum()>
|
|
||||||
*${name} ${typeName}.\n
|
|
||||||
<#else>
|
|
||||||
* The ${name}.\n
|
|
||||||
</#if>*/</VALUE>
|
|
||||||
</FIELD>
|
|
||||||
</FIELDS>
|
|
||||||
</TEMPLATES>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
5
.idea/libraries/bld.xml
generated
5
.idea/libraries/bld.xml
generated
|
@ -2,12 +2,11 @@
|
||||||
<library name="bld">
|
<library name="bld">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-1.7.0.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-1.7.0-sources.jar!/" />
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1-sources.jar!/" />
|
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<excluded>
|
<excluded>
|
||||||
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />
|
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />
|
||||||
|
|
4
.idea/libraries/compile.xml
generated
4
.idea/libraries/compile.xml
generated
|
@ -7,7 +7,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/compile" />
|
<root url="file://$PROJECT_DIR$/lib/compile" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
4
.idea/libraries/runtime.xml
generated
4
.idea/libraries/runtime.xml
generated
|
@ -8,7 +8,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
4
.idea/libraries/test.xml
generated
4
.idea/libraries/test.xml
generated
|
@ -8,7 +8,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/test" />
|
<root url="file://$PROJECT_DIR$/lib/test" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
7
.idea/misc.xml
generated
7
.idea/misc.xml
generated
|
@ -29,18 +29,11 @@
|
||||||
<pattern value="rife.bld.extension.JacocoReportOperation" method="writeReports" />
|
<pattern value="rife.bld.extension.JacocoReportOperation" method="writeReports" />
|
||||||
<pattern value="rife.bld.extension.JacocoReportOperationBuild" method="pmd" />
|
<pattern value="rife.bld.extension.JacocoReportOperationBuild" method="pmd" />
|
||||||
<pattern value="rife.bld.extension.JacocoReportOperation" method="destFile" />
|
<pattern value="rife.bld.extension.JacocoReportOperation" method="destFile" />
|
||||||
<pattern value="rife.bld.extension.JacocoReportOperation" method="isNotBlank" />
|
|
||||||
</component>
|
</component>
|
||||||
<component name="PDMPlugin">
|
<component name="PDMPlugin">
|
||||||
<option name="customRuleSets">
|
<option name="customRuleSets">
|
||||||
<list>
|
<list>
|
||||||
<option value="$PROJECT_DIR$/config/pmd.xml" />
|
|
||||||
<option value="K:\java\semver\config\pmd.xml" />
|
<option value="K:\java\semver\config\pmd.xml" />
|
||||||
<option value="$PROJECT_DIR$/../bld-checkstyle/config/pmd.xml" />
|
|
||||||
<option value="$PROJECT_DIR$/../bld-exec/config/pmd.xml" />
|
|
||||||
<option value="$PROJECT_DIR$/../bld-testng/config/pmd.xml" />
|
|
||||||
<option value="$PROJECT_DIR$/../bld-pitest/config/pmd.xml" />
|
|
||||||
<option value="$PROJECT_DIR$/../bld-generated-version/config/pmd.xml" />
|
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
<option name="skipTestSources" value="false" />
|
<option name="skipTestSources" value="false" />
|
||||||
|
|
9
.idea/runConfigurations/Run Tests.xml
generated
Normal file
9
.idea/runConfigurations/Run Tests.xml
generated
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="Run Tests" type="Application" factoryName="Application" nameIsGenerated="true">
|
||||||
|
<option name="MAIN_CLASS_NAME" value="rife.bld.extension.JacocoReportOperationTest" />
|
||||||
|
<module name="app" />
|
||||||
|
<method v="2">
|
||||||
|
<option name="Make" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
9
.vscode/launch.json
vendored
9
.vscode/launch.json
vendored
|
@ -5,14 +5,7 @@
|
||||||
"type": "java",
|
"type": "java",
|
||||||
"name": "Run Tests",
|
"name": "Run Tests",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"mainClass": "org.junit.platform.console.ConsoleLauncher",
|
"mainClass": "rife.bld.extension.JacocoReportOperationTest"
|
||||||
"args": [
|
|
||||||
"--details=verbose",
|
|
||||||
"--scan-classpath",
|
|
||||||
"--disable-banner",
|
|
||||||
"--disable-ansi-colors",
|
|
||||||
"--exclude-engine=junit-platform-suite",
|
|
||||||
"--exclude-engine=junit-vintage"]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
10
.vscode/settings.json
vendored
10
.vscode/settings.json
vendored
|
@ -3,13 +3,13 @@
|
||||||
"src/main/java",
|
"src/main/java",
|
||||||
"src/main/resources",
|
"src/main/resources",
|
||||||
"src/test/java",
|
"src/test/java",
|
||||||
"src/test/resources",
|
"src/bld/java"
|
||||||
"src/bld/java",
|
|
||||||
"src/bld/resources"
|
|
||||||
],
|
],
|
||||||
"java.configuration.updateBuildConfiguration": "automatic",
|
"java.configuration.updateBuildConfiguration": "automatic",
|
||||||
"java.project.referencedLibraries": [
|
"java.project.referencedLibraries": [
|
||||||
"${HOME}/.bld/dist/bld-2.2.1.jar",
|
"${HOME}bld-1.7.0-SNAPSHOT.jar",
|
||||||
"lib/**/*.jar"
|
"lib/compile/*.jar",
|
||||||
|
"lib/runtime/*.jar",
|
||||||
|
"lib/test/*.jar"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
21
README.md
21
README.md
|
@ -1,40 +1,30 @@
|
||||||
# [bld](https://rife2.com/bld) Extension to Generate Code Coverage Reports with [JaCoCo](https://www.eclemma.org/jacoco/)
|
# [Bld](https://rife2.com/bld) Extension to Generate Code Coverage Reports with [JaCoCo](https://www.eclemma.org/jacoco/)
|
||||||
|
|
||||||
|
|
||||||
[](https://opensource.org/licenses/Apache-2.0)
|
[](https://opensource.org/licenses/Apache-2.0)
|
||||||
[](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
|
[](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
|
||||||
[](https://rife2.com/bld)
|
[](https://rife2.com/bld)
|
||||||
[](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-jacoco-report)
|
[](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-jacoco-report)
|
||||||
[](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-jacoco-report)
|
[](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-jacoco-report)
|
||||||
[](https://github.com/rife2/bld-jacoco-report/actions/workflows/bld.yml)
|
[](https://github.com/rife2/bld-jacoco-report/actions/workflows/bld.yml)
|
||||||
|
|
||||||
To install the latest version, add the following to the `lib/bld/bld-wrapper.properties` file:
|
To install, please refer to the [extensions documentation](https://github.com/rife2/bld/wiki/Extensions).
|
||||||
|
|
||||||
```properties
|
|
||||||
bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report
|
|
||||||
```
|
|
||||||
|
|
||||||
For more information, please refer to the [extensions](https://github.com/rife2/bld/wiki/Extensions) documentation.
|
|
||||||
|
|
||||||
## Generate Code Coverage Reports
|
|
||||||
|
|
||||||
To run the tests and generate the code coverage reports, add the floowing to your build file:
|
To run the tests and generate the code coverage reports, add the floowing to your build file:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
@BuildCommand(summary = "Generates Jacoco Reports")
|
@BuildCommand(summary = "Generates Jacoco Reports")
|
||||||
public void jacoco() throws Exception {
|
public void jacoco() throws IOException {
|
||||||
new JacocoReportOperation()
|
new JacocoReportOperation()
|
||||||
.fromProject(this)
|
.fromProject(this)
|
||||||
.execute();
|
.execute();
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```console
|
```text
|
||||||
./bld compile jacoco
|
./bld compile jacoco
|
||||||
```
|
```
|
||||||
|
|
||||||
- [View Examples](https://github.com/rife2/bld-jacoco-report/tree/master/examples)
|
|
||||||
|
|
||||||
- The HTML, CSV and XML reports will be automatically created in the `build/reports/jacoco/test` directory.
|
- The HTML, CSV and XML reports will be automatically created in the `build/reports/jacoco/test` directory.
|
||||||
- The execution coverage data will be automatically recorded in the `build/jacoco/jacoco.exec` file.
|
- The execution coverage data will be automatically recorded in the `build/jacoco/jacoco.exec` file.
|
||||||
|
|
||||||
|
@ -52,4 +42,5 @@ sonar.sources=src/main/java/
|
||||||
sonar.tests=src/test/java/
|
sonar.tests=src/test/java/
|
||||||
sonar.java.binaries=build/main,build/test
|
sonar.java.binaries=build/main,build/test
|
||||||
sonar.java.libraries=lib/compile/*.jar
|
sonar.java.libraries=lib/compile/*.jar
|
||||||
|
|
||||||
```
|
```
|
|
@ -7,9 +7,9 @@
|
||||||
<!-- BEST PRACTICES -->
|
<!-- BEST PRACTICES -->
|
||||||
<rule ref="category/java/bestpractices.xml">
|
<rule ref="category/java/bestpractices.xml">
|
||||||
<exclude name="AvoidPrintStackTrace"/>
|
<exclude name="AvoidPrintStackTrace"/>
|
||||||
|
<exclude name="JUnit4TestShouldUseTestAnnotation"/>
|
||||||
|
<exclude name="JUnitTestContainsTooManyAsserts"/>
|
||||||
<exclude name="GuardLogStatement"/>
|
<exclude name="GuardLogStatement"/>
|
||||||
<exclude name="UnitTestContainsTooManyAsserts"/>
|
|
||||||
<exclude name="UnitTestShouldUseTestAnnotation"/>
|
|
||||||
</rule>
|
</rule>
|
||||||
|
|
||||||
<rule ref="category/java/bestpractices.xml/MissingOverride">
|
<rule ref="category/java/bestpractices.xml/MissingOverride">
|
||||||
|
@ -24,8 +24,8 @@
|
||||||
<rule ref="category/java/codestyle.xml">
|
<rule ref="category/java/codestyle.xml">
|
||||||
<exclude name="AtLeastOneConstructor"/>
|
<exclude name="AtLeastOneConstructor"/>
|
||||||
<exclude name="ClassNamingConventions"/>
|
<exclude name="ClassNamingConventions"/>
|
||||||
<exclude name="CommentDefaultAccessModifier"/>
|
|
||||||
<exclude name="ConfusingTernary"/>
|
<exclude name="ConfusingTernary"/>
|
||||||
|
<exclude name="CommentDefaultAccessModifier"/>
|
||||||
<exclude name="FieldNamingConventions"/>
|
<exclude name="FieldNamingConventions"/>
|
||||||
<exclude name="LocalVariableCouldBeFinal"/>
|
<exclude name="LocalVariableCouldBeFinal"/>
|
||||||
<exclude name="LongVariable"/>
|
<exclude name="LongVariable"/>
|
||||||
|
@ -35,9 +35,8 @@
|
||||||
<exclude name="ShortClassName"/>
|
<exclude name="ShortClassName"/>
|
||||||
<exclude name="ShortMethodName"/>
|
<exclude name="ShortMethodName"/>
|
||||||
<exclude name="ShortVariable"/>
|
<exclude name="ShortVariable"/>
|
||||||
<exclude name="UseExplicitTypes"/>
|
|
||||||
<exclude name="UseUnderscoresInNumericLiterals"/>
|
|
||||||
<exclude name="UselessParentheses"/>
|
<exclude name="UselessParentheses"/>
|
||||||
|
<exclude name="UseUnderscoresInNumericLiterals"/>
|
||||||
</rule>
|
</rule>
|
||||||
|
|
||||||
<rule ref="category/java/codestyle.xml/UnnecessaryImport">
|
<rule ref="category/java/codestyle.xml/UnnecessaryImport">
|
||||||
|
@ -53,6 +52,8 @@
|
||||||
<exclude name="AvoidUncheckedExceptionsInSignatures"/>
|
<exclude name="AvoidUncheckedExceptionsInSignatures"/>
|
||||||
<exclude name="CognitiveComplexity"/>
|
<exclude name="CognitiveComplexity"/>
|
||||||
<exclude name="CyclomaticComplexity"/>
|
<exclude name="CyclomaticComplexity"/>
|
||||||
|
<exclude name="ExcessiveClassLength"/>
|
||||||
|
<exclude name="ExcessiveMethodLength"/>
|
||||||
<exclude name="ExcessiveParameterList"/>
|
<exclude name="ExcessiveParameterList"/>
|
||||||
<exclude name="ExcessivePublicCount"/>
|
<exclude name="ExcessivePublicCount"/>
|
||||||
<exclude name="GodClass"/>
|
<exclude name="GodClass"/>
|
||||||
|
|
5
examples/.idea/libraries/bld.xml
generated
5
examples/.idea/libraries/bld.xml
generated
|
@ -2,12 +2,11 @@
|
||||||
<library name="bld">
|
<library name="bld">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-1.7.0.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-1.7.0-sources.jar!/" />
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1-sources.jar!/" />
|
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<excluded>
|
<excluded>
|
||||||
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />
|
<root url="jar://$PROJECT_DIR$/lib/bld/bld-wrapper.jar!/" />
|
||||||
|
|
4
examples/.idea/libraries/compile.xml
generated
4
examples/.idea/libraries/compile.xml
generated
|
@ -7,7 +7,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/compile" />
|
<root url="file://$PROJECT_DIR$/lib/compile" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
4
examples/.idea/libraries/runtime.xml
generated
4
examples/.idea/libraries/runtime.xml
generated
|
@ -8,7 +8,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
<root url="file://$PROJECT_DIR$/lib/runtime" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
4
examples/.idea/libraries/test.xml
generated
4
examples/.idea/libraries/test.xml
generated
|
@ -8,7 +8,7 @@
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/test" />
|
<root url="file://$PROJECT_DIR$/lib/test" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
9
examples/.vscode/launch.json
vendored
9
examples/.vscode/launch.json
vendored
|
@ -5,14 +5,7 @@
|
||||||
"type": "java",
|
"type": "java",
|
||||||
"name": "Run Tests",
|
"name": "Run Tests",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"mainClass": "org.junit.platform.console.ConsoleLauncher",
|
"mainClass": "com.example.ExamplesTest"
|
||||||
"args": [
|
|
||||||
"--details=verbose",
|
|
||||||
"--scan-classpath",
|
|
||||||
"--disable-banner",
|
|
||||||
"--disable-ansi-colors",
|
|
||||||
"--exclude-engine=junit-platform-suite",
|
|
||||||
"--exclude-engine=junit-vintage"]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
10
examples/.vscode/settings.json
vendored
10
examples/.vscode/settings.json
vendored
|
@ -3,13 +3,13 @@
|
||||||
"src/main/java",
|
"src/main/java",
|
||||||
"src/main/resources",
|
"src/main/resources",
|
||||||
"src/test/java",
|
"src/test/java",
|
||||||
"src/test/resources",
|
"src/bld/java"
|
||||||
"src/bld/java",
|
|
||||||
"src/bld/resources"
|
|
||||||
],
|
],
|
||||||
"java.configuration.updateBuildConfiguration": "automatic",
|
"java.configuration.updateBuildConfiguration": "automatic",
|
||||||
"java.project.referencedLibraries": [
|
"java.project.referencedLibraries": [
|
||||||
"${HOME}/.bld/dist/bld-2.2.1.jar",
|
"${HOME}bld-1.7.0-SNAPSHOT.jar",
|
||||||
"lib/**/*.jar"
|
"lib/compile/*.jar",
|
||||||
|
"lib/runtime/*.jar",
|
||||||
|
"lib/test/*.jar"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
# Compile and Generate JaCoCo Reports
|
|
||||||
|
|
||||||
```console
|
|
||||||
./bld compile jacoco
|
|
||||||
```
|
|
||||||
|
|
Binary file not shown.
|
@ -1,6 +1,6 @@
|
||||||
bld.downloadExtensionJavadoc=false
|
bld.downloadExtensionJavadoc=false
|
||||||
bld.downloadExtensionSources=true
|
bld.downloadExtensionSources=true
|
||||||
|
bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.0
|
||||||
|
bld.repositories=RIFE2_SNAPSHOTS,RIFE2_RELEASES,MAVEN_CENTRAL
|
||||||
bld.downloadLocation=
|
bld.downloadLocation=
|
||||||
bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.10
|
bld.version=1.7.1
|
||||||
bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
|
||||||
bld.version=2.2.1
|
|
||||||
|
|
|
@ -17,24 +17,18 @@ public class ExamplesBuild extends Project {
|
||||||
name = "Examples";
|
name = "Examples";
|
||||||
version = version(0, 1, 0);
|
version = version(0, 1, 0);
|
||||||
|
|
||||||
javaRelease = 17;
|
|
||||||
|
|
||||||
downloadSources = true;
|
|
||||||
autoDownloadPurge = true;
|
|
||||||
|
|
||||||
repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL);
|
repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL);
|
||||||
|
|
||||||
scope(test)
|
scope(test)
|
||||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1)))
|
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 9, 3)))
|
||||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1)));
|
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 9, 3)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
new ExamplesBuild().start(args);
|
new ExamplesBuild().start(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@BuildCommand(summary = "Generates Jacoco Reports")
|
@BuildCommand(summary = "Generates Jacoco Reports")
|
||||||
public void jacoco() throws Exception {
|
public void jacoco() throws IOException {
|
||||||
new JacocoReportOperation()
|
new JacocoReportOperation()
|
||||||
.fromProject(this)
|
.fromProject(this)
|
||||||
.execute();
|
.execute();
|
||||||
|
|
Binary file not shown.
|
@ -1,7 +1,6 @@
|
||||||
bld.downloadExtensionJavadoc=false
|
bld.downloadExtensionJavadoc=false
|
||||||
bld.downloadExtensionSources=true
|
bld.downloadExtensionSources=true
|
||||||
|
bld.extension-pmd=com.uwyn.rife2:bld-pmd:0.9.2
|
||||||
|
bld.repositories=RIFE2_SNAPSHOTS,RIFE2_RELEASES,MAVEN_CENTRAL
|
||||||
bld.downloadLocation=
|
bld.downloadLocation=
|
||||||
bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.5
|
bld.version=1.7.1
|
||||||
bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.2
|
|
||||||
bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
|
||||||
bld.version=2.2.1
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
java -jar lib/compile/org.jacoco.cli-*-nodeps.jar report 2> >(grep "^ [<-]") |
|
|
||||||
cut -d' ' -f 2 |
|
|
||||||
sed -e "/help/d" >"src/test/resources/jacoco-args.txt"
|
|
|
@ -1,17 +1,17 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2025 the original author or authors.
|
* Copyright 2023 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package rife.bld.extension;
|
package rife.bld.extension;
|
||||||
|
@ -26,61 +26,52 @@ import rife.bld.publish.PublishScm;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static rife.bld.dependencies.Repository.*;
|
import static rife.bld.dependencies.Repository.*;
|
||||||
import static rife.bld.dependencies.Scope.compile;
|
import static rife.bld.dependencies.Scope.*;
|
||||||
import static rife.bld.dependencies.Scope.test;
|
|
||||||
import static rife.bld.operations.JavadocOptions.DocLinkOption.NO_MISSING;
|
import static rife.bld.operations.JavadocOptions.DocLinkOption.NO_MISSING;
|
||||||
|
|
||||||
public class JacocoReportOperationBuild extends Project {
|
public class JacocoReportOperationBuild extends Project {
|
||||||
public JacocoReportOperationBuild() {
|
public JacocoReportOperationBuild() {
|
||||||
pkg = "rife.bld.extension";
|
pkg = "rife.bld.extension";
|
||||||
name = "JacocoReportOperation";
|
name = "JacocoReportOperation";
|
||||||
version = version(0, 9, 10);
|
version = version(0, 9, 0);
|
||||||
|
|
||||||
javaRelease = 17;
|
javaRelease = 17;
|
||||||
|
|
||||||
downloadSources = true;
|
downloadSources = true;
|
||||||
autoDownloadPurge = true;
|
autoDownloadPurge = true;
|
||||||
|
repositories = List.of(MAVEN_CENTRAL, RIFE2_RELEASES);
|
||||||
|
|
||||||
repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS);
|
var jacocoVersion = new VersionNumber(0, 8, 10);
|
||||||
|
|
||||||
var jacocoVersion = new VersionNumber(0, 8, 13);
|
|
||||||
scope(compile)
|
scope(compile)
|
||||||
.include(dependency("org.jacoco", "jacoco", jacocoVersion).exclude("*", "org.jacoco.doc"))
|
.include(dependency("org.jacoco", "jacoco", jacocoVersion).exclude("*", "org.jacoco.doc"))
|
||||||
.include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1)));
|
.include(dependency("com.uwyn.rife2", "rife2", version(1, 7, 0)))
|
||||||
|
.include(dependency("com.uwyn.rife2", "bld", version(1, 7, 1)));
|
||||||
|
scope(runtime)
|
||||||
|
.include(dependency("org.jacoco", "jacoco", jacocoVersion).exclude("*", "org.jacoco.doc"));
|
||||||
scope(test)
|
scope(test)
|
||||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1)))
|
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 0)))
|
||||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1)))
|
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 0)))
|
||||||
.include(dependency("org.assertj", "assertj-core", version(3, 27, 3)));
|
.include(dependency("org.assertj:assertj-joda-time:2.2.0"));
|
||||||
|
|
||||||
javadocOperation()
|
javadocOperation()
|
||||||
.javadocOptions()
|
.javadocOptions()
|
||||||
.author()
|
|
||||||
.docLint(NO_MISSING)
|
.docLint(NO_MISSING)
|
||||||
.link("https://rife2.github.io/bld/")
|
.link("https://rife2.github.io/bld/")
|
||||||
.link("https://rife2.github.io/rife2/");
|
.link("https://rife2.github.io/rife2/");
|
||||||
|
|
||||||
publishOperation()
|
publishOperation()
|
||||||
.repository(version.isSnapshot() ? repository("rife2-snapshot") : repository("rife2"))
|
.repository(version.isSnapshot() ? repository("rife2-snapshot") : repository("rife2"))
|
||||||
.repository(repository("github"))
|
|
||||||
.info()
|
.info()
|
||||||
.groupId("com.uwyn.rife2")
|
.groupId("com.uwyn.rife2")
|
||||||
.artifactId("bld-jacoco-report")
|
.artifactId("bld-jacoco-report")
|
||||||
.description("bld Extension to Generate JaCoCo Code Coverage Reports")
|
.description("bld Extension to Generate JaCoCo Code Coverage Reports")
|
||||||
.url("https://github.com/rife2/bld-pmd")
|
.url("https://github.com/rife2/bld-pmd")
|
||||||
.developer(new PublishDeveloper()
|
.developer(new PublishDeveloper().id("ethauvin").name("Erik C. Thauvin").email("erik@thauvin.net")
|
||||||
.id("ethauvin")
|
.url("https://erik.thauvin.net/"))
|
||||||
.name("Erik C. Thauvin")
|
.license(new PublishLicense().name("The Apache License, Version 2.0")
|
||||||
.email("erik@thauvin.net")
|
.url("http://www.apache.org/licenses/LICENSE-2.0.txt"))
|
||||||
.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")
|
|
||||||
)
|
|
||||||
.scm(new PublishScm().connection("scm:git:https://github.com/rife2/bld-pmd.git")
|
.scm(new PublishScm().connection("scm:git:https://github.com/rife2/bld-pmd.git")
|
||||||
.developerConnection("scm:git:git@github.com:rife2/bld-pmd.git")
|
.developerConnection("scm:git:git@github.com:rife2/bld-pmd.git")
|
||||||
.url("https://github.com/rife2/bld-pmd")
|
.url("https://github.com/rife2/bld-pmd"))
|
||||||
)
|
|
||||||
.signKey(property("sign.key"))
|
.signKey(property("sign.key"))
|
||||||
.signPassphrase(property("sign.passphrase"));
|
.signPassphrase(property("sign.passphrase"));
|
||||||
}
|
}
|
||||||
|
@ -90,23 +81,11 @@ public class JacocoReportOperationBuild extends Project {
|
||||||
}
|
}
|
||||||
|
|
||||||
@BuildCommand(summary = "Runs PMD analysis")
|
@BuildCommand(summary = "Runs PMD analysis")
|
||||||
public void pmd() throws Exception {
|
public void pmd() {
|
||||||
new PmdOperation()
|
new PmdOperation()
|
||||||
.fromProject(this)
|
.fromProject(this)
|
||||||
.failOnViolation(true)
|
.failOnViolation(true)
|
||||||
.ruleSets("config/pmd.xml")
|
.ruleSets("config/pmd.xml")
|
||||||
.execute();
|
.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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2025 the original author or authors.
|
* Copyright 2023 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package rife.bld.extension;
|
package rife.bld.extension;
|
||||||
|
@ -35,7 +35,7 @@ import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
@ -52,400 +52,195 @@ public class JacocoReportOperation extends AbstractOperation<JacocoReportOperati
|
||||||
/**
|
/**
|
||||||
* The location of the java class files.
|
* The location of the java class files.
|
||||||
*/
|
*/
|
||||||
final private Collection<File> classFiles_ = new ArrayList<>();
|
final List<File> classFiles = new ArrayList<>();
|
||||||
/**
|
/**
|
||||||
* The location of the exec files.
|
* The location of the exec files.
|
||||||
*/
|
*/
|
||||||
final private Collection<File> execFiles_ = new ArrayList<>();
|
final List<File> execFiles = new ArrayList<>();
|
||||||
/**
|
/**
|
||||||
* The location of the source files.
|
* The location of the source files.
|
||||||
*/
|
*/
|
||||||
final private Collection<File> sourceFiles_ = new ArrayList<>();
|
final List<File> sourceFiles = new ArrayList<>();
|
||||||
/**
|
/**
|
||||||
* The location of the CSV report.
|
* The location of the CSV report.
|
||||||
*/
|
*/
|
||||||
private File csv_;
|
File csv;
|
||||||
/**
|
/**
|
||||||
* The file to write execution data to.
|
* The file to write execution data to.
|
||||||
*/
|
*/
|
||||||
private File destFile_;
|
File destFile;
|
||||||
/**
|
/**
|
||||||
* The source file encoding.
|
* The source file encoding.
|
||||||
*/
|
*/
|
||||||
private String encoding_;
|
String encoding;
|
||||||
/**
|
/**
|
||||||
* The location of the HTML report.
|
* The location of the HTML report.
|
||||||
*/
|
*/
|
||||||
private File html_;
|
File html;
|
||||||
/**
|
|
||||||
* The project reference.
|
|
||||||
*/
|
|
||||||
private BaseProject project_;
|
|
||||||
/**
|
/**
|
||||||
* The report name.
|
* The report name.
|
||||||
*/
|
*/
|
||||||
private String reportName_ = "JaCoCo Coverage Report";
|
String name = "JaCoCo Coverage Report";
|
||||||
|
/**
|
||||||
|
* The project reference.
|
||||||
|
*/
|
||||||
|
BaseProject project;
|
||||||
|
/**
|
||||||
|
* The quiet flag.
|
||||||
|
*/
|
||||||
|
boolean quiet;
|
||||||
/**
|
/**
|
||||||
* THe tab width.
|
* THe tab width.
|
||||||
*/
|
*/
|
||||||
private int tabWidth_ = 4;
|
int tabWidth = 4;
|
||||||
/**
|
/**
|
||||||
* THe location of the XML report
|
* THe location of the XML report
|
||||||
*/
|
*/
|
||||||
private File xml_;
|
File xml;
|
||||||
|
|
||||||
|
|
||||||
private IBundleCoverage analyze(ExecutionDataStore data) throws IOException {
|
private IBundleCoverage analyze(ExecutionDataStore data) throws IOException {
|
||||||
var builder = new CoverageBuilder();
|
var builder = new CoverageBuilder();
|
||||||
var analyzer = new Analyzer(data, builder);
|
var analyzer = new Analyzer(data, builder);
|
||||||
for (var f : classFiles_) {
|
for (var f : classFiles) {
|
||||||
LOGGER.info(f.getAbsolutePath());
|
LOGGER.info(f.getAbsolutePath());
|
||||||
analyzer.analyzeAll(f);
|
analyzer.analyzeAll(f);
|
||||||
}
|
}
|
||||||
return builder.getBundle(reportName_);
|
return builder.getBundle(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the locations of Java class files.
|
* Sets the locations of Java class files.
|
||||||
*
|
**/
|
||||||
* @param classFiles the class files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #classFiles(Collection)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation classFiles(File... classFiles) {
|
public JacocoReportOperation classFiles(File... classFiles) {
|
||||||
return classFiles(List.of(classFiles));
|
this.classFiles.addAll(Arrays.stream(classFiles).toList());
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of Java class files.
|
|
||||||
*
|
|
||||||
* @param classFiles the class files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #classFilesStrings(Collection)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation classFiles(String... classFiles) {
|
|
||||||
return classFilesStrings(List.of(classFiles));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of Java class files.
|
|
||||||
*
|
|
||||||
* @param classFiles the class files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #classFilesPaths(Collection)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation classFiles(Path... classFiles) {
|
|
||||||
return classFilesPaths(List.of(classFiles));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the locations of Java class files.
|
|
||||||
*
|
|
||||||
* @return the class files
|
|
||||||
*/
|
|
||||||
public Collection<File> classFiles() {
|
|
||||||
return classFiles_;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of Java class files.
|
|
||||||
*
|
|
||||||
* @param classFiles the class files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #classFiles(File...)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation classFiles(Collection<File> classFiles) {
|
|
||||||
classFiles_.addAll(classFiles);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of Java class files.
|
|
||||||
*
|
|
||||||
* @param classFiles the class files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #classFiles(Path...)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation classFilesPaths(Collection<Path> classFiles) {
|
|
||||||
return classFiles(classFiles.stream().map(Path::toFile).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of Java class files.
|
|
||||||
*
|
|
||||||
* @param classFiles the class files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #classFiles(String...)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation classFilesStrings(Collection<String> classFiles) {
|
|
||||||
return classFiles(classFiles.stream().map(File::new).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the location of the CSV report.
|
|
||||||
*
|
|
||||||
* @param csv the report location
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation csv(File csv) {
|
|
||||||
csv_ = csv;
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the location of the CSV report.
|
* Sets the location of the CSV report.
|
||||||
*
|
|
||||||
* @param csv the report location
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
*/
|
||||||
public JacocoReportOperation csv(String csv) {
|
public JacocoReportOperation csv(File cvs) {
|
||||||
return csv(new File(csv));
|
this.csv = cvs;
|
||||||
}
|
return this;
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the location of the CSV report.
|
|
||||||
*
|
|
||||||
* @param csv the report location
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation csv(Path csv) {
|
|
||||||
return csv(csv.toFile());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the file to write execution data to.
|
* Sets the file to write execution data to.
|
||||||
*
|
|
||||||
* @param destFile the file
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
*/
|
||||||
public JacocoReportOperation destFile(File destFile) {
|
public JacocoReportOperation destFile(File destFile) {
|
||||||
destFile_ = destFile;
|
this.destFile = destFile;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the file to write execution data to.
|
|
||||||
*
|
|
||||||
* @param destFile the file
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation destFile(String destFile) {
|
|
||||||
return destFile(new File(destFile));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the file to write execution data to.
|
|
||||||
*
|
|
||||||
* @param destFile the file
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation destFile(Path destFile) {
|
|
||||||
return destFile(destFile.toFile());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the source file encoding. The platform encoding is used by default.
|
* Sets the source file encoding. The platform encoding is used by default.
|
||||||
*
|
|
||||||
* @param encoding the encoding
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
*/
|
||||||
public JacocoReportOperation encoding(String encoding) {
|
public JacocoReportOperation encoding(String encoding) {
|
||||||
encoding_ = encoding;
|
this.encoding = encoding;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the locations of the JaCoCo *.exec files to read.
|
* Sets the locations of the JaCoCo *.exec files to read.
|
||||||
*
|
|
||||||
* @param execFiles the exec files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #execFiles(Collection)
|
|
||||||
*/
|
*/
|
||||||
public JacocoReportOperation execFiles(File... execFiles) {
|
public JacocoReportOperation execFiles(File... execFiles) {
|
||||||
return execFiles(List.of(execFiles));
|
this.execFiles.addAll(Arrays.stream(execFiles).toList());
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of the JaCoCo *.exec files to read.
|
|
||||||
*
|
|
||||||
* @param execFiles the exec files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #execFilesStrings(Collection)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation execFiles(String... execFiles) {
|
|
||||||
return execFilesStrings(List.of(execFiles));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of the JaCoCo *.exec files to read.
|
|
||||||
*
|
|
||||||
* @param execFiles the exec files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #execFilesPaths(Collection)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation execFiles(Path... execFiles) {
|
|
||||||
return execFilesPaths(List.of(execFiles));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of the JaCoCo *.exec files to read.
|
|
||||||
*
|
|
||||||
* @param execFiles the exec files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #execFiles(File...)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation execFiles(Collection<File> execFiles) {
|
|
||||||
execFiles_.addAll(execFiles);
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the locations of the JaCoCo *.exec files to read.
|
|
||||||
*
|
|
||||||
* @return the exec files
|
|
||||||
*/
|
|
||||||
public Collection<File> execFiles() {
|
|
||||||
return execFiles_;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of the JaCoCo *.exec files to read.
|
|
||||||
*
|
|
||||||
* @param execFiles the exec files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #execFiles(Path...)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation execFilesPaths(Collection<Path> execFiles) {
|
|
||||||
return execFiles(execFiles.stream().map(Path::toFile).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of the JaCoCo *.exec files to read.
|
|
||||||
*
|
|
||||||
* @param execFiles the exec files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #execFiles(String...)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation execFilesStrings(Collection<String> execFiles) {
|
|
||||||
return execFiles(execFiles.stream().map(File::new).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs the operation execution that can be wrapped by the {@code #executeOnce} call.
|
* Performs the operation execution that can be wrapped by the {@code #executeOnce} call.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void execute() throws Exception {
|
public void execute() throws IOException {
|
||||||
if ((project_ == null)) {
|
if ((project == null) && LOGGER.isLoggable(Level.SEVERE)) {
|
||||||
if (LOGGER.isLoggable(Level.SEVERE) && !silent()) {
|
LOGGER.severe("A project must be specified.");
|
||||||
LOGGER.severe("A project must be specified.");
|
} else {
|
||||||
}
|
var buildJacocoReportsDir = Path.of(project.buildDirectory().getPath(), "reports", "jacoco", "test").toFile();
|
||||||
throw new ExitStatusException(ExitStatusException.EXIT_FAILURE);
|
var buildJacocoExecDir = Path.of(project.buildDirectory().getPath(), "jacoco").toFile();
|
||||||
}
|
var buildJacocoExec = Path.of(buildJacocoExecDir.getPath(), "jacoco.exec").toFile();
|
||||||
|
|
||||||
var buildJacocoReportsDir = Path.of(project_.buildDirectory().getPath(), "reports", "jacoco", "test").toFile();
|
if (destFile == null) {
|
||||||
var buildJacocoExecDir = Path.of(project_.buildDirectory().getPath(), "jacoco").toFile();
|
destFile = Path.of(buildJacocoExecDir.getPath(), "jacoco.exec").toFile();
|
||||||
var buildJacocoExec = Path.of(buildJacocoExecDir.getPath(), "jacoco.exec").toFile();
|
|
||||||
|
|
||||||
if (destFile_ == null) {
|
|
||||||
destFile_ = buildJacocoExec;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (execFiles_.isEmpty()) {
|
|
||||||
var testOperation = project_.testOperation().fromProject(project_);
|
|
||||||
testOperation.javaOptions().javaAgent(Path.of(project_.libBldDirectory().getPath(),
|
|
||||||
"org.jacoco.agent-" + JaCoCo.VERSION.substring(0, JaCoCo.VERSION.lastIndexOf('.'))
|
|
||||||
+ "-runtime.jar").toFile(), "destfile=" + destFile_.getPath());
|
|
||||||
|
|
||||||
testOperation.execute();
|
|
||||||
|
|
||||||
if (LOGGER.isLoggable(Level.INFO) && !silent()) {
|
|
||||||
LOGGER.log(Level.INFO, "Execution Data: {0}", destFile_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buildJacocoExec.exists()) {
|
if (execFiles.isEmpty()) {
|
||||||
execFiles_.add(buildJacocoExec);
|
// project.testOperation().fromProject(project).javaOptions().javaAgent(
|
||||||
|
// Path.of(project.libBldDirectory().getPath(), "org.jacoco.agent-"
|
||||||
|
// + JaCoCo.VERSION.substring(0, JaCoCo.VERSION.lastIndexOf('.')) + "-runtime.jar").toFile(),
|
||||||
|
// "destfile=" + destFile.getPath());
|
||||||
|
project.testOperation().fromProject(project).javaOptions().add("-javaagent:" +
|
||||||
|
Path.of(project.libBldDirectory().getPath(), "org.jacoco.agent-"
|
||||||
|
+ JaCoCo.VERSION.substring(0, JaCoCo.VERSION.lastIndexOf('.')) + "-runtime.jar")
|
||||||
|
+ "=destfile=" + destFile.getPath());
|
||||||
|
try {
|
||||||
|
project.testOperation().execute();
|
||||||
|
} catch (InterruptedException | ExitStatusException e) {
|
||||||
|
throw new IOException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LOGGER.isLoggable(Level.INFO) && !quiet) {
|
||||||
|
LOGGER.log(Level.INFO, "Execution Data: {0}", destFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buildJacocoExec.exists()) {
|
||||||
|
execFiles.add(buildJacocoExec);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sourceFiles.isEmpty()) {
|
||||||
|
sourceFiles.add(project.srcMainJavaDirectory());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (classFiles.isEmpty()) {
|
||||||
|
classFiles.add(project.buildMainDirectory());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (html == null) {
|
||||||
|
html = new File(buildJacocoReportsDir, "html");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xml == null) {
|
||||||
|
xml = new File(buildJacocoReportsDir, "jacocoTestReport.xml");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (csv == null) {
|
||||||
|
csv = new File(buildJacocoReportsDir, "jacocoTestReport.csv");
|
||||||
|
}
|
||||||
|
|
||||||
|
//noinspection ResultOfMethodCallIgnored
|
||||||
|
buildJacocoReportsDir.mkdirs();
|
||||||
|
|
||||||
|
var loader = loadExecFiles();
|
||||||
|
var bundle = analyze(loader.getExecutionDataStore());
|
||||||
|
writeReports(bundle, loader);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sourceFiles_.isEmpty()) {
|
|
||||||
sourceFiles_.add(project_.srcMainJavaDirectory());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (classFiles_.isEmpty()) {
|
|
||||||
classFiles_.add(project_.buildMainDirectory());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (html_ == null) {
|
|
||||||
html_ = new File(buildJacocoReportsDir, "html");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (xml_ == null) {
|
|
||||||
xml_ = new File(buildJacocoReportsDir, "jacocoTestReport.xml");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (csv_ == null) {
|
|
||||||
csv_ = new File(buildJacocoReportsDir, "jacocoTestReport.csv");
|
|
||||||
}
|
|
||||||
|
|
||||||
//noinspection ResultOfMethodCallIgnored
|
|
||||||
buildJacocoReportsDir.mkdirs();
|
|
||||||
//noinspection ResultOfMethodCallIgnored
|
|
||||||
buildJacocoExecDir.mkdirs();
|
|
||||||
|
|
||||||
var loader = loadExecFiles();
|
|
||||||
var bundle = analyze(loader.getExecutionDataStore());
|
|
||||||
writeReports(bundle, loader);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configure the operation from a {@link BaseProject}.
|
* Configure the operation from a {@link BaseProject}.
|
||||||
*
|
|
||||||
* @param project the project
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
*/
|
||||||
public JacocoReportOperation fromProject(BaseProject project) {
|
public JacocoReportOperation fromProject(BaseProject project) {
|
||||||
project_ = project;
|
this.project = project;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the location of the HTML report.
|
* Sets the location of the HTML report.
|
||||||
*
|
|
||||||
* @param html the html
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
*/
|
||||||
public JacocoReportOperation html(File html) {
|
public JacocoReportOperation html(File html) {
|
||||||
html_ = html;
|
this.html = html;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the location of the HTML report.
|
|
||||||
*
|
|
||||||
* @param html the html
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation html(String html) {
|
|
||||||
return html(new File(html));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the location of the HTML report.
|
|
||||||
*
|
|
||||||
* @param html the html
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation html(Path html) {
|
|
||||||
return html(html.toFile());
|
|
||||||
}
|
|
||||||
|
|
||||||
private ExecFileLoader loadExecFiles() throws IOException {
|
private ExecFileLoader loadExecFiles() throws IOException {
|
||||||
var loader = new ExecFileLoader();
|
var loader = new ExecFileLoader();
|
||||||
if (execFiles_.isEmpty() && LOGGER.isLoggable(Level.WARNING) && !silent()) {
|
if (execFiles.isEmpty() && LOGGER.isLoggable(Level.WARNING) && !quiet) {
|
||||||
LOGGER.warning("No execution data files provided.");
|
LOGGER.warning("No execution data files provided.");
|
||||||
} else {
|
} else {
|
||||||
for (var f : execFiles_) {
|
for (var f : execFiles) {
|
||||||
if (LOGGER.isLoggable(Level.INFO) && !silent()) {
|
if (LOGGER.isLoggable(Level.INFO) && !quiet) {
|
||||||
LOGGER.log(Level.INFO, "Loading execution data: {0}",
|
LOGGER.log(Level.INFO, "Loading execution data: {0}",
|
||||||
f.getAbsolutePath());
|
f.getAbsolutePath());
|
||||||
}
|
}
|
||||||
|
@ -457,42 +252,36 @@ public class JacocoReportOperation extends AbstractOperation<JacocoReportOperati
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the name used for the report.
|
* Sets the name used for the report.
|
||||||
*
|
|
||||||
* @param name the name
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
*/
|
||||||
public JacocoReportOperation name(String name) {
|
public JacocoReportOperation name(String name) {
|
||||||
reportName_ = name;
|
this.name = name;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Suppresses all output.
|
* Suppresses all output.
|
||||||
*
|
|
||||||
* @param quiet {@code true} or {@code false}
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
*/
|
||||||
public JacocoReportOperation quiet(boolean quiet) {
|
public JacocoReportOperation quiet(boolean quiet) {
|
||||||
silent(quiet);
|
this.quiet = quiet;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IReportVisitor reportVisitor() throws IOException {
|
private IReportVisitor reportVisitor() throws IOException {
|
||||||
List<IReportVisitor> visitors = new ArrayList<>();
|
List<IReportVisitor> visitors = new ArrayList<>();
|
||||||
|
|
||||||
if (xml_ != null) {
|
if (xml != null) {
|
||||||
var formatter = new XMLFormatter();
|
var formatter = new XMLFormatter();
|
||||||
visitors.add(formatter.createVisitor(Files.newOutputStream(xml_.toPath())));
|
visitors.add(formatter.createVisitor(Files.newOutputStream(xml.toPath())));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (csv_ != null) {
|
if (csv != null) {
|
||||||
var formatter = new CSVFormatter();
|
var formatter = new CSVFormatter();
|
||||||
visitors.add(formatter.createVisitor(Files.newOutputStream(csv_.toPath())));
|
visitors.add(formatter.createVisitor(Files.newOutputStream(csv.toPath())));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (html_ != null) {
|
if (html != null) {
|
||||||
var formatter = new HTMLFormatter();
|
var formatter = new HTMLFormatter();
|
||||||
visitors.add(formatter.createVisitor(new FileMultiReportOutput(html_)));
|
visitors.add(formatter.createVisitor(new FileMultiReportOutput(html)));
|
||||||
}
|
}
|
||||||
|
|
||||||
return new MultiReportVisitor(visitors);
|
return new MultiReportVisitor(visitors);
|
||||||
|
@ -500,103 +289,32 @@ public class JacocoReportOperation extends AbstractOperation<JacocoReportOperati
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the locations of the source files. (e.g., {@code src/main/java})
|
* Sets the locations of the source files. (e.g., {@code src/main/java})
|
||||||
*
|
**/
|
||||||
* @param sourceFiles the source files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #sourceFiles(Collection)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation sourceFiles(File... sourceFiles) {
|
public JacocoReportOperation sourceFiles(File... sourceFiles) {
|
||||||
return sourceFiles(List.of(sourceFiles));
|
this.sourceFiles.addAll(Arrays.stream(sourceFiles).toList());
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of the source files. (e.g., {@code src/main/java})
|
|
||||||
*
|
|
||||||
* @param sourceFiles the source files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #sourceFilesStrings(Collection)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation sourceFiles(String... sourceFiles) {
|
|
||||||
return sourceFilesStrings(List.of(sourceFiles));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of the source files. (e.g., {@code src/main/java})
|
|
||||||
*
|
|
||||||
* @param sourceFiles the source files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #sourceFilesPaths(Collection)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation sourceFiles(Path... sourceFiles) {
|
|
||||||
return sourceFilesPaths(List.of(sourceFiles));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of the source files. (e.g., {@code src/main/java})
|
|
||||||
*
|
|
||||||
* @param sourceFiles the source files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #sourceFiles(File...)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation sourceFiles(Collection<File> sourceFiles) {
|
|
||||||
sourceFiles_.addAll(sourceFiles);
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the locations of the source files.
|
|
||||||
*
|
|
||||||
* @return the source files
|
|
||||||
*/
|
|
||||||
public Collection<File> sourceFiles() {
|
|
||||||
return sourceFiles_;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of the source files. (e.g., {@code src/main/java})
|
|
||||||
*
|
|
||||||
* @param sourceFiles the source files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #sourceFiles(Path...)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation sourceFilesPaths(Collection<Path> sourceFiles) {
|
|
||||||
return sourceFiles(sourceFiles.stream().map(Path::toFile).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the locations of the source files. (e.g., {@code src/main/java})
|
|
||||||
*
|
|
||||||
* @param sourceFiles the source files
|
|
||||||
* @return this operation instance
|
|
||||||
* @see #sourceFiles(String...)
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation sourceFilesStrings(Collection<String> sourceFiles) {
|
|
||||||
return sourceFiles(sourceFiles.stream().map(File::new).toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
|
@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
|
||||||
private ISourceFileLocator sourceLocator() {
|
private ISourceFileLocator sourceLocator() {
|
||||||
var multi = new MultiSourceFileLocator(tabWidth_);
|
var multi = new MultiSourceFileLocator(tabWidth);
|
||||||
for (var f : sourceFiles_) {
|
for (var f : sourceFiles) {
|
||||||
multi.add(new DirectorySourceFileLocator(f, encoding_, tabWidth_));
|
multi.add(new DirectorySourceFileLocator(f, encoding, tabWidth));
|
||||||
}
|
}
|
||||||
return multi;
|
return multi;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the tab stop width for the source pages. Default is {@code 4}.
|
* Sets the tab stop width for the source pages. Default is {@code 4}.
|
||||||
*
|
|
||||||
* @param tabWidth the tab width
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
*/
|
||||||
public JacocoReportOperation tabWidth(int tabWidth) {
|
public JacocoReportOperation tabWidth(int tabWidth) {
|
||||||
tabWidth_ = tabWidth;
|
this.tabWidth = tabWidth;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeReports(IBundleCoverage bundle, ExecFileLoader loader)
|
private void writeReports(IBundleCoverage bundle, ExecFileLoader loader)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
if (LOGGER.isLoggable(Level.INFO) && !silent()) {
|
if (LOGGER.isLoggable(Level.INFO) && !quiet) {
|
||||||
LOGGER.log(Level.INFO, "Analyzing {0} classes.",
|
LOGGER.log(Level.INFO, "Analyzing {0} classes.",
|
||||||
bundle.getClassCounter().getTotalCount());
|
bundle.getClassCounter().getTotalCount());
|
||||||
}
|
}
|
||||||
|
@ -605,41 +323,18 @@ public class JacocoReportOperation extends AbstractOperation<JacocoReportOperati
|
||||||
loader.getExecutionDataStore().getContents());
|
loader.getExecutionDataStore().getContents());
|
||||||
visitor.visitBundle(bundle, sourceLocator());
|
visitor.visitBundle(bundle, sourceLocator());
|
||||||
visitor.visitEnd();
|
visitor.visitEnd();
|
||||||
if (LOGGER.isLoggable(Level.INFO) && !silent()) {
|
if (LOGGER.isLoggable(Level.INFO) && !quiet) {
|
||||||
LOGGER.log(Level.INFO, "XML Report: file://{0}", xml_.toURI().getPath());
|
LOGGER.log(Level.INFO, "XML Report: file://{0}", xml);
|
||||||
LOGGER.log(Level.INFO, "CSV Report: file://{0}", csv_.toURI().getPath());
|
LOGGER.log(Level.INFO, "CSV Report: file://{0}", csv);
|
||||||
LOGGER.log(Level.INFO, "HTML Report: file://{0}index.html", html_.toURI().getPath());
|
LOGGER.log(Level.INFO, "HTML Report: file://{0}/index.html", html);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the location of the XML report.
|
* Sets the location of the XML report.
|
||||||
*
|
|
||||||
* @param xml the report location
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
*/
|
||||||
public JacocoReportOperation xml(File xml) {
|
public JacocoReportOperation xml(File xml) {
|
||||||
xml_ = xml;
|
this.xml = xml;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the location of the XML report.
|
|
||||||
*
|
|
||||||
* @param xml the report location
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation xml(String xml) {
|
|
||||||
return xml(new File(xml));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the location of the XML report.
|
|
||||||
*
|
|
||||||
* @param xml the report location
|
|
||||||
* @return this operation instance
|
|
||||||
*/
|
|
||||||
public JacocoReportOperation xml(Path xml) {
|
|
||||||
return xml(xml.toFile());
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,40 +1,32 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2023-2025 the original author or authors.
|
* Copyright 2023 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package rife.bld.extension;
|
package rife.bld.extension;
|
||||||
|
|
||||||
import org.assertj.core.api.AutoCloseableSoftAssertions;
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.condition.EnabledOnOs;
|
|
||||||
import org.junit.jupiter.api.condition.OS;
|
|
||||||
import rife.bld.Project;
|
import rife.bld.Project;
|
||||||
import rife.bld.operations.exceptions.ExitStatusException;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatCode;
|
|
||||||
|
|
||||||
@SuppressWarnings("PMD.AvoidDuplicateLiterals")
|
|
||||||
class JacocoReportOperationTest {
|
class JacocoReportOperationTest {
|
||||||
final File csv;
|
final File csv;
|
||||||
final File html;
|
final File html;
|
||||||
|
@ -60,150 +52,30 @@ class JacocoReportOperationTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@EnabledOnOs(OS.LINUX)
|
void executeTest() throws IOException {
|
||||||
void checkAllParamsTest() throws IOException {
|
|
||||||
var supported = List.of("<execfiles>",
|
|
||||||
"--classfiles",
|
|
||||||
"--csv",
|
|
||||||
"--encoding",
|
|
||||||
"--html",
|
|
||||||
"--name",
|
|
||||||
"--quiet",
|
|
||||||
"--sourcefiles",
|
|
||||||
"--tabwith",
|
|
||||||
"--xml");
|
|
||||||
var args = Files.readAllLines(Paths.get("src", "test", "resources", "jacoco-args.txt"));
|
|
||||||
|
|
||||||
assertThat(args).isNotEmpty();
|
|
||||||
assertThat(supported).containsAll(args);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void executeFailureTest() {
|
|
||||||
var op = new JacocoReportOperation().fromProject(new Project());
|
|
||||||
assertThatCode(op::execute).isInstanceOf(ExitStatusException.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void executeTest() throws Exception {
|
|
||||||
newJacocoReportOperation().execute();
|
newJacocoReportOperation().execute();
|
||||||
|
|
||||||
assertThat(csv).exists();
|
assertThat(csv).exists();
|
||||||
assertThat(html).isDirectory();
|
assertThat(html).isDirectory();
|
||||||
assertThat(xml).exists();
|
assertThat(xml).exists();
|
||||||
try (var softly = new AutoCloseableSoftAssertions()) {
|
try (var lines = Files.lines(xml.toPath())) {
|
||||||
try (var lines = Files.lines(xml.toPath())) {
|
assertThat(lines.anyMatch(s ->
|
||||||
softly.assertThat(lines.anyMatch(s ->
|
s.contains("<counter type=\"INSTRUCTION\" missed=\"0\" covered=\"3\"/>"))).isTrue();
|
||||||
s.contains("<counter type=\"INSTRUCTION\" missed=\"0\" covered=\"3\"/>"))).isTrue();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
assertThat(Path.of(html.getPath(), "com.example", "Examples.java.html")).exists();
|
assertThat(Path.of(html.getPath(), "com.example", "Examples.java.html")).exists();
|
||||||
|
|
||||||
|
deleteOnExit(tempDir.toFile());
|
||||||
}
|
}
|
||||||
|
|
||||||
JacocoReportOperation newJacocoReportOperation() {
|
JacocoReportOperation newJacocoReportOperation() {
|
||||||
var op = new JacocoReportOperation()
|
var o = new JacocoReportOperation();
|
||||||
.fromProject(new Project())
|
o.fromProject(new Project());
|
||||||
.csv(csv)
|
o.csv(csv);
|
||||||
.html(html)
|
o.html(html);
|
||||||
.xml(xml)
|
o.xml(xml);
|
||||||
.classFiles(new File("src/test/resources/Examples.class"))
|
o.classFiles(new File("src/test/resources/Examples.class"));
|
||||||
.sourceFiles(new File("examples/src/main/java"))
|
o.sourceFiles(new File("examples/src/main/java"));
|
||||||
.execFiles(new File("src/test/resources/jacoco.exec"));
|
o.execFiles(new File("src/test/resources/jacoco.exec"));
|
||||||
|
return o;
|
||||||
deleteOnExit(tempDir.toFile());
|
|
||||||
|
|
||||||
return op;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testClassFiles() {
|
|
||||||
var foo = new File("foo");
|
|
||||||
var bar = new File("bar");
|
|
||||||
|
|
||||||
var op = new JacocoReportOperation().classFiles("foo", "bar");
|
|
||||||
assertThat(op.classFiles()).as("String...").contains(foo, bar);
|
|
||||||
op.classFiles().clear();
|
|
||||||
|
|
||||||
op = op.classFiles(foo, bar);
|
|
||||||
assertThat(op.classFiles()).as("File...").contains(foo, bar);
|
|
||||||
op.classFiles().clear();
|
|
||||||
|
|
||||||
op = op.classFiles(foo.toPath(), bar.toPath());
|
|
||||||
assertThat(op.classFiles()).as("Path...").contains(foo, bar);
|
|
||||||
op.classFiles().clear();
|
|
||||||
|
|
||||||
op = op.classFilesStrings(List.of("foo", "bar"));
|
|
||||||
assertThat(op.classFiles()).as("List(String...)").contains(foo, bar);
|
|
||||||
op.classFiles().clear();
|
|
||||||
|
|
||||||
op = op.classFiles(List.of(foo, bar));
|
|
||||||
assertThat(op.classFiles()).as("File...").contains(foo, bar);
|
|
||||||
op.classFiles().clear();
|
|
||||||
|
|
||||||
op = op.classFilesPaths(List.of(foo.toPath(), bar.toPath()));
|
|
||||||
assertThat(op.classFiles()).as("Path...").contains(foo, bar);
|
|
||||||
op.classFiles().clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testExecFiles() {
|
|
||||||
var foo = new File("foo");
|
|
||||||
var bar = new File("bar");
|
|
||||||
|
|
||||||
var op = new JacocoReportOperation().execFiles("foo", "bar");
|
|
||||||
assertThat(op.execFiles()).as("String...").contains(foo, bar);
|
|
||||||
op.execFiles().clear();
|
|
||||||
|
|
||||||
op = op.execFiles(foo, bar);
|
|
||||||
assertThat(op.execFiles()).as("File...").contains(foo, bar);
|
|
||||||
op.execFiles().clear();
|
|
||||||
|
|
||||||
op = op.execFiles(foo.toPath(), bar.toPath());
|
|
||||||
assertThat(op.execFiles()).as("Path...").contains(foo, bar);
|
|
||||||
op.execFiles().clear();
|
|
||||||
|
|
||||||
op = op.execFilesStrings(List.of("foo", "bar"));
|
|
||||||
assertThat(op.execFiles()).as("List(String...)").contains(foo, bar);
|
|
||||||
op.execFiles().clear();
|
|
||||||
|
|
||||||
op = op.execFiles(List.of(foo, bar));
|
|
||||||
assertThat(op.execFiles()).as("File...").contains(foo, bar);
|
|
||||||
op.execFiles().clear();
|
|
||||||
|
|
||||||
op = op.execFilesPaths(List.of(foo.toPath(), bar.toPath()));
|
|
||||||
assertThat(op.execFiles()).as("Path...").contains(foo, bar);
|
|
||||||
op.execFiles().clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testSourceFiles() {
|
|
||||||
var foo = new File("foo");
|
|
||||||
var bar = new File("bar");
|
|
||||||
|
|
||||||
var op = new JacocoReportOperation().sourceFiles("foo", "bar");
|
|
||||||
assertThat(op.sourceFiles()).as("String...").contains(foo, bar);
|
|
||||||
op.sourceFiles().clear();
|
|
||||||
|
|
||||||
op = op.sourceFiles(foo, bar);
|
|
||||||
assertThat(op.sourceFiles()).as("File...").contains(foo, bar);
|
|
||||||
op.sourceFiles().clear();
|
|
||||||
|
|
||||||
op = op.sourceFiles(foo.toPath(), bar.toPath());
|
|
||||||
assertThat(op.sourceFiles()).as("Path...").contains(foo, bar);
|
|
||||||
op.sourceFiles().clear();
|
|
||||||
|
|
||||||
op = op.sourceFilesStrings(List.of("foo", "bar"));
|
|
||||||
assertThat(op.sourceFiles()).as("List(String...)").contains(foo, bar);
|
|
||||||
op.sourceFiles().clear();
|
|
||||||
|
|
||||||
op = op.sourceFiles(List.of(foo, bar));
|
|
||||||
assertThat(op.sourceFiles()).as("File...").contains(foo, bar);
|
|
||||||
op.sourceFiles().clear();
|
|
||||||
|
|
||||||
op = op.sourceFilesPaths(List.of(foo.toPath(), bar.toPath()));
|
|
||||||
assertThat(op.sourceFiles()).as("Path...").contains(foo, bar);
|
|
||||||
op.sourceFiles().clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,10 +0,0 @@
|
||||||
<execfiles>
|
|
||||||
--classfiles
|
|
||||||
--csv
|
|
||||||
--encoding
|
|
||||||
--html
|
|
||||||
--name
|
|
||||||
--quiet
|
|
||||||
--sourcefiles
|
|
||||||
--tabwith
|
|
||||||
--xml
|
|
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue