// 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.html;
import fitnesse.responders.run.TestPage;
import fitnesse.wiki.*;
import org.junit.Before;
import org.junit.Test;
import static util.RegexTestCase.*;
public class SetupTeardownAndLibraryIncluderTest {
private PageData pageData;
private PageCrawler crawler;
private WikiPage root;
private WikiPage testPage;
private WikiPage subPage;
private WikiPage subTestPage;
@Before
public void setUp() throws Exception {
root = InMemoryPage.makeRoot("RooT");
crawler = root.getPageCrawler();
testPage = addPage("TestPage", "!define TEST_SYSTEM {slim}\n"+"the content");
addPage("SetUp", "setup");
addPage("TearDown", "teardown");
addPage("SuiteSetUp", "suiteSetUp");
addPage("SuiteTearDown", "suiteTearDown");
subPage = crawler.addPage(testPage, PathParser.parse("SubPage"), "sub page");
crawler.addPage(testPage, PathParser.parse("ScenarioLibrary"), "scenario library 2");
subTestPage = crawler.addPage(subPage, PathParser.parse("TestSubPage"), "sub test page");
crawler.addPage(subPage, PathParser.parse("ScenarioLibrary"), "scenario library 3");
pageData = testPage.getData();
}
private WikiPage addPage(String pageName, String content) throws Exception {
return crawler.addPage(root, PathParser.parse(pageName), content);
}
@Test
public void testIncludeSetupTearDownOutsideOfSuite()
throws Exception {
SetupTeardownAndLibraryIncluder.includeInto(pageData);
String html = pageData.getHtml();
assertSubString(".SetUp", html);
assertSubString("setup", html);
assertSubString(".TearDown", html);
assertSubString("teardown", html);
assertSubString("the content", html);
assertSubString("class=\"collapsible closed\"", html);
assertNotSubString(".SuiteSetUp", html);
assertNotSubString("suiteSetUp", html);
assertNotSubString(".SuiteTearDown", html);
assertNotSubString("suitTearDown", html);
}
@Test
public void includeSetupsAndTeardownsAndLibrariesBelowASuite()
throws Exception {
WikiPage suitePage = testPage;
TestPage testPage = new TestPage(subTestPage);
SetupTeardownAndLibraryIncluder.includeSetupsTeardownsAndLibrariesBelowTheSuite(testPage, suitePage);
String html = testPage.getDecoratedData().getHtml();
assertSubString(".SetUp", html);
assertSubString("setup", html);
assertSubString(".TearDown", html);
assertSubString("teardown", html);
assertSubString("sub test page", html);
assertSubString("class=\"collapsible closed\"", html);
assertSubString("scenario library 3", html);
assertNotSubString(".SuiteSetUp", html);
assertNotSubString("suiteSetUp", html);
assertNotSubString(".SuiteTearDown", html);
assertNotSubString("suitTearDown", html);
assertNotSubString("scenario library 1", html);
assertNotSubString("scenario library 2", html);
}
@Test
public void testIncludeSetupTearDownInsideOfSuite() throws Exception {
SetupTeardownAndLibraryIncluder.includeInto(pageData, true);
String html = pageData.getHtml();
assertSubString(".SetUp", html);
assertSubString("setup", html);
assertSubString(".TearDown", html);
assertSubString("teardown", html);
assertSubString("the content", html);
assertSubString("class=\"collapsible closed\"", html);
assertSubString(".SuiteSetUp", html);
assertSubString("suiteSetUp", html);
assertSubString(".SuiteTearDown", html);
assertSubString("suiteTearDown", html);
assertEquals("SetUp occurs more than once", html.indexOf(" SetUp"), html.lastIndexOf(" SetUp"));
assertEquals("TearDown occurs more than once", html.indexOf(" TearDown"), html.lastIndexOf(" TearDown"));
}
@Test
public void includeScenarioLibraryBrother() throws Exception {
WikiPage slimTestPage = addPage("SlimTest", "!define TEST_SYSTEM {slim}\n");
pageData = slimTestPage.getData();
addPage("ScenarioLibrary", "scenario library");
SetupTeardownAndLibraryIncluder.includeInto(pageData);
String html = pageData.getHtml();
assertSubString("scenario library", html);
}
@Test
public void includeScenarioLibraryUnclesInOrder() throws Exception {
addPage("TestPage.TestPageChild", "child");
addPage("TestPage.ScenarioLibrary", "child library");
WikiPage nephew = addPage("TestPage.TestPageChild.TestPageGrandChild", "!define TEST_SYSTEM {slim}\n");
addPage("TestPage.TestPageChild.ScenarioLibrary", "grand child library");
pageData = nephew.getData();
SetupTeardownAndLibraryIncluder.includeInto(pageData);
String html = pageData.getHtml();
assertSubString("child library", html);
assertSubString("grand child library", html);
assertSubString("TestPage.ScenarioLibrary", html);
assertSubString("TestPage.TestPageChild.ScenarioLibrary", html);
assertSubString("Scenario Libraries", html);
assertTrue(html.indexOf("grand child library") > html.indexOf("child library"));
}
@Test
public void shouldNotContainScenarioLibrarySectionIfThereAreNone() throws Exception {
WikiPage slimTestPage = addPage("SlimTest", "!define TEST_SYSTEM {slim}\n");
pageData = slimTestPage.getData();
SetupTeardownAndLibraryIncluder.includeInto(pageData);
String html = pageData.getHtml();
assertNotSubString("Scenario Libraries", html);
}
@Test
public void shouldNotIncludeSenarioLibrariesIfNotSlimTest() throws Exception {
addPage("ScenarioLibrary", "scenario library");
WikiPage someTest = addPage("SomeTest", "some test");
PageData somePageData = someTest.getData();
SetupTeardownAndLibraryIncluder.includeInto(somePageData);
String html = somePageData.getHtml();
assertNotSubString("scenario library", html);
}
}