package uk.co.javahelp.maven.plugin.fitnesse.responders.run;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import java.util.List;
import org.htmlparser.tags.TableColumn;
import org.htmlparser.tags.TableHeader;
import org.htmlparser.tags.TableRow;
import org.htmlparser.tags.TableTag;
import org.htmlparser.util.NodeList;
import org.junit.Before;
import org.junit.Test;
import util.TimeMeasurement;
import fitnesse.responders.run.ResultsListener;
import fitnesse.testsystems.CompositeExecutionLog;
import fitnesse.testsystems.ExecutionResult;
import fitnesse.testsystems.TestPage;
import fitnesse.testsystems.TestSummary;
import fitnesse.testsystems.TestSystem;
import fitnesse.testsystems.slim.HtmlTable;
import fitnesse.testsystems.slim.SlimTestContextImpl;
import fitnesse.testsystems.slim.results.ExceptionResult;
import fitnesse.testsystems.slim.results.TestResult;
import fitnesse.testsystems.slim.tables.Assertion;
import fitnesse.testsystems.slim.tables.QueryTable;
import fitnesse.testsystems.slim.tables.SyntaxError;
import fitnesse.wiki.WikiPageDummy;
public class DelegatingResultsListenerTest {
private static final int DELEGATE_COUNT = 3;
private DelegatingResultsListener delegatingListener;
private ResultsListener[] delegates;
@Before
public void setUp() {
delegates = new ResultsListener[DELEGATE_COUNT];
for(int i = 0 ; i < DELEGATE_COUNT ; i++) {
delegates[i] = mock(ResultsListener.class);
}
delegatingListener = new DelegatingResultsListener(delegates);
}
@Test
public void testAllTestingComplete() throws Exception {
TimeMeasurement totalTimeMeasurement = new TimeMeasurement();
delegatingListener.allTestingComplete(totalTimeMeasurement);
for(int i = 0 ; i < DELEGATE_COUNT ; i++) {
verify(delegates[i], times(1)).allTestingComplete(totalTimeMeasurement);
}
}
@Test
public void testSetExecutionLogAndTrackingId() throws Exception {
String stopResponderId = "stopResponderId";
CompositeExecutionLog log = new CompositeExecutionLog(new WikiPageDummy());
delegatingListener.setExecutionLogAndTrackingId(stopResponderId, log);
for(int i = 0 ; i < DELEGATE_COUNT ; i++) {
verify(delegates[i], times(1)).setExecutionLogAndTrackingId(stopResponderId, log);
}
}
@Test
public void testAnnounceNumberTestsToRun() {
int testsToRun = 12345;
delegatingListener.announceNumberTestsToRun(testsToRun);
for(int i = 0 ; i < DELEGATE_COUNT ; i++) {
verify(delegates[i], times(1)).announceNumberTestsToRun(testsToRun);
}
}
@Test
public void testTestSystemStarted() throws Exception {
TestSystem testSystem = mock(TestSystem.class);
String testSystemName = "testSystemName";
String testRunner = "testRunner";
delegatingListener.testSystemStarted(testSystem, testSystemName, testRunner);
for(int i = 0 ; i < DELEGATE_COUNT ; i++) {
verify(delegates[i], times(1)).testSystemStarted(testSystem, testSystemName, testRunner);
}
}
@Test
public void testNewTestStarted() throws Exception {
TestPage test = new TestPage(new WikiPageDummy());
TimeMeasurement timeMeasurement = new TimeMeasurement();
delegatingListener.newTestStarted(test, timeMeasurement);
for(int i = 0 ; i < DELEGATE_COUNT ; i++) {
verify(delegates[i], times(1)).newTestStarted(test, timeMeasurement);
}
}
@Test
public void testTestOutputChunk() throws Exception {
String output = "output";
delegatingListener.testOutputChunk(output);
for(int i = 0 ; i < DELEGATE_COUNT ; i++) {
verify(delegates[i], times(1)).testOutputChunk(output);
}
}
@Test
public void testTestAssertionVerified() throws SyntaxError {
Assertion assertion = assertion();
TestResult testResult = new TestResult(ExecutionResult.PASS);
delegatingListener.testAssertionVerified(assertion, testResult);
for(int i = 0 ; i < DELEGATE_COUNT ; i++) {
verify(delegates[i], times(1)).testAssertionVerified(assertion, testResult);
}
}
@Test
public void testTestExceptionOccurred() throws Exception {
Assertion assertion = assertion();
ExceptionResult exceptionResult = new ExceptionResult("resultKey", "exceptionValue");
delegatingListener.testExceptionOccurred(assertion, exceptionResult);
for(int i = 0 ; i < DELEGATE_COUNT ; i++) {
verify(delegates[i], times(1)).testExceptionOccurred(assertion, exceptionResult);
}
}
@Test
public void testTestComplete() throws Exception {
TestPage test = new TestPage(new WikiPageDummy());
TestSummary testSummary = new TestSummary();
TimeMeasurement timeMeasurement = new TimeMeasurement();
delegatingListener.testComplete(test, testSummary, timeMeasurement);
for(int i = 0 ; i < DELEGATE_COUNT ; i++) {
verify(delegates[i], times(1)).testComplete(test, testSummary, timeMeasurement);
}
}
@Test
public void testErrorOccured() {
delegatingListener.errorOccured();
for(int i = 0 ; i < DELEGATE_COUNT ; i++) {
verify(delegates[i], times(1)).errorOccured();
}
}
private Assertion assertion() throws SyntaxError {
NodeList headerColumns = new NodeList();
headerColumns.add(new TableColumn());
TableHeader tableHeader = new TableHeader();
tableHeader.setChildren(headerColumns);
NodeList rowColumns = new NodeList();
rowColumns.add(new TableColumn());
TableRow tableRow = new TableRow();
tableRow.setChildren(rowColumns);
NodeList rows = new NodeList();
rows.add(tableHeader);
rows.add(tableRow);
TableTag tableTag = new TableTag();
tableTag.setChildren(rows);
List<Assertion> list = new QueryTable(new HtmlTable(tableTag), "id", new SlimTestContextImpl()).getAssertions();
return list.get(0);
}
}