blob: ae56dd6263cd3d2b104fd2d1eed6a0da1b46b784 [file] [log] [blame]
package test.methodinterceptors;
import org.testng.Assert;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
import org.testng.TestNG;
import org.testng.annotations.Test;
import org.testng.xml.Parser;
import org.testng.xml.XmlSuite;
import org.xml.sax.SAXException;
import test.SimpleBaseTest;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
public class MethodInterceptorTest extends SimpleBaseTest {
private String XML =
"<!DOCTYPE suite SYSTEM \"http://beust.com/testng/testng-1.0.dtd\" >" +
"" +
"<suite name=\"Single\" verbose=\"0\">" +
"" +
"<listeners>" +
" <listener class-name=\"test.methodinterceptors.NullMethodInterceptor\" />" +
"</listeners>" +
"" +
" <test name=\"Single\" >" +
" <classes>" +
" <class name=\"test.methodinterceptors.FooTest\" />" +
" </classes>" +
" </test>" +
"" +
"</suite>";
@Test
public void noMethodsShouldRun() {
TestNG tng = create();
tng.setTestClasses(new Class[] { FooTest.class });
testNullInterceptor(tng);
}
private void testNullInterceptor(TestNG tng) {
tng.setMethodInterceptor(new NullMethodInterceptor());
TestListenerAdapter tla = new TestListenerAdapter();
tng.addListener(tla);
tng.run();
Assert.assertEquals(tla.getPassedTests().size(), 0);
Assert.assertEquals(tla.getFailedTests().size(), 0);
Assert.assertEquals(tla.getSkippedTests().size(), 0);
}
private void testFast(boolean useInterceptor) {
TestNG tng = create();
tng.setTestClasses(new Class[] { FooTest.class });
if (useInterceptor) {
tng.setMethodInterceptor(new FastTestsFirstInterceptor());
}
TestListenerAdapter tla = new TestListenerAdapter();
// tng.setParallel("methods");
tng.addListener(tla);
tng.run();
Assert.assertEquals(tla.getPassedTests().size(), 3);
ITestResult first = tla.getPassedTests().get(0);
String method = "zzzfast";
if (useInterceptor) {
Assert.assertEquals(first.getMethod().getMethodName(), method);
} else {
Assert.assertNotSame(first.getMethod().getMethodName(), method);
}
}
@Test
public void fastShouldRunFirst() {
testFast(true /* use interceptor */);
}
@Test
public void fastShouldNotRunFirst() {
testFast(false /* don't use interceptor */);
}
@Test
public void nullMethodInterceptorWorksInTestngXml()
throws IOException, ParserConfigurationException, SAXException {
File f = File.createTempFile("testng-tests-", "");
f.deleteOnExit();
BufferedWriter bw = new BufferedWriter(new FileWriter(f));
bw.write(XML);
bw.close();
try {
List<XmlSuite> xmlSuites = new Parser(f.getAbsolutePath()).parseToList();
TestNG tng = create();
tng.setXmlSuites(xmlSuites);
testNullInterceptor(tng);
}
catch(Exception ex) {
ex.printStackTrace();
}
}
@Test(timeOut = 1000)
public void shouldNotLockUpWithInterceptorThatRemovesMethods() {
TestNG tng = create(LockUpInterceptorSampleTest.class);
tng.setParallel(XmlSuite.ParallelMode.METHODS);
tng.run();
}
}