From 7fed1422479c890bbb0badbf81aba7f4feb65468 Mon Sep 17 00:00:00 2001 From: aditya-qapitol <62279158+aditya-qapitol@users.noreply.github.com> Date: Wed, 3 Feb 2021 09:11:59 +0530 Subject: [PATCH] Issue #2469 (#2470) Fix for "Parameters added in XmlTest during AlterSuiteListener not available in SuiteListener" Closes #2469 --- CHANGES.txt | 1 + src/main/java/org/testng/xml/XmlTest.java | 4 +- .../listeners/AlterSuiteListenerTest.java | 80 ++++++++++++++++--- src/test/resources/testng.xml | 6 ++ 4 files changed, 80 insertions(+), 11 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 7696e50a02..bcab1e9c64 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,6 @@ Current Fixed: GITHUB-2467: XmlTest does not copy the xmlClasses during clone (C.V.Aditya) +Fixed: GITHUB-2469: Parameters added in XmlTest during AlterSuiteListener not available in SuiteListener (C.V.Aditya) Fixed: GITHUB-2296: Fix for assertEquals not working for sets as order is not guaranteed. (Prashant Maroti) Fixed: GITHUB-2465: Fix bux where Strings.join returns empty String Fixed: GITHUB-1632: throwing SkipException sets iTestResult status to Failure instead of Skip (Julien Herr & Krishnan Mahadevan) diff --git a/src/main/java/org/testng/xml/XmlTest.java b/src/main/java/org/testng/xml/XmlTest.java index 12e16c876b..250ef21edb 100644 --- a/src/main/java/org/testng/xml/XmlTest.java +++ b/src/main/java/org/testng/xml/XmlTest.java @@ -426,7 +426,9 @@ public Object clone() { result.setJUnit(isJUnit()); result.setParallel(getParallel()); result.setVerbose(getVerbose()); - result.setParameters(getLocalParameters()); + Map localParameters = new HashMap<>(); + localParameters.putAll(getLocalParameters()); + result.setParameters(localParameters); result.setXmlPackages(getXmlPackages()); result.setTimeOut(getTimeOut()); result.setXmlClasses(getXmlClasses()); diff --git a/src/test/java/test/listeners/AlterSuiteListenerTest.java b/src/test/java/test/listeners/AlterSuiteListenerTest.java index 438be8e7b2..b10bf1dfc0 100644 --- a/src/test/java/test/listeners/AlterSuiteListenerTest.java +++ b/src/test/java/test/listeners/AlterSuiteListenerTest.java @@ -1,15 +1,16 @@ package test.listeners; -import org.testng.Assert; -import org.testng.IAlterSuiteListener; -import org.testng.TestNG; +import org.testng.*; import org.testng.annotations.Test; +import org.testng.internal.collections.Pair; import org.testng.xml.XmlSuite; import org.testng.xml.XmlTest; import test.SimpleBaseTest; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Optional; public class AlterSuiteListenerTest extends SimpleBaseTest { @@ -17,35 +18,61 @@ public class AlterSuiteListenerTest extends SimpleBaseTest { @Test public void executionListenerWithXml() { - XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class, AlterSuiteNameListener.class.getName()); + XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class, AlterSuiteNameListener.class.getName()).second(); Assert.assertEquals(suite.getName(), AlterSuiteNameListener.class.getSimpleName()); } @Test public void executionListenerWithoutListener() { - XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class, null/*Donot add the listener*/); + XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class).second(); Assert.assertEquals(suite.getName(), ALTER_SUITE_LISTENER); } @Test public void executionListenerWithXml2() { - XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class, AlterXmlTestsInSuiteListener.class.getName()); + XmlSuite suite = runTest(AlterSuiteListener1SampleTest.class, AlterXmlTestsInSuiteListener.class.getName()).second(); Assert.assertEquals(suite.getTests().size(), 2); } + @Test(description = "GITHUB-2469") + public void executionListenerWithXml3() { + Pair retObjects = runTest(AlterSuiteListener1SampleTest.class, + AlterXmlTestWithParameterInSuiteListener.class.getName(), AlteredXmlSuiteReadListener.class.getName()); + TestNG tng = retObjects.first(); + XmlSuite suite = retObjects.second(); + Assert.assertEquals(suite.getTests().size(), 2); + List listeners = Optional.ofNullable(tng.getSuiteListeners()).orElse(new ArrayList<>()); + Assert.assertFalse(listeners.isEmpty()); + for (ISuiteListener iSuiteListener : + listeners) { + if (iSuiteListener instanceof AlteredXmlSuiteReadListener) { + AlteredXmlSuiteReadListener alteredXmlSuiteReadListener = (AlteredXmlSuiteReadListener) iSuiteListener; + XmlSuite xmlSuite = alteredXmlSuiteReadListener.currentSuiteOnStart.getXmlSuite(); + List tests = xmlSuite.getTests(); + int i = 1; + for (XmlTest xmlTest: + tests) { + Assert.assertEquals(xmlTest.getParameter("param"), String.valueOf(i)); + i++; + } + } + } + } - private XmlSuite runTest(Class listenerClass, String listenerName) { + private Pair runTest(Class listenerClass, String... listenerNames) { XmlSuite s = createXmlSuite(ALTER_SUITE_LISTENER); createXmlTest(s, "Test", listenerClass.getName()); - boolean addListener = (listenerName != null); - if (addListener) { + + for (String listenerName: + listenerNames) { s.addListener(listenerName); } TestNG tng = create(); tng.setXmlSuites(Arrays.asList(s)); tng.run(); - return s; + Pair returnObj = new Pair<>(tng, s); + return returnObj; } public static class AlterSuiteListener1SampleTest { @@ -78,4 +105,37 @@ public void alter(List suites) { } } + public static class AlterXmlTestWithParameterInSuiteListener implements IAlterSuiteListener { + + @Override + public void alter(List suites) { + XmlSuite suite = suites.get(0); + List tests = suite.getTests(); + XmlTest test = tests.get(0); + + List newXmlTests = new ArrayList<>(); + XmlTest newXmlTest = (XmlTest) test.clone(); + newXmlTest.setName("name_1"); + newXmlTest.addParameter("param", "1"); + newXmlTests.add(newXmlTest); + + newXmlTest = (XmlTest) test.clone(); + newXmlTest.setName("name_2"); + newXmlTest.addParameter("param", "2"); + newXmlTests.add(newXmlTest); + + suite.setTests(newXmlTests); + } + } + + public static class AlteredXmlSuiteReadListener implements ISuiteListener { + + public ISuite currentSuiteOnStart; + + @Override + public void onStart(ISuite suite) { + currentSuiteOnStart = suite; + } + } + } diff --git a/src/test/resources/testng.xml b/src/test/resources/testng.xml index ebd485ed3f..e5683fabf6 100644 --- a/src/test/resources/testng.xml +++ b/src/test/resources/testng.xml @@ -995,5 +995,11 @@ + + + + + +