001: // Copyright (C) 2003,2004,2005 by Object Mentor, Inc. All rights reserved.
002: // Released under the terms of the GNU General Public License version 2 or later.
003: package fitnesse.wikitext.widgets;
004:
005: import java.util.regex.Matcher;
006: import java.util.regex.Pattern;
007:
008: import junit.framework.TestCase;
009: import fitnesse.wiki.InMemoryPage;
010: import fitnesse.wiki.PageCrawler;
011: import fitnesse.wiki.PageData;
012: import fitnesse.wiki.PathParser;
013: import fitnesse.wiki.WikiPage;
014:
015: public class WikiWordWidgetTest extends TestCase {
016: private WikiPage root;
017:
018: private PageCrawler crawler;
019:
020: public void setUp() throws Exception {
021: root = InMemoryPage.makeRoot("RooT");
022: crawler = root.getPageCrawler();
023: }
024:
025: public void tearDown() throws Exception {
026: }
027:
028: public void testIsSingleWikiWord() throws Exception {
029: assertTrue(WikiWordWidget.isSingleWikiWord("WikiWord"));
030: assertFalse(WikiWordWidget.isSingleWikiWord("notWikiWord"));
031: assertFalse(WikiWordWidget
032: .isSingleWikiWord("NotSingle.WikiWord"));
033: assertTrue(WikiWordWidget
034: .isSingleWikiWord("ThisIsAnWikiWordNoReally"));
035: }
036:
037: public void testWikiWordRegexp() throws Exception {
038: checkWord(true, "WikiWord");
039: checkWord(true, "WordWordWord");
040: checkWord(false, "HelloDDouble");
041: checkWord(true, "RcM");
042: checkWord(false, "Hello");
043: checkWord(true, "WikiWordWithManyWords");
044: checkWord(true, "WidgetRoot.ChildPage");
045: checkWord(true, "GrandPa.FatheR.SoN");
046: checkWord(true, ".RootPage.ChildPage");
047: checkWord(false, "lowerCaseAtStart");
048: checkWord(true, "^SubPage");
049: checkWord(true, "^SubPage.SubPage");
050: checkWord(false, "RcMMdM");
051: checkWord(false, "WikiPage.");
052: }
053:
054: public void testWikiWordsWithSlashNotDot() throws Exception {
055: checkWord(true, "WikiPage/SubPage");
056: checkWord(true, "/WikiPage");
057: checkWord(false, "WikiPage/");
058: checkWord(true, "./WikiPage");
059: checkWord(true, "../WikiPage");
060: checkWord(true, "../../WikiPage");
061:
062: checkWord(false, "WikiWord/../WikiWord");
063: checkWord(false, "./../WikiWord");
064: checkWord(false, ".././WikiWord");
065: checkWord(false, "WikiWord/./WikiWord");
066: checkWord(false, "/../WikiWord");
067: checkWord(false, "/./WikiWord");
068: checkWord(false, "..");
069: checkWord(false, "../..");
070: }
071:
072: public void testWikiWordRegexpWithDigits() throws Exception {
073: checkWord(true, "TestPage1");
074: checkWord(true, "ParentPage1.SubPage5");
075: checkWord(true, "The123Page");
076: checkWord(false, "123Page");
077: checkWord(false, "Page123");
078: }
079:
080: public void testHtml() throws Exception {
081: WikiPage page = crawler.addPage(root, PathParser
082: .parse("PageOne"));
083: WikiWordWidget widget = new WikiWordWidget(
084: new WidgetRoot(page), "WikiWord");
085: assertEquals("WikiWord<a href=\"WikiWord?edit\">"
086: + WikiWordWidget.NONEXISTENT_PAGE_TOKEN + "</a>",
087: widget.render());
088: page = crawler.addPage(root, PathParser.parse("WikiWord"));
089: widget = new WikiWordWidget(new WidgetRoot(page), "WikiWord");
090: assertEquals("<a href=\"WikiWord\">WikiWord</a>", widget
091: .render());
092: }
093:
094: public void testSubPageWidget() throws Exception {
095: WikiPage root = InMemoryPage.makeRoot("root");
096: WikiPage super Page = crawler.addPage(root, PathParser
097: .parse("SuperPage"));
098: PageData data = super Page.getData();
099: data.setContent("^SubPage");
100: super Page.commit(data);
101: String renderedText = super Page.getData().getHtml();
102: assertEquals("^SubPage<a href=\"SuperPage.SubPage?edit\">"
103: + WikiWordWidget.NONEXISTENT_PAGE_TOKEN + "</a>",
104: renderedText);
105: crawler.addPage(super Page, PathParser.parse("SubPage"));
106: renderedText = super Page.getData().getHtml();
107: assertEquals("<a href=\"SuperPage.SubPage\">^SubPage</a>",
108: renderedText);
109: }
110:
111: private void checkWord(boolean expectedMatch, String word) {
112: Pattern p = Pattern.compile(WikiWordWidget.REGEXP,
113: Pattern.DOTALL | Pattern.MULTILINE);
114: Matcher match = p.matcher(word);
115: final boolean matches = match.find();
116: final boolean matchEquals = matches ? word.equals(match
117: .group(0)) : false;
118: boolean pass = (matches && matchEquals);
119: if (!expectedMatch)
120: pass = !pass;
121:
122: String failureMessage = word
123: + (matches ? (" found " + (matchEquals ? ""
124: : "but matched " + match.group(0)))
125: : " not found");
126: assertTrue(failureMessage, pass);
127: }
128:
129: public void testIsWikiWord() throws Exception {
130: assertEquals(true, WikiWordWidget.isWikiWord("HelloThere"));
131: assertEquals(false, WikiWordWidget
132: .isWikiWord("not.a.wiki.word"));
133: }
134:
135: public void testAsWikiText() throws Exception {
136: WikiWordWidget widget = new WikiWordWidget(new WidgetRoot(
137: crawler.addPage(root, PathParser.parse("SomePage"))),
138: "OldText");
139: assertEquals("OldText", widget.asWikiText());
140: widget.setText("NewText");
141: assertEquals("NewText", widget.asWikiText());
142: }
143:
144: public void testQualifiedReferenceToSubReference() throws Exception {
145: WikiPage myPage = crawler.addPage(root, PathParser
146: .parse("MyPage"));
147: crawler.addPage(myPage, PathParser.parse("SubPage"));
148: WikiWordWidget widget = new WikiWordWidget(new WidgetRoot(
149: myPage), "^SubPage");
150: assertEquals("^NewName", widget
151: .makeRenamedRelativeReference(".MyPage.NewName"));
152: }
153:
154: public void testQualifiedReferenceToRelativeReference()
155: throws Exception {
156: WikiPage myPage = crawler.addPage(root, PathParser
157: .parse("MyPage"));
158: crawler.addPage(root, PathParser.parse("MyBrother"));
159: WikiWordWidget widget = new WikiWordWidget(new WidgetRoot(
160: myPage), "MyBrother");
161: assertEquals("MyBrother", widget
162: .makeRenamedRelativeReference(".MyBrother"));
163:
164: WikiPage subPageOne = crawler.addPage(myPage, PathParser
165: .parse("SubPageOne"));
166: crawler.addPage(myPage, PathParser.parse("SubPageTwo"));
167: widget = new WikiWordWidget(new WidgetRoot(subPageOne),
168: "SubPageTwo");
169: assertEquals("SubPageTwo", widget
170: .makeRenamedRelativeReference(".MyPage.SubPageTwo"));
171: }
172:
173: public void testRefersTo() throws Exception {
174: assertTrue(WikiWordWidget.refersTo(".PageOne", ".PageOne"));
175: assertTrue(WikiWordWidget.refersTo(".PageOne.PageTwo",
176: ".PageOne"));
177: assertFalse(WikiWordWidget.refersTo(".PageOne.PageTwo",
178: ".PageOne.PageTw"));
179: }
180:
181: public void testRenameMovedPageIfReferenced1() throws Exception {
182: WikiPage page1 = crawler.addPage(root, PathParser
183: .parse("PageOne"));
184: WikiPage page2 = crawler.addPage(root, PathParser
185: .parse("PageTwo"));
186:
187: WikiWordWidget widget = new WikiWordWidget(
188: new WidgetRoot(page1), "PageTwo");
189: widget.renameMovedPageIfReferenced(page2, "PageOne");
190: assertEquals(".PageOne.PageTwo", widget.text);
191: }
192:
193: public void testRenameMovedPageIfReferenced2() throws Exception {
194: WikiPage page1 = crawler.addPage(root, PathParser
195: .parse("PageOne"));
196: WikiPage page2 = crawler.addPage(page1, PathParser
197: .parse("PageTwo"));
198:
199: WikiWordWidget widget = new WikiWordWidget(
200: new WidgetRoot(page1), "^PageTwo");
201: widget.renameMovedPageIfReferenced(page2, "");
202: assertEquals(".PageTwo", widget.text);
203: }
204:
205: // TODO -MDM- bug I descovered while trying to refactor.
206: public void testmakeRenamedRelativeReference() throws Exception {
207: crawler.addPage(root, PathParser.parse("FitNesse"));
208: crawler.addPage(root, PathParser
209: .parse("FitNesse.SuiteAcceptanceTests"));
210: WikiPage parentPage = crawler
211: .addPage(
212: root,
213: PathParser
214: .parse("FitNesse.SuiteAcceptanceTests.SuiteWikiPageResponderTests"));
215: WikiWordWidget widget = new WikiWordWidget(new WidgetRoot(
216: parentPage), "WikiWord");
217: widget.parentPage = parentPage;
218:
219: try {
220: widget
221: .makeRenamedRelativeReference(".FitNesse.SuiteAcceptanceTests.SuiteWidgetTests.WikiWord");
222: // Not sure what the result should be but it's the exception that's
223: // causing trouble.
224: } catch (Exception e) {
225: fail(e.getMessage());
226: }
227:
228: }
229: }
|