private void findAllSuites(Collection<XmlSuite> suites, Set<XmlSuite> result) { for (XmlSuite s : suites) { result.add(s); for (XmlSuite xs : s.getChildSuites()) { findAllSuites(Arrays.asList(xs), result); } } }
private void findAllSuites(Collection<XmlSuite> suites, Set<XmlSuite> result) { for (XmlSuite s : suites) { result.add(s); for (XmlSuite xs : s.getChildSuites()) { findAllSuites(Collections.singletonList(xs), result); } } }
/** * A validator that runs through the list of suites and checks if each of the suites contains * any {@link XmlTest} with the same name. If found, then a {@link TestNGException} is raised. * * @param suites - The list of {@link XmlSuite} to validate. */ public static void validateIfSuitesContainDuplicateTests(List<XmlSuite> suites) { for (XmlSuite suite : suites) { ensureNoDuplicateTestsArePresent(suite); validateIfSuitesContainDuplicateTests(suite.getChildSuites()); } }
private static void initializeCommandLineSuitesGroups(XmlSuite s, boolean hasIncludedGroups, String[] m_includedGroups, boolean hasExcludedGroups, String[] m_excludedGroups) { if (hasIncludedGroups) { s.setIncludedGroups(Arrays.asList(m_includedGroups)); } if (hasExcludedGroups) { s.setExcludedGroups(Arrays.asList(m_excludedGroups)); } for (XmlSuite child : s.getChildSuites()) { initializeCommandLineSuitesGroups(child, hasIncludedGroups, m_includedGroups, hasExcludedGroups, m_excludedGroups); } } private void addReporter(Class<? extends IReporter> r) {
private static void adjustSuiteNamesToEnsureUniqueness(List<XmlSuite> suites, Set<String> names) { for (XmlSuite suite : suites) { String name = suite.getName(); int count = 0; String tmpName = name; while (names.contains(tmpName)) { tmpName = name + " (" + count++ + ")"; } if (count > 0) { suite.setName(tmpName); names.add(tmpName); } else { names.add(name); } adjustSuiteNamesToEnsureUniqueness(suite.getChildSuites(), names); } } }
/** * A validator that runs through the list of suites and checks if each of the suites contains any * {@link XmlTest} with the same name. If found, then a {@link TestNGException} is raised. * * @param suites - The list of {@link XmlSuite} to validate. */ public static void validateIfSuitesContainDuplicateTests(List<XmlSuite> suites) { for (XmlSuite suite : suites) { ensureNoDuplicateTestsArePresent(suite); validateIfSuitesContainDuplicateTests(suite.getChildSuites()); } }
private static void adjustSuiteNamesToEnsureUniqueness(List<XmlSuite> suites, Set<String> names) { for (XmlSuite suite : suites) { String name = suite.getName(); int count = 0; String tmpName = name; while (names.contains(tmpName)) { tmpName = name + " (" + count++ + ")"; } if (count > 0) { suite.setName(tmpName); names.add(tmpName); } else { names.add(name); } adjustSuiteNamesToEnsureUniqueness(suite.getChildSuites(), names); } } }
/** * Populates the dynamic graph with the reverse hierarchy of suites. Edges are * added pointing from child suite runners to parent suite runners, hence making * parent suite runners dependent on all the child suite runners * * @param suiteGraph dynamic graph representing the reverse hierarchy of SuiteRunners * @param suiteRunnerMap Map with XMLSuite as key and its respective SuiteRunner as value * @param xmlSuite XML Suite */ private void populateSuiteGraph(DynamicGraph<ISuite> suiteGraph /* OUT */, SuiteRunnerMap suiteRunnerMap, XmlSuite xmlSuite) { ISuite parentSuiteRunner = suiteRunnerMap.get(xmlSuite); if (xmlSuite.getChildSuites().isEmpty()) { suiteGraph.addNode(parentSuiteRunner); } else { for (XmlSuite childSuite : xmlSuite.getChildSuites()) { suiteGraph.addEdge(0, parentSuiteRunner, suiteRunnerMap.get(childSuite)); populateSuiteGraph(suiteGraph, suiteRunnerMap, childSuite); } } }
private static void initializeCommandLineSuitesGroups( XmlSuite s, boolean hasIncludedGroups, String[] m_includedGroups, boolean hasExcludedGroups, String[] m_excludedGroups) { if (hasIncludedGroups) { s.setIncludedGroups(Arrays.asList(m_includedGroups)); } if (hasExcludedGroups) { s.setExcludedGroups(Arrays.asList(m_excludedGroups)); } for (XmlSuite child : s.getChildSuites()) { initializeCommandLineSuitesGroups( child, hasIncludedGroups, m_includedGroups, hasExcludedGroups, m_excludedGroups); } }
/** * 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<String> 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); } }
private void parseSuiteFiles() { IPostProcessor processor = getProcessor(); for (XmlSuite s : m_suites) { if (s.isParsed()) { continue; } for (String suiteFile : s.getSuiteFiles()) { try { String fileNameToUse = s.getFileName(); if (fileNameToUse == null || fileNameToUse.trim().isEmpty()) { fileNameToUse = suiteFile; } Collection<XmlSuite> childSuites = Parser.parse(fileNameToUse, processor); for (XmlSuite cSuite : childSuites) { cSuite.setParentSuite(s); s.getChildSuites().add(cSuite); } } catch (IOException e) { e.printStackTrace(System.out); } } } }
/** * 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<String> 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); } }
/** * Recursively runs suites. Runs the children suites before running the parent * suite. This is done so that the results for parent suite can reflect the * combined results of the children suites. * * @param xmlSuite XML Suite to be executed * @param suiteRunnerMap Maps {@code XmlSuite}s to respective {@code ISuite} * @param verbose verbose level * @param defaultSuiteName default suite name */ private void runSuitesSequentially(XmlSuite xmlSuite, SuiteRunnerMap suiteRunnerMap, int verbose, String defaultSuiteName) { for (XmlSuite childSuite : xmlSuite.getChildSuites()) { runSuitesSequentially(childSuite, suiteRunnerMap, verbose, defaultSuiteName); } SuiteRunnerWorker srw = new SuiteRunnerWorker(suiteRunnerMap.get(xmlSuite), suiteRunnerMap, verbose, defaultSuiteName); srw.run(); }
for (XmlSuite childSuite : xmlSuite.getChildSuites()) { createSuiteRunners(suiteRunnerMap, childSuite);
/** * Recursively runs suites. Runs the children suites before running the parent suite. This is done * so that the results for parent suite can reflect the combined results of the children suites. * * @param xmlSuite XML Suite to be executed * @param suiteRunnerMap Maps {@code XmlSuite}s to respective {@code ISuite} * @param verbose verbose level * @param defaultSuiteName default suite name */ private void runSuitesSequentially( XmlSuite xmlSuite, SuiteRunnerMap suiteRunnerMap, int verbose, String defaultSuiteName) { for (XmlSuite childSuite : xmlSuite.getChildSuites()) { runSuitesSequentially(childSuite, suiteRunnerMap, verbose, defaultSuiteName); } SuiteRunnerWorker srw = new SuiteRunnerWorker( suiteRunnerMap.get(xmlSuite), suiteRunnerMap, verbose, defaultSuiteName); srw.run(); }
private void addListeners(XmlSuite s) { for (String listenerName : s.getListeners()) { Class<?> listenerClass = ClassHelper.forName(listenerName); // If specified listener does not exist, a TestNGException will be thrown if(listenerClass == null) { throw new TestNGException("Listener " + listenerName + " was not found in project's classpath"); } ITestNGListener listener = (ITestNGListener) ClassHelper.newInstance(listenerClass); addListener(listener); } // Add the child suite listeners List<XmlSuite> childSuites = s.getChildSuites(); for (XmlSuite c : childSuites) { addListeners(c); } }
private void addListeners(XmlSuite s) { for (String listenerName : s.getListeners()) { Class<?> listenerClass = ClassHelper.forName(listenerName); // If specified listener does not exist, a TestNGException will be thrown if (listenerClass == null) { throw new TestNGException( "Listener " + listenerName + " was not found in project's classpath"); } ITestNGListener listener = (ITestNGListener) ClassHelper.newInstance(listenerClass); addListener(listener); } // Add the child suite listeners List<XmlSuite> childSuites = s.getChildSuites(); for (XmlSuite c : childSuites) { addListeners(c); } }
private static void runTests(String suiteFile, int childSuitesCount, int suiteCounter, String... suiteNames) { List<XmlSuite> suites; try { suites = new Parser(suiteFile).parseToList(); } catch (IOException e) { throw new TestNGException(e); } assertEquals(suites.size(), 1); assertEquals(suites.get(0).getChildSuites().size(), childSuitesCount); TestNG testng = create(suites); SuiteCounter listener = new SuiteCounter(); testng.addListener((ITestNGListener) listener); testng.run(); assertEquals(listener.getCounter(), suiteCounter); assertThat(listener.getSuiteNames()).containsExactly(suiteNames); } }
if (!suite.getChildSuites().isEmpty()) { result.append("suite-files:\n"); toYaml(result, " ", suite.getSuiteFiles());
public void calculateResultCounts(XmlSuite xmlSuite, SuiteRunnerMap suiteRunnerMap) { ISuite iSuite = suiteRunnerMap.get(xmlSuite); if (iSuite != null) { Map<String, ISuiteResult> results = iSuite.getResults(); if (results != null) { Collection<ISuiteResult> tempSuiteResult = results.values(); for (ISuiteResult isr : tempSuiteResult) { ITestContext ctx = isr.getTestContext(); int skipped = ctx.getSkippedTests().size(); int failed = ctx.getFailedTests().size() + ctx.getFailedButWithinSuccessPercentageTests().size(); m_skipped += skipped; m_failed += failed; m_confFailures += ctx.getFailedConfigurations().size(); m_confSkips += ctx.getSkippedConfigurations().size(); m_total += ctx.getPassedTests().size() + failed + skipped; } for (XmlSuite childSuite : xmlSuite.getChildSuites()) { calculateResultCounts(childSuite, suiteRunnerMap); } } } } }