Compare commits

...

4 commits

11 changed files with 91 additions and 59 deletions

View file

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

12
checkcliargs.sh Executable file
View file

@ -0,0 +1,12 @@
#!/bin/bash
MAIN="org.testng.TestNG"
TMPNEW=/tmp/checkcliargs-new
TMPOLD=/tmp/checkcliargs-old
java -cp "lib/test/*" $MAIN >$TMPNEW
java -cp "examples/lib/test/*" $MAIN >$TMPOLD
diff $TMPOLD $TMPNEW
rm -rf $TMPNEW $TMPOLD

View file

@ -3,18 +3,16 @@ package com.example;
import org.testng.Assert;
import org.testng.annotations.Test;
class ExampleTest {
public static void main(String[] args) {
new ExampleTest().verifyHello();
}
class ExamplesTest {
private final ExamplesLib example = new ExamplesLib();
@Test
void testFail() {
Assert.fail("failed");
void foo() {
Assert.assertNotEquals(example.getMessage(), "foo");
}
@Test
void verifyHello() {
Assert.assertTrue(true);
Assert.assertEquals(example.getMessage(), "Hello World!");
}
}

View file

@ -1,5 +1,5 @@
/*
* Copyright 2023 the original author or authors.
* Copyright 2023-2024 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.
@ -50,7 +50,7 @@ public class TestNgOperationBuild extends Project {
.include(dependency("org.testng", "testng", version(7, 9, 0)))
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 1)))
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 1)))
.include(dependency("org.assertj", "assertj-core", version(3, 24, 2)));
.include(dependency("org.assertj", "assertj-core", version(3, 25, 2)));
javadocOperation()
.javadocOptions()

View file

@ -1,5 +1,5 @@
/*
* Copyright 2023 the original author or authors.
* Copyright 2023-2024 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.
@ -561,6 +561,19 @@ public class TestNgOperation extends AbstractProcessOperation<TestNgOperation> {
return this;
}
/**
* Should TestNG use a global Shared ThreadPool (At suite level) for running data providers.
*
* @param shareThreadPoolForDataProviders {@code true} or {@code false}
* @return this operation instance
*/
public TestNgOperation shareThreadPoolForDataProviders(boolean shareThreadPoolForDataProviders) {
if (shareThreadPoolForDataProviders) {
options.put("-shareThreadPoolForDataProviders", String.valueOf(shareThreadPoolForDataProviders));
}
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
@ -845,6 +858,19 @@ public class TestNgOperation extends AbstractProcessOperation<TestNgOperation> {
return this;
}
/**
* Should TestNG use a global Shared ThreadPool (At suite level) for running regular and data driven tests.
*
* @param useGlobalThreadPool {@code true} or {@code false}
* @return this operation instance
*/
public TestNgOperation useGlobalThreadPool(boolean useGlobalThreadPool) {
if (useGlobalThreadPool) {
options.put("-useGlobalThreadPool", String.valueOf(useGlobalThreadPool));
}
return this;
}
/**
* Set the Level of verbosity.
*
@ -921,4 +947,4 @@ public class TestNgOperation extends AbstractProcessOperation<TestNgOperation> {
*/
CONTINUE
}
}
}

View file

