package fitnesse.responders.run; import static junit.framework.Assert.*; import static org.mockito.Mockito.*; import org.junit.Before; import org.junit.Test; import util.TimeMeasurement; import fitnesse.wiki.WikiPageDummy; public class JavaFormatterTest { private final String nestedPageName = "ParentTest.ChildTest"; private final String suiteName="MySuite"; JavaFormatter jf; JavaFormatter.ResultsRepository mockResultsRepository; ResultsListener listener; @Before public void prepare(){ jf=new JavaFormatter(suiteName); mockResultsRepository=mock(JavaFormatter.ResultsRepository.class); jf.setResultsRepository(mockResultsRepository); listener=mock(ResultsListener.class); } @Test public void getFullPath_WalksUpWikiPageParentsAndBuildsFullPathToPage() throws Exception{ TestPage wp = buildNestedTestPage(); assertEquals(nestedPageName, jf.getFullPath(wp.getSourcePage())); } private TestPage buildNestedTestPage() throws Exception { WikiPageDummy wp=new WikiPageDummy("ChildTest",null); WikiPageDummy parent=new WikiPageDummy("ParentTest",null); wp.setParent(parent); parent.setParent(new WikiPageDummy("root")); return new TestPage(wp); } @Test public void newTestStarted_SwitchesResultRepositoryToCurrentTest() throws Exception{ TestPage wp=buildNestedTestPage(); TimeMeasurement timeMeasurement = new TimeMeasurement(); jf.newTestStarted(wp, timeMeasurement.start()); verify(mockResultsRepository).open(nestedPageName); } @Test public void testComplete_closesResultRepositoryAndAddsToTotalTestSummary() throws Exception{ jf.setTotalSummary(new TestSummary(1,2,3,4)); TimeMeasurement timeMeasurement = new TimeMeasurement().start(); jf.testComplete(buildNestedTestPage(), new TestSummary(5,6,7,8), timeMeasurement.stop()); assertEquals(new TestSummary(6,8,10,12),jf.getTotalSummary()); verify(mockResultsRepository).close(); } @Test public void writeSummary_WritesSummaryOfTestExecutions() throws Exception{ TimeMeasurement timeMeasurement = new TimeMeasurement().start(); jf.testComplete(buildNestedTestPage(), new TestSummary(5,6,7,8), timeMeasurement.stop()); WikiPageDummy secondPage=new WikiPageDummy("SecondPage", null); secondPage.setParent(new WikiPageDummy("root", null)); jf.testComplete(new TestPage(secondPage), new TestSummary(11,12,13,14), timeMeasurement.stop()); jf.writeSummary("SummaryPageName"); verify(mockResultsRepository).open("SummaryPageName"); verify(mockResultsRepository, times(1)).write(JavaFormatter.SUMMARY_HEADER); verify(mockResultsRepository, times(1)).write(jf.summaryRow(nestedPageName, new TestSummary(5,6,7,8))); verify(mockResultsRepository, times(1)).write(jf.summaryRow("SecondPage", new TestSummary(11,12,13,14))); verify(mockResultsRepository, times(1)).write(JavaFormatter.SUMMARY_FOOTER); } @Test public void testComplete_clones_TestSummary_Objects() throws Exception{ WikiPageDummy secondPage=new WikiPageDummy("SecondPage", null); secondPage.setParent(new WikiPageDummy("root", null)); TestSummary ts=new TestSummary(5,6,7,8); TimeMeasurement timeMeasurement = new TimeMeasurement().start(); jf.testComplete(buildNestedTestPage(), ts, timeMeasurement.stop()); ts.right=11; ts.wrong=12; ts.ignores=13; ts.exceptions=14; jf.testComplete(new TestPage(secondPage), ts, timeMeasurement.stop()); assertEquals(new TestSummary(5,6,7,8), jf.getTestSummary("ParentTest.ChildTest")); } @Test public void summaryRowFormatsTestOutputRows(){ assertEquals("pass, no errors or exceptions", "<tr class=\"pass\"><td><a href=\"TestName.html\">TestName</a></td><td>5</td><td>0</td><td>0</td></tr>", jf.summaryRow("TestName", new TestSummary(5,0,0,0))); assertEquals("red, 1 error ", "<tr class=\"fail\"><td><a href=\"TestName.html\">TestName</a></td><td>5</td><td>1</td><td>0</td></tr>", jf.summaryRow("TestName", new TestSummary(5,1,0,0))); assertEquals("error,exceptions", "<tr class=\"error\"><td><a href=\"TestName.html\">TestName</a></td><td>5</td><td>6</td><td>7</td></tr>", jf.summaryRow("TestName", new TestSummary(5,6,0,7))); } @Test public void testOutputChunk_forwardsWriteToResultRepository() throws Exception{ jf.testOutputChunk("Hey there!"); verify(mockResultsRepository).write("Hey there!"); } @Test public void getInstance_ReturnsTheSameObjectForTheSameTest(){ assertSame(JavaFormatter.getInstance("TestOne"),JavaFormatter.getInstance("TestOne")); assertNotSame(JavaFormatter.getInstance("TestOne"),JavaFormatter.getInstance("TestTwo")); } @Test public void allTestingComplete_writesSummaryIfMainPageWasntExecuted() throws Exception{ TimeMeasurement timeMeasurement = new TimeMeasurement().start(); jf.testComplete(buildNestedTestPage(), new TestSummary(5,6,7,8), timeMeasurement.stop()); jf.allTestingComplete(timeMeasurement); verify(mockResultsRepository).open(suiteName); } @Test public void allTestingComplete_doesntWriteSummaryIfMainPageWasExecuted() throws Exception{ jf=JavaFormatter.getInstance(nestedPageName); jf.setResultsRepository(mockResultsRepository); TimeMeasurement timeMeasurement = new TimeMeasurement().start(); jf.testComplete(buildNestedTestPage(), new TestSummary(5,6,7,8), timeMeasurement.stop()); jf.allTestingComplete(timeMeasurement); verify(mockResultsRepository,times(0)).open(nestedPageName); } @Test public void ifListenerIsSet_newTestStartedFiresTestStarted() throws Exception{ jf.setListener(listener); TestPage page=buildNestedTestPage(); TimeMeasurement timeMeasurement = new TimeMeasurement(); jf.newTestStarted(page, timeMeasurement.start()); verify(listener).newTestStarted(page, timeMeasurement); } @Test public void ifListenerIsSet_TestCompleteFiresTestComplete() throws Exception{ jf.setListener(listener); TestPage page=buildNestedTestPage(); TimeMeasurement timeMeasurement = new TimeMeasurement().start(); jf.testComplete(page, new TestSummary(1,2,3,4), timeMeasurement.stop()); verify(listener).testComplete(page, new TestSummary(1,2,3,4), timeMeasurement); } @Test public void ifListenerIsSet_AllTestingCompleteFiresAllTestingComplete() throws Exception{ jf.setListener(listener); TimeMeasurement totalTimeMeasurement = new TimeMeasurement().start().stop(); jf.allTestingComplete(totalTimeMeasurement); verify(listener).allTestingComplete(same(totalTimeMeasurement)); } @Test public void dropInstance_drops_test_results(){ JavaFormatter first=JavaFormatter.getInstance("TestName"); JavaFormatter.dropInstance("TestName"); JavaFormatter second=JavaFormatter.getInstance("TestName"); assertNotSame(first, second); } }