Compare commits

...

4 commits

11 changed files with 91 additions and 59 deletions

View file

@ -1,6 +1,6 @@
<component name="CopyrightManager"> <component name="CopyrightManager">
<copyright> <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" /> <option name="myName" value="Apache License" />
</copyright> </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.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
class ExampleTest { class ExamplesTest {
public static void main(String[] args) { private final ExamplesLib example = new ExamplesLib();
new ExampleTest().verifyHello();
}
@Test @Test
void testFail() { void foo() {
Assert.fail("failed"); Assert.assertNotEquals(example.getMessage(), "foo");
} }
@Test @Test
void verifyHello() { 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"); * 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.
@ -50,7 +50,7 @@ public class TestNgOperationBuild extends Project {
.include(dependency("org.testng", "testng", version(7, 9, 0))) .include(dependency("org.testng", "testng", version(7, 9, 0)))
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 1))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 1)))
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 1))) .include(dependency("org.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() javadocOperation()
.javadocOptions() .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"); * 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.
@ -561,6 +561,19 @@ public class TestNgOperation extends AbstractProcessOperation<TestNgOperation> {
return this; 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 * 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 * 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; 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. * Set the Level of verbosity.
* *
@ -921,4 +947,4 @@ public class TestNgOperation extends AbstractProcessOperation<TestNgOperation> {
*/ */
CONTINUE 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"); * 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,22 +16,15 @@
package rife.bld.extension; 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> * @author <a href="https://erik.thauvin.net/">Erik C. Thauvin</a>
* @since 1.0 * @since 1.0
*/ */
class TestNgSimple2Test { @SuppressWarnings("PMD.TestClassWithoutTestCases")
public static void main(String[] args) { class TestNgExample {
new TestNgSimple2Test().verifyHello(); public String getMessage() {
} return "Hello World!";
@Test
void verifyHello() {
Assert.assertTrue(true);
} }
} }

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"); * 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.
@ -20,23 +20,21 @@ import org.testng.Assert;
import org.testng.annotations.Test; import org.testng.annotations.Test;
/** /**
* Implements the TestNgSimpleTest class. * Implements the TestNgExampleTest class.
* *
* @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
*/ */
class TestNgSimpleTest { class TestNgExampleTest {
public static void main(String[] args) { private final TestNgExample example = new TestNgExample();
new TestNgSimpleTest().verifyHello();
}
@Test @Test
void testFail() { void foo() {
Assert.fail("failed"); Assert.assertEquals(example.getMessage(), "foo");
} }
@Test @Test
void verifyHello() { 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"); * 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.
@ -85,7 +85,7 @@ class TestNgOperationTest {
void testExecute() { void testExecute() {
assertThatThrownBy(() -> assertThatThrownBy(() ->
new TestNgOperation().fromProject(new Project()) new TestNgOperation().fromProject(new Project())
.testClass("rife.bld.extension.TestNgSimpleTest") .testClass("rife.bld.extension.TestNgExampleTest")
.execute()) .execute())
.as("with testClass").isInstanceOf(ExitStatusException.class); .as("with testClass").isInstanceOf(ExitStatusException.class);
@ -97,8 +97,8 @@ class TestNgOperationTest {
assertThatCode(() -> assertThatCode(() ->
new TestNgOperation().fromProject(new Project()) new TestNgOperation().fromProject(new Project())
.testClass("rife.bld.extension.TestNgSimpleTest") .testClass("rife.bld.extension.TestNgExampleTest")
.methods("rife.bld.extension.TestNgSimpleTest.verifyHello") .methods("rife.bld.extension.TestNgExampleTest.verifyHello")
.execute()) .execute())
.as("with methods").doesNotThrowAnyException(); .as("with methods").doesNotThrowAnyException();
@ -110,14 +110,14 @@ class TestNgOperationTest {
assertThatCode(() -> assertThatCode(() ->
new TestNgOperation().fromProject(new Project()) new TestNgOperation().fromProject(new Project())
.suites("src/test/resources/testng3.xml") .suites("src/test/resources/testng2.xml")
.log(2) .log(2)
.execute()) .execute())
.as("suite 3").doesNotThrowAnyException(); .as("suite 2 - log ").doesNotThrowAnyException();
assertThatCode(() -> assertThatCode(() ->
new TestNgOperation().fromProject(new Project()) new TestNgOperation().fromProject(new Project())
.suites("src/test/resources/testng3.xml") .suites("src/test/resources/testng2.xml")
.testClasspath("lib/test/*", "build/main", "build/test") .testClasspath("lib/test/*", "build/main", "build/test")
.log(2) .log(2)
.execute()) .execute())
@ -125,7 +125,7 @@ class TestNgOperationTest {
assertThatCode(() -> assertThatCode(() ->
new TestNgOperation().fromProject(new Project()) 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")) .testClasspath(List.of("lib/test/*", "build/main", "build/test"))
.log(2) .log(2)
.execute()) .execute())
@ -315,6 +315,15 @@ class TestNgOperationTest {
assertThat(op.options.get("-testrunfactory")).isEqualTo(FOO); 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 @Test
void testSourceDir() { void testSourceDir() {
var op = new TestNgOperation().sourceDir(FOO, BAR); var op = new TestNgOperation().sourceDir(FOO, BAR);
@ -375,6 +384,15 @@ class TestNgOperationTest {
assertThat(op.options.get("-usedefaultlisteners")).isEqualTo("true"); 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 @Test
void testVerbose() { void testVerbose() {
var op = new TestNgOperation().log(1); var op = new TestNgOperation().log(1);

View file

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

View file

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