package fitnesse.responders.run.formatters;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import fitnesse.responders.run.TestPage;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import util.Clock;
import util.DateAlteringClock;
import util.DateTimeUtil;
import util.TimeMeasurement;
import fitnesse.FitNesseContext;
import fitnesse.responders.run.TestSummary;
import fitnesse.responders.run.TestExecutionReport.TestResult;
import fitnesse.responders.run.formatters.XmlFormatter.WriterFactory;
import fitnesse.responders.testHistory.TestHistory;
import fitnesse.wiki.PageData;
import fitnesse.wiki.WikiPage;
import fitnesse.wiki.WikiPageDummy;
public class XmlFormatterTest {
private static final String TEST_TIME = "4/13/2009 15:21:43";
private DateAlteringClock clock;
@Before
public void setUp() throws ParseException {
clock = new DateAlteringClock(DateTimeUtil.getDateFromString(TEST_TIME)).freeze();
}
@After
public void tearDown() {
Clock.restoreDefaultClock();
}
@Test
public void makeFileName() throws Exception {
XmlFormatter formatter = new XmlFormatter(null, null, null);
TestSummary summary = new TestSummary(1, 2, 3, 4);
assertEquals(
"20090413152143_1_2_3_4.xml",
TestHistory.makeResultFileName(summary, clock.currentClockTimeInMillis()));
}
@Test
public void processTestResultsShouldBuildUpCurrentResultAndFinalSummary() throws Exception {
FitNesseContext context = mock(FitNesseContext.class);
TestPage page = new TestPage(new WikiPageDummy("name", "content"));
page.getData().setAttribute(PageData.PropertySUITES, "tag1");
WriterFactory writerFactory = mock(WriterFactory.class);
final TestResult testResult = new TestResult();
XmlFormatter formatter = new XmlFormatter(context , page.getSourcePage(), writerFactory) {
@Override
protected TestResult newTestResult() {
return testResult;
}
};
formatter.testOutputChunk("outputChunk");
TimeMeasurement timeMeasurement = new TimeMeasurement() {
public long elapsed() {
return 27;
}
}.start();
formatter.newTestStarted(page, timeMeasurement);
TestSummary summary = new TestSummary(9,8,7,6);
formatter.testComplete(page, summary, timeMeasurement);
assertThat(formatter.finalSummary, equalTo(summary));
assertThat(formatter.testResponse.results.size(), is(1));
assertThat(formatter.testResponse.results.get(0), is(testResult));
assertThat(testResult.startTime, is(timeMeasurement.startedAt()));
assertThat(testResult.content, is("outputChunk"));
assertThat(testResult.right, is("9"));
assertThat(testResult.wrong, is("8"));
assertThat(testResult.ignores, is("7"));
assertThat(testResult.exceptions, is("6"));
assertThat(testResult.runTimeInMillis, is("27"));
assertThat(testResult.relativePageName, is(page.getName()));
assertThat(testResult.tags, is("tag1"));
}
@Test
public void allTestingCompleteShouldSetTotalRunTime() throws Exception {
FitNesseContext context = mock(FitNesseContext.class);
WikiPage page = new WikiPageDummy("name", "content");
WriterFactory writerFactory = mock(WriterFactory.class);
XmlFormatter formatter = new XmlFormatter(context , page, writerFactory) {
@Override
protected void writeResults() {
}
};
TimeMeasurement totalTimeMeasurement = mock(TimeMeasurement.class);
when(totalTimeMeasurement.elapsed()).thenReturn(77L);
formatter.allTestingComplete(totalTimeMeasurement);
assertThat(formatter.testResponse.getTotalRunTimeInMillis(), is(77L));
}
}