@ -1,5 +1,5 @@
/*
* Copyright 2023 the original author or authors.
* Copyright 2023-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -16,22 +16,15 @@
package rife.bld.extension;
import org.testng.Assert;
import org.testng.annotations.Test;
/**
* Implements the TestNgSimpleTest class.
* Implements the TestNgExample class.
*
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
* @since 1.0
*/
class TestNgSimple2Test {
public static void main(String[] args) {
new TestNgSimple2Test().verifyHello();
}
@Test
void verifyHello() {
Assert.assertTrue(true);
@SuppressWarnings("PMD.TestClassWithoutTestCases")
class TestNgExample {
public String getMessage() {
return "Hello World!";
}
}

View file

@ -1,5 +1,5 @@
/*
* Copyright 2023 the original author or authors.
* Copyright 2023-2024 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.
@ -20,23 +20,21 @@ import org.testng.Assert;
import org.testng.annotations.Test;
/**
* Implements the TestNgSimpleTest class.
* Implements the TestNgExampleTest class.
*
* @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
* @since 1.0
*/
class TestNgSimpleTest {
public static void main(String[] args) {
new TestNgSimpleTest().verifyHello();
}
class TestNgExampleTest {
private final TestNgExample example = new TestNgExample();
@Test
void testFail() {
Assert.fail("failed");
void foo() {
Assert.assertEquals(example.getMessage(), "foo");
}
@Test
void verifyHello() {
Assert.assertTrue(true);
Assert.assertEquals(example.getMessage(), "Hello World!");
}
}

View file

@ -1,5 +1,5 @@
/*
* Copyright 2023 the original author or authors.
* Copyright 2023-2024 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.
@ -85,7 +85,7 @@ class TestNgOperationTest {
void testExecute() {
assertThatThrownBy(() ->
new TestNgOperation().fromProject(new Project())
.testClass("rife.bld.extension.TestNgSimpleTest")
.testClass("rife.bld.extension.TestNgExampleTest")
.execute())
.as("with testClass").isInstanceOf(ExitStatusException.class);
@ -97,8 +97,8 @@ class TestNgOperationTest {
assertThatCode(() ->
new TestNgOperation().fromProject(new Project())
.testClass("rife.bld.extension.TestNgSimpleTest")
.methods("rife.bld.extension.TestNgSimpleTest.verifyHello")
.testClass("rife.bld.extension.TestNgExampleTest")
.methods("rife.bld.extension.TestNgExampleTest.verifyHello")
.execute())
.as("with methods").doesNotThrowAnyException();
@ -110,14 +110,14 @@ class TestNgOperationTest {
assertThatCode(() ->
new TestNgOperation().fromProject(new Project())
.suites("src/test/resources/testng3.xml")
.suites("src/test/resources/testng2.xml")
.log(2)
.execute())
.as("suite 3").doesNotThrowAnyException();
.as("suite 2 - log ").doesNotThrowAnyException();
assertThatCode(() ->
new TestNgOperation().fromProject(new Project())
.suites("src/test/resources/testng3.xml")
.suites("src/test/resources/testng2.xml")
.testClasspath("lib/test/*", "build/main", "build/test")
.log(2)
.execute())
@ -125,7 +125,7 @@ class TestNgOperationTest {
assertThatCode(() ->
new TestNgOperation().fromProject(new Project())
.suites("src/test/resources/testng3.xml")
.suites("src/test/resources/testng2.xml")
.testClasspath(List.of("lib/test/*", "build/main", "build/test"))
.log(2)
.execute())
@ -315,6 +315,15 @@ class TestNgOperationTest {
assertThat(op.options.get("-testrunfactory")).isEqualTo(FOO);
}
@Test
void testShareThreadPoolForDataProviders() {
var op = new TestNgOperation().shareThreadPoolForDataProviders(true);
assertThat(op.options.get("-shareThreadPoolForDataProviders")).isEqualTo("true");
op = new TestNgOperation().shareThreadPoolForDataProviders(false);
assertThat(op.options.get("-shareThreadPoolForDataProviders")).isNull();
}
@Test
void testSourceDir() {
var op = new TestNgOperation().sourceDir(FOO, BAR);
@ -375,6 +384,15 @@ class TestNgOperationTest {
assertThat(op.options.get("-usedefaultlisteners")).isEqualTo("true");
}
@Test
void testUseGlobalThreadPool() {
var op = new TestNgOperation().useGlobalThreadPool(true);
assertThat(op.options.get("-useGlobalThreadPool")).isEqualTo("true");
op = new TestNgOperation().useGlobalThreadPool(false);
assertThat(op.options.get("-useGlobalThreadPool")).isNull();
}
@Test
void testVerbose() {
var op = new TestNgOperation().log(1);

View file

@ -2,7 +2,7 @@
<suite name="test suite 1" verbose="2">
<test name="simple test">
<classes>
<class name="rife.bld.extension.TestNgSimpleTest"/>
<class name="rife.bld.extension.TestNgExample"/>
</classes>
</test>
</suite>

View file

@ -2,9 +2,9 @@
<suite name="test suite 2" verbose="1">
<test name="exclude fail">
<classes>
<class name="rife.bld.extension.TestNgSimpleTest">
<class name="rife.bld.extension.TestNgExampleTest">
<methods>
<exclude name="testFail"/>
<exclude name="foo"/>
</methods>
</class>
</classes>

View file

@ -1,13 +0,0 @@
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="test suite 3">
<test name="test 2 classes">
<classes>
<class name="rife.bld.extension.TestNgSimpleTest">
<methods>
<exclude name="testFail"/>
</methods>
</class>
<class name="rife.bld.extension.TestNgSimple2Test"/>
</classes>
</test>
</suite>