// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved. // Released under the terms of the CPL Common Public License version 1.0. package fitnesse.responders; import static org.junit.Assert.assertEquals; import org.junit.After; import org.junit.Before; import org.junit.Test; import util.StandardOutAndErrorRecorder; import fitnesse.http.ChunkedResponse; import fitnesse.http.MockChunkedDataProvider; import fitnesse.responders.run.SuiteResponder; import fitnesse.responders.run.TestResponder; import fitnesse.testutil.FitNesseUtil; import fitnesse.wiki.InMemoryPage; import fitnesse.wiki.PageData; import fitnesse.wiki.WikiImportProperty; import fitnesse.wiki.WikiPage; public class WikiImportTestEventListenerTest { private WikiImportTestEventListener eventListener; private MockTestResponder testResponder; private MockSuiteResponder suiteResponder; private WikiPage pageOne; private MockWikiImporterFactory importerFactory; private WikiPage childOne; private WikiPage childTwo; private StandardOutAndErrorRecorder standardOutAndErrorRecorder; @Before public void setUp() throws Exception { standardOutAndErrorRecorder = new StandardOutAndErrorRecorder(); WikiPage root = InMemoryPage.makeRoot("RooT"); pageOne = root.addChildPage("PageOne"); childOne = pageOne.addChildPage("ChildOne"); childTwo = pageOne.addChildPage("ChildTwo"); importerFactory = new MockWikiImporterFactory(); eventListener = new WikiImportTestEventListener(importerFactory); testResponder = new MockTestResponder(); suiteResponder = new MockSuiteResponder(); } @After public void tearDown() { standardOutAndErrorRecorder.stopRecording(false); } @Test public void testRunWithTestingOnePage() throws Exception { addImportPropertyToPage(pageOne, false, true); PageData data = pageOne.getData(); eventListener.notifyPreTest(testResponder, data); assertEquals(MockWikiImporter.mockContent, pageOne.getData().getContent()); assertEquals(MockWikiImporter.mockContent, data.getContent()); assertEquals("Updating imported content...done", sentMessages); } @Test public void testNoImportAnnouncementIfXmlFormat() throws Exception { testResponder.setXmlFormat(); addImportPropertyToPage(pageOne, false, true); PageData data = pageOne.getData(); eventListener.notifyPreTest(testResponder, data); assertEquals("", sentMessages); } @Test public void testRunWithTestingOnePageWithoutAutoUpdate() throws Exception { addImportPropertyToPage(pageOne, false, false); PageData data = pageOne.getData(); eventListener.notifyPreTest(testResponder, data); assertEquals("", pageOne.getData().getContent()); assertEquals("", data.getContent()); assertEquals("", sentMessages); } @Test public void testErrorOccured() throws Exception { importerFactory.mockWikiImporter.fail = true; addImportPropertyToPage(pageOne, false, true); PageData data = pageOne.getData(); eventListener.notifyPreTest(testResponder, data); assertEquals("", pageOne.getData().getContent()); assertEquals("", data.getContent()); assertEquals("Updating imported content...java.lang.Exception: blah", sentMessages); } @Test public void testRunWithSuiteFromRoot() throws Exception { addImportPropertyToPage(pageOne, true, true); PageData data = pageOne.getData(); eventListener.notifyPreTest(suiteResponder, data); assertEquals("", pageOne.getData().getContent()); assertEquals(MockWikiImporter.mockContent, childOne.getData().getContent()); assertEquals(MockWikiImporter.mockContent, childTwo.getData().getContent()); assertEquals("Updating imported content...done", sentMessages); } @Test public void testRunWithSuiteFromNonRoot() throws Exception { addImportPropertyToPage(pageOne, false, true); PageData data = pageOne.getData(); eventListener.notifyPreTest(suiteResponder, data); assertEquals(MockWikiImporter.mockContent, pageOne.getData().getContent()); assertEquals(MockWikiImporter.mockContent, childOne.getData().getContent()); assertEquals(MockWikiImporter.mockContent, childTwo.getData().getContent()); assertEquals("Updating imported content...done", sentMessages); } private void addImportPropertyToPage(WikiPage page, boolean isRoot, boolean autoUpdate) throws Exception { PageData data = page.getData(); String sourceUrl = FitNesseUtil.URL + "PageOne"; WikiImportProperty importProps = new WikiImportProperty(sourceUrl); importProps.setRoot(isRoot); importProps.setAutoUpdate(autoUpdate); importProps.addTo(data.getProperties()); pageOne.commit(data); } private String sentMessages = ""; private void AddMessage(String output) { sentMessages += output.replaceAll("<.*?>", ""); } private class MockTestResponder extends TestResponder { private MockTestResponder() { response = new ChunkedResponse("html", new MockChunkedDataProvider()); } public void addToResponse(String output) { AddMessage(output); } public void setXmlFormat() { response = new ChunkedResponse("xml", new MockChunkedDataProvider()); } } private class MockSuiteResponder extends SuiteResponder { private MockSuiteResponder() { response = new ChunkedResponse("html", new MockChunkedDataProvider()); } public void addToResponse(String output) { AddMessage(output); } } }