// 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.wiki;
import static fitnesse.wiki.PageType.*;
import static fitnesse.wiki.PageData.*;
import java.util.List;
import util.RegexTestCase;
public class PageDataTest extends RegexTestCase {
public WikiPage page;
private WikiPage root;
private PageCrawler crawler;
public void setUp() throws Exception {
root = InMemoryPage.makeRoot("RooT");
crawler = root.getPageCrawler();
page = crawler.addPage(root, PathParser.parse("PagE"), "some content");
}
public void tearDown() throws Exception {
}
public void testVariablePreprocessing() throws Exception {
PageData d = new PageData(InMemoryPage.makeRoot("RooT"), "!define x {''italic''}\n${x}\n");
String preprocessedText = d.getContent();
assertHasRegexp("''italic''", preprocessedText);
}
public void testVariablesRenderedFirst() throws Exception {
String text = "!define x {''italics''}\n${x}";
WikiPage root = InMemoryPage.makeRoot("RooT");
WikiPage page = crawler.addPage(root, PathParser.parse("SomePage"), text);
String html = page.getData().getHtml();
assertHasRegexp("''italics''", html);
assertHasRegexp("<i>italics</i>", html);
}
public void testVariablesWithinVariablesAreResolved() throws Exception {
String text = "!define x {b}\n!define y (a${x}c)\n${y}";
WikiPage root = InMemoryPage.makeRoot("RooT");
WikiPage page = crawler.addPage(root, PathParser.parse("SomePage"), text);
String html = page.getData().getHtml();
assertHasRegexp("abc", html);
assertHasRegexp("variable defined: y=a\\$\\{x\\}c", html);
String variableContents = page.getData().getVariable("y");
assertEquals("abc", variableContents);
}
public void testThatSpecialCharsAreNotEscapedTwice() throws Exception {
PageData d = new PageData(new WikiPageDummy(), "<b>");
String html = d.getHtml();
assertEquals("<b>", html);
}
public void testLiteral() throws Exception {
WikiPage root = InMemoryPage.makeRoot("RooT");
WikiPage page = crawler.addPage(root, PathParser.parse("LiteralPage"), "!-literal-!");
String renderedContent = page.getData().getHtml();
assertHasRegexp("literal", renderedContent);
assertDoesntHaveRegexp("!-literal-!", renderedContent);
}
public void testClasspath() throws Exception {
WikiPage root = InMemoryPage.makeRoot("RooT");
WikiPage page = crawler.addPage(root, PathParser.parse("ClassPath"), "!path 123\n!path abc\n");
List<?> paths = page.getData().getClasspaths();
assertTrue(paths.contains("123"));
assertTrue(paths.contains("abc"));
}
public void testClasspathWithVariable() throws Exception {
WikiPage root = InMemoryPage.makeRoot("RooT");
WikiPage page = crawler.addPage(root, PathParser.parse("ClassPath"), "!define PATH {/my/path}\n!path ${PATH}.jar");
List<?> paths = page.getData().getClasspaths();
assertEquals("/my/path.jar", paths.get(0).toString());
PageData data = root.getData();
data.setContent("!define PATH {/my/path}\n");
root.commit(data);
page = crawler.addPage(root, PathParser.parse("ClassPath2"), "!path ${PATH}.jar");
paths = page.getData().getClasspaths();
assertEquals("/my/path.jar", paths.get(0).toString());
}
public void testClasspathWithVariableDefinedInIncludedPage() throws Exception {
WikiPage root = InMemoryPage.makeRoot("RooT");
crawler.addPage(root, PathParser.parse("VariablePage"), "!define PATH {/my/path}\n");
WikiPage page = crawler.addPage(root, PathParser.parse("ClassPath"), "!include VariablePage\n!path ${PATH}.jar");
List<?> paths = page.getData().getClasspaths();
assertEquals("/my/path.jar", paths.get(0).toString());
}
public void testVariableIgnoredInParentPreformatted() throws Exception { //--variables in parent preformatted blocks must not recognize !define widgets.
WikiPage root = InMemoryPage.makeRoot("RooT");
WikiPage parent = crawler.addPage(root, PathParser.parse("VariablePage"), "{{{\n!define SOMEVAR {A VALUE}\n}}}\n");
WikiPage child = crawler.addPage(parent, PathParser.parse("ChildPage"), "${SOMEVAR}\n");
String renderedContent = child.getData().getHtml();
assertHasRegexp("undefined variable", renderedContent);
}
public void testGetCrossReferences() throws Exception {
WikiPage root = InMemoryPage.makeRoot("RooT");
WikiPage page = crawler.addPage(root, PathParser.parse("PageName"), "!see XrefPage\r\n");
List<?> xrefs = page.getData().getXrefPages();
assertEquals("XrefPage", xrefs.get(0));
}
public void testThatExamplesAtEndOfNameSetsSuiteProperty() throws Exception {
WikiPage page = crawler.addPage(root, PathParser.parse("PageExamples"));
PageData data = new PageData(page);
assertTrue(data.hasAttribute(SUITE.toString()));
}
public void testThatExampleAtBeginningOfNameSetsTestProperty() throws Exception {
WikiPage page = crawler.addPage(root, PathParser.parse("ExamplePageExample"));
PageData data = new PageData(page);
assertTrue(data.hasAttribute(TEST.toString()));
}
public void testThatExampleAtEndOfNameSetsTestProperty() throws Exception {
WikiPage page = crawler.addPage(root, PathParser.parse("PageExample"));
PageData data = new PageData(page);
assertTrue(data.hasAttribute(TEST.toString()));
}
public void testThatSuiteAtBeginningOfNameSetsSuiteProperty() throws Exception {
WikiPage suitePage1 = crawler.addPage(root, PathParser.parse("SuitePage"));
PageData data = new PageData(suitePage1);
assertFalse(data.hasAttribute(TEST.toString()));
assertTrue(data.hasAttribute(SUITE.toString()));
}
public void testThatSuiteAtEndOfNameSetsSuiteProperty() throws Exception {
WikiPage suitePage2 = crawler.addPage(root, PathParser.parse("PageSuite"));
PageData data = new PageData(suitePage2);
assertFalse(data.hasAttribute(TEST.toString()));
assertTrue(data.hasAttribute(SUITE.toString()));
}
public void testThatTestAtBeginningOfNameSetsTestProperty() throws Exception {
WikiPage testPage1 = crawler.addPage(root, PathParser.parse("TestPage"));
PageData data = new PageData(testPage1);
assertTrue(data.hasAttribute(TEST.toString()));
assertFalse(data.hasAttribute(SUITE.toString()));
}
public void testThatTestAtEndOfNameSetsTestProperty() throws Exception {
WikiPage testPage2 = crawler.addPage(root, PathParser.parse("PageTest"));
PageData data = new PageData(testPage2);
assertTrue(data.hasAttribute(TEST.toString()));
assertFalse(data.hasAttribute(SUITE.toString()));
}
public void testDefaultAttributes() throws Exception {
WikiPage normalPage = crawler.addPage(root, PathParser.parse("NormalPage"));
WikiPage suitePage3 = crawler.addPage(root, PathParser.parse("TestPageSuite"));
WikiPage errorLogsPage = crawler.addPage(root, PathParser.parse("ErrorLogs.TestPage"));
WikiPage suiteSetupPage = crawler.addPage(root, PathParser.parse(SUITE_SETUP_NAME));
WikiPage suiteTearDownPage = crawler.addPage(root, PathParser.parse(SUITE_TEARDOWN_NAME));
PageData data = new PageData(normalPage);
assertTrue(data.hasAttribute(PropertyEDIT));
assertTrue(data.hasAttribute(PropertySEARCH));
assertTrue(data.hasAttribute(PropertyVERSIONS));
assertTrue(data.hasAttribute(PropertyFILES));
assertFalse(data.hasAttribute(TEST.toString()));
assertFalse(data.hasAttribute(SUITE.toString()));
data = new PageData(suitePage3);
assertFalse(data.hasAttribute(TEST.toString()));
assertTrue(data.hasAttribute(SUITE.toString()));
data = new PageData(errorLogsPage);
assertFalse(data.hasAttribute(TEST.toString()));
assertFalse(data.hasAttribute(SUITE.toString()));
data = new PageData(suiteSetupPage);
assertFalse(data.hasAttribute(SUITE.toString()));
data = new PageData(suiteTearDownPage);
assertFalse(data.hasAttribute(SUITE.toString()));
}
public void testAttributesAreTruelyCopiedInCopyConstructor() throws Exception {
PageData data = root.getData();
data.setAttribute(LAST_MODIFYING_USER, "Joe");
PageData newData = new PageData(data);
newData.setAttribute(LAST_MODIFYING_USER, "Jane");
assertEquals("Joe", data.getAttribute(LAST_MODIFYING_USER));
}
}