diff --git a/CHANGES.txt b/CHANGES.txt index e7b35d8d42..5126623e59 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,6 @@ Current 7.6.0 +Fixed: GITHUB-2709: Testnames not working together with suites in suite (Martin Aldrin) Fixed: GITHUB-2637: Upgrade to JDK11 as the minimum JDK requirements(Krishnan Mahadevan) 7.5 diff --git a/testng-core/src/main/java/org/testng/JarFileUtils.java b/testng-core/src/main/java/org/testng/JarFileUtils.java index c0bb86f5b0..5452dfae72 100644 --- a/testng-core/src/main/java/org/testng/JarFileUtils.java +++ b/testng-core/src/main/java/org/testng/JarFileUtils.java @@ -93,10 +93,7 @@ private boolean testngXmlExistsInJar(File jarFile, List classes) throws // If test names were specified, only run these test names if (testNames != null) { TestNamesMatcher testNamesMatcher = new TestNamesMatcher(suite, testNames); - List missMatchedTestname = testNamesMatcher.getMissMatchedTestNames(); - if (!missMatchedTestname.isEmpty()) { - throw new TestNGException("The test(s) <" + missMatchedTestname + "> cannot be found."); - } + testNamesMatcher.validateMissMatchedTestNames(); suites.addAll(testNamesMatcher.getSuitesMatchingTestNames()); } else { suites.add(suite); diff --git a/testng-core/src/main/java/org/testng/TestNG.java b/testng-core/src/main/java/org/testng/TestNG.java index 3cbebe07fd..4e538d8c5b 100644 --- a/testng-core/src/main/java/org/testng/TestNG.java +++ b/testng-core/src/main/java/org/testng/TestNG.java @@ -351,10 +351,7 @@ private Collection processCommandLineArgs(Collection allSuit } // If test names were specified, only run these test names TestNamesMatcher testNamesMatcher = new TestNamesMatcher(s, m_testNames); - List missMatchedTestname = testNamesMatcher.getMissMatchedTestNames(); - if (!missMatchedTestname.isEmpty()) { - throw new TestNGException("The test(s) <" + missMatchedTestname + "> cannot be found."); - } + testNamesMatcher.validateMissMatchedTestNames(); result.addAll(testNamesMatcher.getSuitesMatchingTestNames()); } @@ -420,7 +417,8 @@ public void initializeSuitesAndJarFile() { new JarFileUtils(getProcessor(), m_xmlPathInJar, m_testNames, m_parallelMode); Collection allSuites = utils.extractSuitesFrom(jarFile); - m_suites.addAll(processCommandLineArgs(allSuites)); + allSuites.forEach(this::processParallelModeCommandLineArgs); + m_suites.addAll(allSuites); } /** @param threadCount Define the number of threads in the thread pool. */ diff --git a/testng-core/src/main/java/org/testng/xml/internal/TestNamesMatcher.java b/testng-core/src/main/java/org/testng/xml/internal/TestNamesMatcher.java index f9abeca277..9d0967f854 100644 --- a/testng-core/src/main/java/org/testng/xml/internal/TestNamesMatcher.java +++ b/testng-core/src/main/java/org/testng/xml/internal/TestNamesMatcher.java @@ -43,11 +43,13 @@ public List getSuitesMatchingTestNames() { return cloneSuites; } - public List getMissMatchedTestNames() { + public void validateMissMatchedTestNames() { List tmpTestNames = Lists.newArrayList(); tmpTestNames.addAll(testNames); tmpTestNames.removeIf(matchedTestNames::contains); - return tmpTestNames; + if (!tmpTestNames.isEmpty()) { + throw new TestNGException("The test(s) <" + tmpTestNames + "> cannot be found in suite."); + } } public List getMatchedTests() { diff --git a/testng-core/src/test/java/org/testng/JarFileUtilsTest.java b/testng-core/src/test/java/org/testng/JarFileUtilsTest.java index a2fcb562aa..471356f752 100644 --- a/testng-core/src/test/java/org/testng/JarFileUtilsTest.java +++ b/testng-core/src/test/java/org/testng/JarFileUtilsTest.java @@ -55,7 +55,7 @@ public void testWithNoTestNames() throws MalformedURLException { @Test( expectedExceptions = TestNGException.class, expectedExceptionsMessageRegExp = - "\nThe test\\(s\\) <\\[testng-tests-child11\\]> cannot be found.") + "\nThe test\\(s\\) <\\[testng-tests-child11\\]> cannot be found in suite.") public void testWithInvalidTestNames() throws MalformedURLException { JarFileUtils utils = newJarFileUtils(Collections.singletonList("testng-tests-child11")); runTest( @@ -82,6 +82,23 @@ public void testWithInvalidXmlFile() throws MalformedURLException { "Jar suite"); } + /** + * Test to ensure that exception is not thrown. Ensure that GITHUB-2709 can not happen again. + * + * @throws MalformedURLException + */ + @Test + public void ensureThatExceptionAreNotThrown() throws MalformedURLException { + TestNG testNg = new TestNG(false); + List testNames = + Arrays.asList("testng-tests-child2", "testng-tests-child4", "testng-tests-child5", "dummy"); + testNg.setTestNames(testNames); + testNg.setXmlPathInJar(jar.getAbsolutePath()); + testNg.setTestJar(jar.getAbsolutePath()); + testNg.initializeSuitesAndJarFile(); + Assert.assertEquals(testNg.m_suites.size(), 1); + } + @Test public void testWithValidTestNamesFromMultiChildSuites() throws MalformedURLException { JarFileUtils utils =