org.testng.xml.internal.TestNamesMatcher Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of testng Show documentation
Show all versions of testng Show documentation
A testing framework for the JVM
package org.testng.xml.internal;
import java.util.Iterator;
import java.util.List;
import org.testng.TestNGException;
import org.testng.collections.Lists;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
/**
* The class to work with "-testnames"
*
*/
public final class TestNamesMatcher {
private final List cloneSuites = Lists.newArrayList();
private final List matchedTestNames = Lists.newArrayList();
private final List matchedTests = Lists.newArrayList();
private final List testNames;
public TestNamesMatcher(XmlSuite xmlSuite, List testNames){
this.testNames = testNames;
cloneIfContainsTestsWithNamesMatchingAny(xmlSuite, this.testNames);
}
/**
* Recursive search the given testNames from the current {@link XmlSuite} and its child suites.
*
* @param xmlSuite The {@link XmlSuite} to work with.
* @param testNames The list of testnames to iterate through
*/
private void cloneIfContainsTestsWithNamesMatchingAny(XmlSuite xmlSuite, List testNames) {
if (testNames == null || testNames.isEmpty()) {
throw new TestNGException("Please provide a valid list of names to check.");
}
//Start searching in the current suite.
addIfNotNull(cloneIfSuiteContainTestsWithNamesMatchingAny(xmlSuite));
//Search through all the child suites.
for (XmlSuite suite : xmlSuite.getChildSuites()) {
cloneIfContainsTestsWithNamesMatchingAny(suite, testNames);
}
}
public List getSuitesMatchingTestNames() {
return cloneSuites;
}
/**
* Getting miss-matched testNames
*/
public List getMissMatchedTestNames(){
List tmpTestNames = Lists.newArrayList();
tmpTestNames.addAll(testNames);
Iterator testNameIterator = tmpTestNames.iterator();
while (testNameIterator.hasNext()) {
String testName = testNameIterator.next();
if (matchedTestNames.contains(testName)) {
testNameIterator.remove();
}
}
return tmpTestNames;
}
public List getMatchedTests() {
return matchedTests;
}
private void addIfNotNull(XmlSuite xmlSuite) {
if (xmlSuite != null) {
cloneSuites.add(xmlSuite);
}
}
private XmlSuite cloneIfSuiteContainTestsWithNamesMatchingAny(XmlSuite suite) {
List tests = Lists.newLinkedList();
for (XmlTest xt : suite.getTests()) {
if (xt.nameMatchesAny(testNames)) {
tests.add(xt);
matchedTestNames.add(xt.getName());
matchedTests.add(xt);
}
}
if (tests.isEmpty()) {
return null;
}
return cleanClone(suite, tests);
}
private static XmlSuite cleanClone(XmlSuite xmlSuite, List tests) {
XmlSuite result = (XmlSuite) xmlSuite.clone();
result.getTests().clear();
result.getTests().addAll(tests);
return result;
}
}