Compare commits
32 commits
Author | SHA1 | Date | |
---|---|---|---|
f43b3e18d2 | |||
0f7a7cf090 | |||
9625db4b62 | |||
8d4e858035 | |||
f2b7863bb2 | |||
d95cb2990d | |||
b9b7b0fb44 | |||
98ea8a7812 | |||
4a0ad1aebe | |||
f12eb82f99 | |||
8e2a2fa2fd | |||
0133572c46 | |||
c72607ff65 | |||
69cf0da32a | |||
d41df03d08 | |||
e4c47afcfc | |||
8632c7525c | |||
69d20a0ed1 | |||
d59d109aa9 | |||
251c8abb6a | |||
61d32ca117 | |||
807ccffe0e | |||
1ff935aa7e | |||
0f5dae6cdc | |||
a46ad60a66 | |||
450c2df0f5 | |||
e2695625fd | |||
f2cf1b18bb | |||
fd950f223d | |||
c35b3cefcd | |||
4e44484157 | |||
994bc399d6 |
28 changed files with 325 additions and 145 deletions
18
.github/workflows/bld.yml
vendored
18
.github/workflows/bld.yml
vendored
|
@ -4,11 +4,13 @@ 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, 22 ]
|
java-version: [ 17, 21, 24 ]
|
||||||
|
kotlin-version: [ 1.9.25, 2.0.21, 2.1.20 ]
|
||||||
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout source repository
|
- name: Checkout source repository
|
||||||
|
@ -22,8 +24,16 @@ jobs:
|
||||||
distribution: "zulu"
|
distribution: "zulu"
|
||||||
java-version: ${{ matrix.java-version }}
|
java-version: ${{ matrix.java-version }}
|
||||||
|
|
||||||
|
- name: Download dependencies [examples]
|
||||||
|
working-directory: examples
|
||||||
|
run: ./bld download
|
||||||
|
|
||||||
|
- name: Run tests with JaCoCo [examples]
|
||||||
|
working-directory: examples
|
||||||
|
run: ./bld compile jacoco
|
||||||
|
|
||||||
- name: Download dependencies
|
- name: Download dependencies
|
||||||
run: ./bld download
|
run: ./bld download
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: ./bld compile test
|
run: ./bld compile test
|
4
.github/workflows/pages.yml
vendored
4
.github/workflows/pages.yml
vendored
|
@ -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@v1
|
uses: actions/upload-pages-artifact@v3
|
||||||
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@v1
|
uses: actions/deploy-pages@v4
|
||||||
|
|
6
.idea/bld.xml
generated
Normal file
6
.idea/bld.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="BldConfiguration">
|
||||||
|
<events />
|
||||||
|
</component>
|
||||||
|
</project>
|
4
.idea/copyright/Apache_License.xml
generated
4
.idea/copyright/Apache_License.xml
generated
|
@ -1,6 +1,6 @@
|
||||||
<component name="CopyrightManager">
|
<component name="CopyrightManager">
|
||||||
<copyright>
|
<copyright>
|
||||||
<option name="notice" value="Copyright 2023-Copyright &#36;today.yearamp;#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 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="myName" value="Apache License" />
|
<option name="myName" value="Apache License" />
|
||||||
</copyright>
|
</copyright>
|
||||||
</component>
|
</component>
|
13
.idea/icon.svg
generated
Normal file
13
.idea/icon.svg
generated
Normal 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 |
4
.idea/libraries/bld.xml
generated
4
.idea/libraries/bld.xml
generated
|
@ -2,12 +2,12 @@
|
||||||
<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.0.1.jar!/" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.0.1-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="false" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" 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="false" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" 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="false" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
|
@ -9,7 +9,7 @@
|
||||||
],
|
],
|
||||||
"java.configuration.updateBuildConfiguration": "automatic",
|
"java.configuration.updateBuildConfiguration": "automatic",
|
||||||
"java.project.referencedLibraries": [
|
"java.project.referencedLibraries": [
|
||||||
"${HOME}/.bld/dist/bld-2.0.1.jar",
|
"${HOME}/.bld/dist/bld-2.2.1.jar",
|
||||||
"lib/**/*.jar"
|
"lib/**/*.jar"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
14
README.md
14
README.md
|
@ -2,12 +2,20 @@
|
||||||
|
|
||||||
[](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-testng)
|
[](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-testng)
|
||||||
[](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-testng)
|
[](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-testng)
|
||||||
[](https://github.com/rife2/bld-testng/actions/workflows/bld.yml)
|
[](https://github.com/rife2/bld-testng/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-testng=com.uwyn.rife2:bld-testng
|
||||||
|
```
|
||||||
|
|
||||||
|
For more information, please refer to the [extensions](https://github.com/rife2/bld/wiki/Extensions) documentation.
|
||||||
|
|
||||||
|
## Test with TestNG
|
||||||
|
|
||||||
To run the tests with TestNG, add the following to your build file:
|
To run the tests with TestNG, add the following to your build file:
|
||||||
|
|
||||||
|
@ -34,5 +42,5 @@ Don't forget to add a TestNG `test` dependency to your build file, as it is not
|
||||||
|
|
||||||
```java
|
```java
|
||||||
repositories = List.of(MAVEN_CENTRAL);
|
repositories = List.of(MAVEN_CENTRAL);
|
||||||
scope(test).include(dependency("org.testng", "testng", version(7, 10, 2)));
|
scope(test).include(dependency("org.testng", "testng", version(7, 11, 0)));
|
||||||
```
|
```
|
||||||
|
|
|
@ -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">
|
||||||
|
|
6
examples/.idea/bld.xml
generated
Normal file
6
examples/.idea/bld.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="BldConfiguration">
|
||||||
|
<events />
|
||||||
|
</component>
|
||||||
|
</project>
|
4
examples/.idea/libraries/bld.xml
generated
4
examples/.idea/libraries/bld.xml
generated
|
@ -2,12 +2,12 @@
|
||||||
<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.0.1.jar!/" />
|
<root url="jar://$USER_HOME$/.bld/dist/bld-2.2.1.jar!/" />
|
||||||
</CLASSES>
|
</CLASSES>
|
||||||
<JAVADOC />
|
<JAVADOC />
|
||||||
<SOURCES>
|
<SOURCES>
|
||||||
<root url="file://$PROJECT_DIR$/lib/bld" />
|
<root url="file://$PROJECT_DIR$/lib/bld" />
|
||||||
<root url="jar://$USER_HOME$/.bld/dist/bld-2.0.1-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="false" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="false" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/compile" recursive="true" 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="false" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="false" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/runtime" recursive="true" 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="false" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" />
|
||||||
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" type="SOURCES" />
|
<jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="true" type="SOURCES" />
|
||||||
</library>
|
</library>
|
||||||
</component>
|
</component>
|
2
examples/.vscode/settings.json
vendored
2
examples/.vscode/settings.json
vendored
|
@ -10,7 +10,7 @@
|
||||||
],
|
],
|
||||||
"java.configuration.updateBuildConfiguration": "automatic",
|
"java.configuration.updateBuildConfiguration": "automatic",
|
||||||
"java.project.referencedLibraries": [
|
"java.project.referencedLibraries": [
|
||||||
"${HOME}/.bld/dist/bld-2.0.1.jar",
|
"${HOME}/.bld/dist/bld-2.2.1.jar",
|
||||||
"lib/**/*.jar"
|
"lib/**/*.jar"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
|
@ -1,8 +1,8 @@
|
||||||
bld.downloadExtensionJavadoc=false
|
bld.downloadExtensionJavadoc=false
|
||||||
bld.downloadExtensionSources=true
|
bld.downloadExtensionSources=true
|
||||||
bld.downloadLocation=
|
bld.downloadLocation=
|
||||||
bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.7
|
bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.10-SNAPSHOT
|
||||||
bld.extension-testng=com.uwyn.rife2:bld-testng:0.9.9
|
bld.extension-testng=com.uwyn.rife2:bld-testng:1.0.3-SNAPSHOT
|
||||||
bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
||||||
bld.sourceDirectories=
|
bld.sourceDirectories=
|
||||||
bld.version=2.0.1
|
bld.version=2.2.1
|
||||||
|
|
|
@ -6,7 +6,6 @@ import rife.bld.extension.JacocoReportOperation;
|
||||||
import rife.bld.extension.TestNgOperation;
|
import rife.bld.extension.TestNgOperation;
|
||||||
import rife.bld.operations.TestOperation;
|
import rife.bld.operations.TestOperation;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.ConsoleHandler;
|
import java.util.logging.ConsoleHandler;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
@ -17,7 +16,7 @@ import static rife.bld.dependencies.Scope.test;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Example build.
|
* Example build.
|
||||||
*
|
*
|
||||||
* <pre>{@code
|
* <pre>{@code
|
||||||
* ./bld compile test
|
* ./bld compile test
|
||||||
* ./bld compile jacoco
|
* ./bld compile jacoco
|
||||||
|
@ -36,7 +35,7 @@ public class ExamplesBuild extends BaseProject {
|
||||||
|
|
||||||
repositories = List.of(MAVEN_CENTRAL);
|
repositories = List.of(MAVEN_CENTRAL);
|
||||||
|
|
||||||
scope(test).include(dependency("org.testng", "testng", version(7, 10, 2)));
|
scope(test).include(dependency("org.testng", "testng", version(7, 11, 0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
Binary file not shown.
|
@ -1,8 +1,8 @@
|
||||||
bld.downloadExtensionJavadoc=false
|
bld.downloadExtensionJavadoc=false
|
||||||
bld.downloadExtensionSources=true
|
bld.downloadExtensionSources=true
|
||||||
bld.downloadLocation=
|
bld.downloadLocation=
|
||||||
bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.2
|
bld.extension-exec=com.uwyn.rife2:bld-exec:1.0.4
|
||||||
bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.4
|
bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.2.1
|
||||||
bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES
|
||||||
bld.sourceDirectories=
|
bld.sourceDirectories=
|
||||||
bld.version=2.0.1
|
bld.version=2.2.1
|
||||||
|
|
|
@ -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");
|
* 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.
|
||||||
|
@ -24,10 +24,7 @@ import rife.bld.publish.PublishScm;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static rife.bld.dependencies.Repository.MAVEN_CENTRAL;
|
import static rife.bld.dependencies.Repository.*;
|
||||||
import static rife.bld.dependencies.Repository.MAVEN_LOCAL;
|
|
||||||
import static rife.bld.dependencies.Repository.RIFE2_RELEASES;
|
|
||||||
import static rife.bld.dependencies.Repository.RIFE2_SNAPSHOTS;
|
|
||||||
import static rife.bld.dependencies.Scope.compile;
|
import static rife.bld.dependencies.Scope.compile;
|
||||||
import static rife.bld.dependencies.Scope.test;
|
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;
|
||||||
|
@ -36,22 +33,23 @@ public class TestNgOperationBuild extends Project {
|
||||||
public TestNgOperationBuild() {
|
public TestNgOperationBuild() {
|
||||||
pkg = "rife.bld.extension";
|
pkg = "rife.bld.extension";
|
||||||
name = "bld-testng";
|
name = "bld-testng";
|
||||||
version = version(0, 9, 9);
|
version = version(1, 0, 3, "SNAPSHOT");
|
||||||
|
|
||||||
javaRelease = 17;
|
javaRelease = 17;
|
||||||
|
|
||||||
downloadSources = true;
|
downloadSources = true;
|
||||||
autoDownloadPurge = true;
|
autoDownloadPurge = true;
|
||||||
|
|
||||||
repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS);
|
repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS);
|
||||||
|
|
||||||
scope(compile)
|
scope(compile)
|
||||||
.include(dependency("com.uwyn.rife2", "bld", version(2, 0, 1)));
|
.include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1)));
|
||||||
|
|
||||||
scope(test)
|
scope(test)
|
||||||
.include(dependency("org.testng", "testng", version(7, 10, 2)))
|
.include(dependency("org.testng", "testng", version(7, 11, 0)))
|
||||||
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 3)))
|
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1)))
|
||||||
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 3)))
|
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1)))
|
||||||
.include(dependency("org.assertj", "assertj-core", version(3, 26, 3)));
|
.include(dependency("org.assertj", "assertj-core", version(3, 27, 3)));
|
||||||
|
|
||||||
javadocOperation()
|
javadocOperation()
|
||||||
.javadocOptions()
|
.javadocOptions()
|
||||||
|
@ -62,28 +60,26 @@ public class TestNgOperationBuild extends Project {
|
||||||
|
|
||||||
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-testng")
|
.artifactId("bld-testng")
|
||||||
.description("bld Extension to execute tests with TestNG")
|
.description("bld Extension to execute tests with TestNG")
|
||||||
.url("https://github.com/rife2/bld-testng")
|
.url("https://github.com/rife2/bld-testng")
|
||||||
.developer(
|
.developer(new PublishDeveloper()
|
||||||
new PublishDeveloper()
|
.id("ethauvin")
|
||||||
.id("ethauvin")
|
.name("Erik C. Thauvin")
|
||||||
.name("Erik C. Thauvin")
|
.email("erik@thauvin.net")
|
||||||
.email("erik@thauvin.net")
|
.url("https://erik.thauvin.net/")
|
||||||
.url("https://erik.thauvin.net/")
|
|
||||||
)
|
)
|
||||||
.license(
|
.license(new PublishLicense()
|
||||||
new PublishLicense()
|
.name("The Apache License, Version 2.0")
|
||||||
.name("The Apache License, Version 2.0")
|
.url("https://www.apache.org/licenses/LICENSE-2.0.txt")
|
||||||
.url("https://www.apache.org/licenses/LICENSE-2.0.txt")
|
|
||||||
)
|
)
|
||||||
.scm(
|
.scm(new PublishScm()
|
||||||
new PublishScm()
|
.connection("scm:git:https://github.com/rife2/bld-testng.git")
|
||||||
.connection("scm:git:https://github.com/rife2/bld-testng.git")
|
.developerConnection("scm:git:git@github.com:rife2/bld-testng.git")
|
||||||
.developerConnection("scm:git:git@github.com:rife2/bld-testng.git")
|
.url("https://github.com/rife2/bld-testng")
|
||||||
.url("https://github.com/rife2/bld-testng")
|
|
||||||
)
|
)
|
||||||
.signKey(property("sign.key"))
|
.signKey(property("sign.key"))
|
||||||
.signPassphrase(property("sign.passphrase"));
|
.signPassphrase(property("sign.passphrase"));
|
||||||
|
@ -104,10 +100,13 @@ public class TestNgOperationBuild extends Project {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void test() throws Exception {
|
public void test() throws Exception {
|
||||||
new ExecOperation()
|
var os = System.getProperty("os.name");
|
||||||
.fromProject(this)
|
if (os != null && os.toLowerCase().contains("linux")) {
|
||||||
.command("scripts/cliargs.sh")
|
new ExecOperation()
|
||||||
.execute();
|
.fromProject(this)
|
||||||
|
.command("scripts/cliargs.sh")
|
||||||
|
.execute();
|
||||||
|
}
|
||||||
super.test();
|
super.test();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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");
|
* 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.
|
||||||
|
@ -75,6 +75,19 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String buildClassPath(String... path) {
|
||||||
|
var classpath = new StringBuilder();
|
||||||
|
for (var p : path) {
|
||||||
|
if (!p.isBlank()) {
|
||||||
|
if (!classpath.isEmpty()) {
|
||||||
|
classpath.append(File.pathSeparator);
|
||||||
|
}
|
||||||
|
classpath.append(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return classpath.toString();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This sets the default maximum number of threads to use for data providers when running tests in parallel.
|
* This sets the default maximum number of threads to use for data providers when running tests in parallel.
|
||||||
* It will only take effect if the parallel mode has been selected (for example,with the
|
* It will only take effect if the parallel mode has been selected (for example,with the
|
||||||
|
@ -118,6 +131,30 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The directory where the reports will be generated
|
||||||
|
*
|
||||||
|
* <p>Default is {@code build/test-output})</p>
|
||||||
|
*
|
||||||
|
* @param directoryPath the directory path
|
||||||
|
* @return this operation instance
|
||||||
|
*/
|
||||||
|
public TestNgOperation directory(File directoryPath) {
|
||||||
|
return directory(directoryPath.getAbsolutePath());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The directory where the reports will be generated
|
||||||
|
*
|
||||||
|
* <p>Default is {@code build/test-output})</p>
|
||||||
|
*
|
||||||
|
* @param directoryPath the directory path
|
||||||
|
* @return this operation instance
|
||||||
|
*/
|
||||||
|
public TestNgOperation directory(Path directoryPath) {
|
||||||
|
return directory(directoryPath.toFile());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The list of groups you want to be excluded from this run.
|
* The list of groups you want to be excluded from this run.
|
||||||
*
|
*
|
||||||
|
@ -126,8 +163,7 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
* @see #excludeGroups(Collection) #excludeGroups(Collection)
|
* @see #excludeGroups(Collection) #excludeGroups(Collection)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation excludeGroups(String... group) {
|
public TestNgOperation excludeGroups(String... group) {
|
||||||
options_.put("-excludegroups", String.join(",", Arrays.stream(group).filter(this::isNotBlank).toList()));
|
return excludeGroups(List.of(group));
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -179,11 +215,13 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
|
|
||||||
args.add("-cp");
|
args.add("-cp");
|
||||||
if (testClasspath_.isEmpty()) {
|
if (testClasspath_.isEmpty()) {
|
||||||
args.add(String.format("%s:%s:%s:%s", new File(project_.libTestDirectory(), "*"),
|
args.add(buildClassPath(joinClasspathJar(project_.testClasspathJars()),
|
||||||
new File(project_.libCompileDirectory(), "*"), project_.buildMainDirectory(),
|
joinClasspathJar(project_.compileClasspathJars()),
|
||||||
project_.buildTestDirectory()));
|
joinClasspathJar(project_.providedClasspathJars()),
|
||||||
|
project_.buildMainDirectory().getAbsolutePath(),
|
||||||
|
project_.buildTestDirectory().getAbsolutePath()));
|
||||||
} else {
|
} else {
|
||||||
args.add(String.join(":", testClasspath_));
|
args.add(String.join(File.pathSeparator, testClasspath_));
|
||||||
}
|
}
|
||||||
|
|
||||||
args.add("org.testng.TestNG");
|
args.add("org.testng.TestNG");
|
||||||
|
@ -201,7 +239,7 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
if (LOGGER.isLoggable(Level.SEVERE) && !silent()) {
|
if (LOGGER.isLoggable(Level.SEVERE) && !silent()) {
|
||||||
LOGGER.severe("An IO error occurred while accessing the default testng.xml file: "
|
LOGGER.severe("An IO error occurred while accessing the default testng.xml file: "
|
||||||
+ ioe.getMessage());
|
+ ioe.getMessage());
|
||||||
}
|
}
|
||||||
throw new RuntimeException(ioe);
|
throw new RuntimeException(ioe);
|
||||||
}
|
}
|
||||||
|
@ -285,8 +323,7 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
* @see #groups(Collection) #groups(Collection)
|
* @see #groups(Collection) #groups(Collection)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation groups(String... group) {
|
public TestNgOperation groups(String... group) {
|
||||||
options_.put("-groups", String.join(",", Arrays.stream(group).filter(this::isNotBlank).toList()));
|
return groups(List.of(group));
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -350,6 +387,14 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String joinClasspathJar(List<File> jars) {
|
||||||
|
if (!jars.isEmpty()) {
|
||||||
|
return String.join(File.pathSeparator, jars.stream().map(File::getAbsolutePath).toList());
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The list of {@code .class} files or list of class names implementing {@code ITestListener} or
|
* The list of {@code .class} files or list of class names implementing {@code ITestListener} or
|
||||||
* {@code ISuiteListener}
|
* {@code ISuiteListener}
|
||||||
|
@ -359,8 +404,7 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
* @see #listener(Collection) #listener(Collection)
|
* @see #listener(Collection) #listener(Collection)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation listener(String... listener) {
|
public TestNgOperation listener(String... listener) {
|
||||||
options_.put("-listener", String.join(",", Arrays.stream(listener).filter(this::isNotBlank).toList()));
|
return listener(List.of(listener));
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -423,9 +467,7 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
* @see #methodSelectors(Collection) #methodSelectors(Collection)
|
* @see #methodSelectors(Collection) #methodSelectors(Collection)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation methodSelectors(String... selector) {
|
public TestNgOperation methodSelectors(String... selector) {
|
||||||
options_.put("-methodselectors",
|
return methodSelectors(List.of(selector));
|
||||||
String.join(",", Arrays.stream(selector).filter(this::isNotBlank).toList()));
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -452,8 +494,7 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
* @see #methods(Collection) #methods(Collection)
|
* @see #methods(Collection) #methods(Collection)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation methods(String... method) {
|
public TestNgOperation methods(String... method) {
|
||||||
methods_.addAll(List.of(method));
|
return methods(List.of(method));
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -493,31 +534,24 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fully qualified class name that implements {@code org.testng.ITestObjectFactory} which can be used to create
|
* The list of {@code .class} files or class names implementing {@code ITestRunnerFactory}.
|
||||||
|
* <p>
|
||||||
|
* A fully qualified class name that implements {@code org.testng.ITestObjectFactory} which can be used to create
|
||||||
* test class and listener instances.
|
* test class and listener instances.
|
||||||
*
|
*
|
||||||
* @param objectFactory the object factory
|
* @param factory one or more factory
|
||||||
* @return this operation instance
|
|
||||||
*/
|
|
||||||
public TestNgOperation objectFactory(String objectFactory) {
|
|
||||||
options_.put("-objectfactory", objectFactory);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The list of {@code .class} files or class names implementing {@code ITestRunnerFactory}.
|
|
||||||
*
|
|
||||||
* @param factory one or more factories
|
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
* @see #objectFactory(Collection) #objectFactory(Collection)
|
* @see #objectFactory(Collection) #objectFactory(Collection)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation objectFactory(String... factory) {
|
public TestNgOperation objectFactory(String... factory) {
|
||||||
options_.put("-objectfactory", String.join(",", Arrays.stream(factory).filter(this::isNotBlank).toList()));
|
return objectFactory(List.of(factory));
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The list of {@code .class} files or class names implementing {@code ITestRunnerFactory}.
|
* The list of {@code .class} files or class names implementing {@code ITestRunnerFactory}.
|
||||||
|
* <p>
|
||||||
|
* A fully qualified class name that implements {@code org.testng.ITestObjectFactory} which can be used to create
|
||||||
|
* test class and listener instances.
|
||||||
*
|
*
|
||||||
* @param factory the list of factories
|
* @param factory the list of factories
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
|
@ -546,9 +580,7 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
* @see #overrideIncludedMethods(Collection) #overrideIncludedMethods(Collection)
|
* @see #overrideIncludedMethods(Collection) #overrideIncludedMethods(Collection)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation overrideIncludedMethods(String... method) {
|
public TestNgOperation overrideIncludedMethods(String... method) {
|
||||||
options_.put("-overrideincludedmethods",
|
return overrideIncludedMethods(List.of(method));
|
||||||
String.join(",", Arrays.stream(method).filter(this::isNotBlank).toList()));
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -576,8 +608,7 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
* @see #packages(Collection) #packages(Collection)
|
* @see #packages(Collection) #packages(Collection)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation packages(String... name) {
|
public TestNgOperation packages(String... name) {
|
||||||
packages_.addAll(Arrays.stream(name).filter(this::isNotBlank).toList());
|
return packages(List.of(name));
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -678,10 +709,49 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
*
|
*
|
||||||
* @param directory one or more directories
|
* @param directory one or more directories
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
* @see #sourceDir(String...) #sourceDir(String...)
|
* @see #sourceDir(Collection)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation sourceDir(String... directory) {
|
public TestNgOperation sourceDir(String... directory) {
|
||||||
options_.put("-sourcedir", String.join(";", Arrays.stream(directory).filter(this::isNotBlank).toList()));
|
return sourceDir(List.of(directory));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The directories where your javadoc annotated test sources are. This option is only necessary
|
||||||
|
* if you are using javadoc type annotations. (e.g. {@code "src/test"} or
|
||||||
|
* {@code "src/test/org/testng/eclipse-plugin", "src/test/org/testng/testng"}).
|
||||||
|
*
|
||||||
|
* @param directory one or more directories
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #sourceDirFiles(Collection)
|
||||||
|
*/
|
||||||
|
public TestNgOperation sourceDir(File... directory) {
|
||||||
|
return sourceDirFiles(List.of(directory));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The directories where your javadoc annotated test sources are. This option is only necessary
|
||||||
|
* if you are using javadoc type annotations. (e.g. {@code "src/test"} or
|
||||||
|
* {@code "src/test/org/testng/eclipse-plugin", "src/test/org/testng/testng"}).
|
||||||
|
*
|
||||||
|
* @param directory one or more directories
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #sourceDirPaths(Collection)
|
||||||
|
*/
|
||||||
|
public TestNgOperation sourceDir(Path... directory) {
|
||||||
|
return sourceDirPaths(List.of(directory));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The directories where your javadoc annotated test sources are. This option is only necessary
|
||||||
|
* if you are using javadoc type annotations. (e.g. {@code "src/test"} or
|
||||||
|
* {@code "src/test/org/testng/eclipse-plugin", "src/test/org/testng/testng"}).
|
||||||
|
*
|
||||||
|
* @param directory the list of directories
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #sourceDir(String...)
|
||||||
|
*/
|
||||||
|
public TestNgOperation sourceDir(Collection<String> directory) {
|
||||||
|
options_.put("-sourcedir", String.join(";", directory.stream().filter(this::isNotBlank).toList()));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -692,11 +762,23 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
*
|
*
|
||||||
* @param directory the list of directories
|
* @param directory the list of directories
|
||||||
* @return this operation instance
|
* @return this operation instance
|
||||||
* @see #sourceDir(String...) #sourceDir(String...)
|
* @see #sourceDir(File...)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation sourceDir(Collection<String> directory) {
|
public TestNgOperation sourceDirFiles(Collection<File> directory) {
|
||||||
options_.put("-sourcedir", String.join(";", directory.stream().filter(this::isNotBlank).toList()));
|
return sourceDir(directory.stream().map(File::getAbsolutePath).toList());
|
||||||
return this;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The directories where your javadoc annotated test sources are. This option is only necessary
|
||||||
|
* if you are using javadoc type annotations. (e.g. {@code "src/test"} or
|
||||||
|
* {@code "src/test/org/testng/eclipse-plugin", "src/test/org/testng/testng"}).
|
||||||
|
*
|
||||||
|
* @param directory the list of directories
|
||||||
|
* @return this operation instance
|
||||||
|
* @see #sourceDir(Path...)
|
||||||
|
*/
|
||||||
|
public TestNgOperation sourceDirPaths(Collection<Path> directory) {
|
||||||
|
return sourceDirFiles(directory.stream().map(Path::toFile).toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -708,9 +790,7 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
* @see #spiListenersToSkip(Collection) #spiListenersToSkip(Collection)
|
* @see #spiListenersToSkip(Collection) #spiListenersToSkip(Collection)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation spiListenersToSkip(String... listenerToSkip) {
|
public TestNgOperation spiListenersToSkip(String... listenerToSkip) {
|
||||||
options_.put("-spilistenerstoskip",
|
return spiListenersToSkip(List.of(listenerToSkip));
|
||||||
String.join(",", Arrays.stream(listenerToSkip).filter(this::isNotBlank).toList()));
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -765,8 +845,7 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
* @see #suites(Collection) #suites(Collection)
|
* @see #suites(Collection) #suites(Collection)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation suites(String... suite) {
|
public TestNgOperation suites(String... suite) {
|
||||||
suites_.addAll(Arrays.stream(suite).filter(this::isNotBlank).toList());
|
return suites(List.of(suite));
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -813,8 +892,7 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
* @see #testClass(Collection) #testClass(Collection)
|
* @see #testClass(Collection) #testClass(Collection)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation testClass(String... aClass) {
|
public TestNgOperation testClass(String... aClass) {
|
||||||
options_.put("-testclass", String.join(",", Arrays.stream(aClass).filter(this::isNotBlank).toList()));
|
return testClass(List.of(aClass));
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -839,8 +917,7 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
* @see #testClasspath(String...) #testClasspath(String...)
|
* @see #testClasspath(String...) #testClasspath(String...)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation testClasspath(String... entry) {
|
public TestNgOperation testClasspath(String... entry) {
|
||||||
testClasspath_.addAll(Arrays.stream(entry).filter(this::isNotBlank).toList());
|
return testClasspath(List.of(entry));
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -901,9 +978,7 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
* @see #testNames(Collection) #testNames(Collection)
|
* @see #testNames(Collection) #testNames(Collection)
|
||||||
*/
|
*/
|
||||||
public TestNgOperation testNames(String... name) {
|
public TestNgOperation testNames(String... name) {
|
||||||
options_.put("-testnames",
|
return testNames(List.of(name));
|
||||||
Arrays.stream(name).filter(this::isNotBlank).map(s -> '"' + s + '"').collect(Collectors.joining(",")));
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1004,10 +1079,10 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
var temp = tempFile();
|
var temp = tempFile();
|
||||||
try (var bufWriter = Files.newBufferedWriter(Paths.get(temp.getPath()))) {
|
try (var bufWriter = Files.newBufferedWriter(Paths.get(temp.getPath()))) {
|
||||||
bufWriter.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
|
bufWriter.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
|
||||||
"<!DOCTYPE suite SYSTEM \"https://testng.org/testng-1.0.dtd\">" +
|
"<!DOCTYPE suite SYSTEM \"https://testng.org/testng-1.0.dtd\">" +
|
||||||
"<suite name=\"bld Default Suite\" verbose=\"2\">" +
|
"<suite name=\"bld Default Suite\" verbose=\"2\">" +
|
||||||
"<test name=\"All Packages\">" +
|
"<test name=\"All Packages\">" +
|
||||||
"<packages>");
|
"<packages>");
|
||||||
for (var p : packages_) {
|
for (var p : packages_) {
|
||||||
bufWriter.write(String.format("<package name=\"%s\"/>", p));
|
bufWriter.write(String.format("<package name=\"%s\"/>", p));
|
||||||
}
|
}
|
||||||
|
@ -1031,6 +1106,30 @@ public class TestNgOperation extends TestOperation<TestNgOperation, List<String>
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This attribute should contain the path to a valid XML file inside the test jar
|
||||||
|
* (e.g. {@code "resources/testng.xml"}). The default is {@code testng.xml}, which means a file called
|
||||||
|
* {@code testng.xml} at the root of the jar file. This option will be ignored unless a test jar is specified.
|
||||||
|
*
|
||||||
|
* @param path the path
|
||||||
|
* @return this operation instance
|
||||||
|
*/
|
||||||
|
public TestNgOperation xmlPathInJar(File path) {
|
||||||
|
return xmlPathInJar(path.getAbsolutePath());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This attribute should contain the path to a valid XML file inside the test jar
|
||||||
|
* (e.g. {@code "resources/testng.xml"}). The default is {@code testng.xml}, which means a file called
|
||||||
|
* {@code testng.xml} at the root of the jar file. This option will be ignored unless a test jar is specified.
|
||||||
|
*
|
||||||
|
* @param path the path
|
||||||
|
* @return this operation instance
|
||||||
|
*/
|
||||||
|
public TestNgOperation xmlPathInJar(Path path) {
|
||||||
|
return xmlPathInJar(path.toFile());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parallel Mechanisms
|
* Parallel Mechanisms
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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");
|
* 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.
|
||||||
|
@ -22,8 +22,9 @@ package rife.bld.extension;
|
||||||
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("PMD.TestClassWithoutTestCases")
|
@SuppressWarnings({"PMD.TestClassWithoutTestCases", "unused"})
|
||||||
class TestNgExample {
|
class TestNgExample {
|
||||||
|
@SuppressWarnings("SameReturnValue")
|
||||||
public String getMessage() {
|
public String getMessage() {
|
||||||
return "Hello World!";
|
return "Hello World!";
|
||||||
}
|
}
|
||||||
|
|
|
@ -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");
|
* 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.
|
||||||
|
@ -25,6 +25,7 @@ import org.testng.annotations.Test;
|
||||||
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
|
||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
class TestNgExampleTest {
|
class TestNgExampleTest {
|
||||||
private final TestNgExample example = new TestNgExample();
|
private final TestNgExample example = new TestNgExample();
|
||||||
|
|
||||||
|
|
|
@ -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");
|
* 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.
|
||||||
|
@ -16,7 +16,10 @@
|
||||||
|
|
||||||
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.blueprints.BaseProjectBlueprint;
|
import rife.bld.blueprints.BaseProjectBlueprint;
|
||||||
import rife.bld.operations.exceptions.ExitStatusException;
|
import rife.bld.operations.exceptions.ExitStatusException;
|
||||||
|
@ -50,13 +53,14 @@ class TestNgOperationTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@EnabledOnOs(OS.LINUX)
|
||||||
void testCheckAllParameters() throws IOException {
|
void testCheckAllParameters() throws IOException {
|
||||||
var args = Files.readAllLines(Paths.get("src", "test", "resources", "testng-args.txt"));
|
var args = Files.readAllLines(Paths.get("src", "test", "resources", "testng-args.txt"));
|
||||||
|
|
||||||
assertThat(args).isNotEmpty();
|
assertThat(args).isNotEmpty();
|
||||||
|
|
||||||
var params = new TestNgOperation()
|
var params = new TestNgOperation()
|
||||||
.fromProject(new BaseProjectBlueprint(new File("examples"), "com.example", "Examples"))
|
.fromProject(new BaseProjectBlueprint(new File("examples"), "com.example", "examples", "Examples"))
|
||||||
.alwaysRunListeners(true)
|
.alwaysRunListeners(true)
|
||||||
.dataProviderThreadCount(1)
|
.dataProviderThreadCount(1)
|
||||||
.dependencyInjectorFactory("injectorfactory")
|
.dependencyInjectorFactory("injectorfactory")
|
||||||
|
@ -97,15 +101,17 @@ class TestNgOperationTest {
|
||||||
.xmlPathInJar("jarPath")
|
.xmlPathInJar("jarPath")
|
||||||
.executeConstructProcessCommandList();
|
.executeConstructProcessCommandList();
|
||||||
|
|
||||||
for (var p : args) {
|
try (var softly = new AutoCloseableSoftAssertions()) {
|
||||||
var found = false;
|
for (var p : args) {
|
||||||
for (var a : params) {
|
var found = false;
|
||||||
if (a.startsWith(p)) {
|
for (var a : params) {
|
||||||
found = true;
|
if (a.startsWith(p)) {
|
||||||
break;
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
softly.assertThat(found).as(p + " not found.").isTrue();
|
||||||
}
|
}
|
||||||
assertThat(found).as(p + " not found.").isTrue();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -140,8 +146,16 @@ class TestNgOperationTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testDirectory() {
|
void testDirectory() {
|
||||||
|
var foo = new File("FOO");
|
||||||
|
|
||||||
var op = new TestNgOperation().directory(FOO);
|
var op = new TestNgOperation().directory(FOO);
|
||||||
assertThat(op.options().get("-d")).isEqualTo(FOO);
|
assertThat(op.options().get("-d")).as("as string").isEqualTo(FOO);
|
||||||
|
|
||||||
|
op = new TestNgOperation().directory(foo);
|
||||||
|
assertThat(op.options().get("-d")).as("as file").isEqualTo(foo.getAbsolutePath());
|
||||||
|
|
||||||
|
op = new TestNgOperation().directory(foo.toPath());
|
||||||
|
assertThat(op.options().get("-d")).as("as path").isEqualTo(foo.getAbsolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -401,11 +415,28 @@ class TestNgOperationTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSourceDir() {
|
void testSourceDir() {
|
||||||
|
var foo = new File(FOO);
|
||||||
|
var bar = new File(BAR);
|
||||||
|
|
||||||
|
var foobar = String.format("%s;%s", FOO, BAR);
|
||||||
var op = new TestNgOperation().sourceDir(FOO, BAR);
|
var op = new TestNgOperation().sourceDir(FOO, BAR);
|
||||||
assertThat(op.options().get("-sourcedir")).isEqualTo(String.format("%s;%s", FOO, BAR));
|
assertThat(op.options().get("-sourcedir")).as("String...").isEqualTo(foobar);
|
||||||
|
|
||||||
op = new TestNgOperation().sourceDir(List.of(FOO, BAR));
|
op = new TestNgOperation().sourceDir(List.of(FOO, BAR));
|
||||||
assertThat(op.options().get("-sourcedir")).as("as list").isEqualTo(String.format("%s;%s", FOO, BAR));
|
assertThat(op.options().get("-sourcedir")).as("List(String...)").isEqualTo(foobar);
|
||||||
|
|
||||||
|
foobar = String.format("%s;%s", foo.getAbsolutePath(), bar.getAbsolutePath());
|
||||||
|
op = new TestNgOperation().sourceDir(foo, bar);
|
||||||
|
assertThat(op.options().get("-sourcedir")).as("File...").isEqualTo(foobar);
|
||||||
|
|
||||||
|
op = new TestNgOperation().sourceDirFiles(List.of(foo, bar));
|
||||||
|
assertThat(op.options().get("-sourcedir")).as("List(String...)").isEqualTo(foobar);
|
||||||
|
|
||||||
|
op = new TestNgOperation().sourceDir(foo.toPath(), bar.toPath());
|
||||||
|
assertThat(op.options().get("-sourcedir")).as("Path...").isEqualTo(foobar);
|
||||||
|
|
||||||
|
op = new TestNgOperation().sourceDirPaths(List.of(foo.toPath(), bar.toPath()));
|
||||||
|
assertThat(op.options().get("-sourcedir")).as("List(Path...)").isEqualTo(foobar);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -479,7 +510,14 @@ class TestNgOperationTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testXmlPathInJar() {
|
void testXmlPathInJar() {
|
||||||
|
var foo = new File(FOO);
|
||||||
var op = new TestNgOperation().xmlPathInJar(FOO);
|
var op = new TestNgOperation().xmlPathInJar(FOO);
|
||||||
assertThat(op.options().get("-xmlpathinjar")).isEqualTo(FOO);
|
assertThat(op.options().get("-xmlpathinjar")).as("as string").isEqualTo(FOO);
|
||||||
|
|
||||||
|
op = new TestNgOperation().xmlPathInJar(foo);
|
||||||
|
assertThat(op.options().get("-xmlpathinjar")).as("as file").isEqualTo(foo.getAbsolutePath());
|
||||||
|
|
||||||
|
op = new TestNgOperation().xmlPathInJar(foo.toPath());
|
||||||
|
assertThat(op.options().get("-xmlpathinjar")).as("as path").isEqualTo(foo.getAbsolutePath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue