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.responders.run;
004:
005: import fitnesse.wiki.*;
006: import fitnesse.http.*;
007: import fitnesse.responders.editing.PropertiesResponder;
008: import fitnesse.testutil.*;
009: import fitnesse.FitNesseContext;
010: import java.util.*;
011:
012: public class SuiteResponderTest extends RegexTest {
013: private MockRequest request;
014: private SuiteResponder responder;
015: private WikiPage root;
016: private WikiPage suite;
017: private int port = 9123;
018: private FitNesseContext context;
019: private FitSocketReceiver receiver;
020: private WikiPage testPage;
021: private PageCrawler crawler;
022: private WikiPage testPage2;
023: private WikiPage testChildPage;
024: private String suitePageName;
025:
026: public void setUp() throws Exception {
027: suitePageName = "SuitePage";
028: root = InMemoryPage.makeRoot("RooT");
029: crawler = root.getPageCrawler();
030: PageData data = root.getData();
031: data.setContent(classpathWidgets());
032: root.commit(data);
033: suite = crawler.addPage(root, PathParser.parse(suitePageName),
034: "This is the test suite\n");
035: testPage = addTestToSuite("TestOne",
036: "|!-fitnesse.testutil.PassFixture-!|\n");
037:
038: request = new MockRequest();
039: request.setResource(suitePageName);
040: responder = new SuiteResponder();
041: responder.page = suite;
042: context = new FitNesseContext(root);
043: context.port = port;
044:
045: receiver = new FitSocketReceiver(port, context.socketDealer);
046: }
047:
048: private WikiPage addTestToSuite(String name, String content)
049: throws Exception {
050: return addTestPage(suite, name, content);
051: }
052:
053: private WikiPage addTestPage(WikiPage page, String name,
054: String content) throws Exception {
055: WikiPage testPage = crawler.addPage(page, PathParser
056: .parse(name), content);
057: PageData data = testPage.getData();
058: data.setAttribute("Test");
059: testPage.commit(data);
060: return testPage;
061: }
062:
063: public void tearDown() throws Exception {
064: receiver.close();
065: }
066:
067: private String runSuite() throws Exception {
068: receiver.receiveSocket();
069: Response response = responder.makeResponse(context, request);
070: MockResponseSender sender = new MockResponseSender(response);
071: String results = sender.sentData();
072: return results;
073: }
074:
075: public void testGatherXRefTestPages() throws Exception {
076: WikiPage testPage = crawler.addPage(root, PathParser
077: .parse("SomePage"), "!see PageA\n!see PageB");
078: WikiPage pageA = crawler.addPage(root, PathParser
079: .parse("PageA"));
080: WikiPage pageB = crawler.addPage(root, PathParser
081: .parse("PageB"));
082: List xrefTestPages = SuiteResponder
083: .gatherCrossReferencedTestPages(testPage, root);
084: assertEquals(2, xrefTestPages.size());
085: assertTrue(xrefTestPages.contains(pageA));
086: assertTrue(xrefTestPages.contains(pageB));
087: }
088:
089: public void testBuildClassPath() throws Exception {
090: responder.page = suite;
091: List testPages = SuiteResponder.getAllTestPagesUnder(suite);
092: String classpath = SuiteResponder.buildClassPath(testPages,
093: responder.page);
094: assertSubString("classes", classpath);
095: assertSubString("dummy.jar", classpath);
096: }
097:
098: public void testWithOneTest() throws Exception {
099: String results = runSuite();
100: assertSubString("href=\"#TestOne\"", results);
101: assertSubString("1 right", results);
102: assertSubString("id=\"TestOne\"", results);
103: assertSubString(" href=\"SuitePage.TestOne\"", results);
104: assertSubString("PassFixture", results);
105: }
106:
107: public void testPageWithXref() throws Exception {
108: PageData data = suite.getData();
109: data
110: .setContent("!see XrefOne\r\n!see XrefTwo\n!see XrefThree\n");
111: suite.commit(data);
112: addTestPage(root, "XrefOne",
113: "|!-fitnesse.testutil.PassFixture-!|\n");
114: addTestPage(root, "XrefTwo",
115: "|!-fitnesse.testutil.PassFixture-!|\n");
116:
117: String results = runSuite();
118: assertSubString("href=\"#XrefOne\"", results);
119: assertSubString("href=\"#XrefTwo\"", results);
120: }
121:
122: public void testWithTwoTests() throws Exception {
123: addTestToSuite("TestTwo",
124: "|!-fitnesse.testutil.FailFixture-!|\n\n|!-fitnesse.testutil.FailFixture-!|\n");
125: String results = runSuite();
126:
127: assertSubString("href=\"#TestOne\"", results);
128: assertSubString("href=\"#TestTwo\"", results);
129: assertSubString("1 right", results);
130: assertSubString("2 wrong", results);
131: assertSubString("id=\"TestOne\"", results);
132: assertSubString("id=\"TestTwo\"", results);
133: assertSubString("PassFixture", results);
134: assertSubString("FailFixture", results);
135: }
136:
137: public void testSuiteWithEmptyPage() throws Exception {
138: suite = crawler.addPage(root, PathParser
139: .parse("SuiteWithEmptyPage"),
140: "This is the empty page test suite\n");
141: addTestPage(suite, "TestThatIsEmpty", "");
142: request.setResource("SuiteWithEmptyPage");
143: runSuite();
144:
145: WikiPagePath errorLogPath = PathParser
146: .parse("ErrorLogs.SuiteWithEmptyPage");
147: WikiPage errorLog = crawler.getPage(root, errorLogPath);
148: PageData data = errorLog.getData();
149: String errorLogContent = data.getContent();
150: assertNotSubString("Exception", errorLogContent);
151: }
152:
153: public void testSuiteWithOneTestWithoutTable() throws Exception {
154: addTestToSuite("TestWithoutTable", "This test has not table");
155: addTestToSuite("TestTwo",
156: "|!-fitnesse.testutil.PassFixture-!|\n");
157: addTestToSuite("TestThree",
158: "|!-fitnesse.testutil.PassFixture-!|\n");
159: String results = runSuite();
160:
161: assertSubString("TestOne", results);
162: assertSubString("TestTwo", results);
163: assertSubString("TestThree", results);
164: assertSubString("TestWithoutTable", results);
165: }
166:
167: public void testExitCodeHeader() throws Exception {
168: String results = runSuite();
169: assertSubString("Exit-Code: 0", results);
170: }
171:
172: public void testGetAllTestPages() throws Exception {
173: setUpForGetAllTestPages();
174:
175: List testPages = SuiteResponder.getAllTestPagesUnder(suite);
176: assertEquals(3, testPages.size());
177: assertEquals(true, testPages.contains(testPage));
178: assertEquals(true, testPages.contains(testPage2));
179: assertEquals(true, testPages.contains(testChildPage));
180: }
181:
182: private void setUpForGetAllTestPages() throws Exception {
183: testPage2 = addTestToSuite("TestPageTwo", "test page two");
184: testChildPage = testPage2.addChildPage("TestChildPage");
185: PageData data = testChildPage.getData();
186: data.setAttribute("Test");
187: testChildPage.commit(data);
188: }
189:
190: public void testGetAllTestPagesSortsByQulifiedNames()
191: throws Exception {
192: setUpForGetAllTestPages();
193: List testPages = SuiteResponder.getAllTestPagesUnder(suite);
194: assertEquals(3, testPages.size());
195: assertEquals(testPage, testPages.get(0));
196: assertEquals(testPage2, testPages.get(1));
197: assertEquals(testChildPage, testPages.get(2));
198: }
199:
200: public void testSetUpAndTearDown() throws Exception {
201: WikiPage setUp = crawler.addPage(root, PathParser
202: .parse("SuiteSetUp"), "suite set up");
203: WikiPage tearDown = crawler.addPage(root, PathParser
204: .parse("SuiteTearDown"), "suite tear down");
205:
206: List testPages = responder.makePageList();
207: assertEquals(3, testPages.size());
208: assertSame(setUp, testPages.get(0));
209: assertSame(tearDown, testPages.get(2));
210: }
211:
212: public void testExecutionStatusAppears() throws Exception {
213: String results = runSuite();
214: assertHasRegexp(divWithIdAndContent("execution-status", ".*?"),
215: results);
216: }
217:
218: public void testTestSummaryInformationIncludesPageSummary()
219: throws Exception {
220: String results = runSuite();
221: assertHasRegexp(
222: divWithIdAndContent("test-summary",
223: ".*?Test Pages:.*? .*?Assertions:.*?"),
224: results);
225: }
226:
227: public void testFormatTestSummaryInformation() throws Exception {
228: String results = runSuite();
229: assertHasRegexp(
230: divWithIdAndContent("test-summary",
231: ".*?<strong>Test Pages:</strong>.*?<strong>Assertions:</strong>.*?"),
232: results);
233: }
234:
235: private String classpathWidgets() {
236: return "!path classes\n" + "!path lib/dummy.jar\n";
237: }
238:
239: public void testNonMatchingSuiteFilter() throws Exception {
240: addTestPagesWithSuiteProperty();
241: request.setQueryString("suiteFilter=xxx");
242: String results = runSuite();
243: assertDoesntHaveRegexp(".*href=\"#TestOne\".*", results);
244: assertDoesntHaveRegexp(".*href=\"#TestTwo\".*", results);
245: assertDoesntHaveRegexp(".*href=\"#TestThree\".*", results);
246: }
247:
248: public void testSimpleMatchingSuiteFilter() throws Exception {
249: addTestPagesWithSuiteProperty();
250: request.setQueryString("suiteFilter=foo");
251: String results = runSuite();
252: assertDoesntHaveRegexp(".*href=\"#TestOne\".*", results);
253: assertHasRegexp(".*href=\"#TestTwo\".*", results);
254: assertDoesntHaveRegexp(".*href=\"#TestThree\".*", results);
255: }
256:
257: public void testSecondMatchingSuiteFilter() throws Exception {
258: addTestPagesWithSuiteProperty();
259: request.setQueryString("suiteFilter=smoke");
260: String results = runSuite();
261: assertDoesntHaveRegexp(".*href=\"#TestOne\".*", results);
262: assertDoesntHaveRegexp(".*href=\"#TestTwo\".*", results);
263: assertHasRegexp(".*href=\"#TestThree\".*", results);
264: }
265:
266: private void addTestPagesWithSuiteProperty() throws Exception {
267: WikiPage test2 = addTestToSuite("TestTwo",
268: "|!-fitnesse.testutil.PassFixture-!|\n");
269: WikiPage test3 = addTestToSuite("TestThree",
270: "|!-fitnesse.testutil.PassFixture-!|\n");
271: PageData data2 = test2.getData();
272: PageData data3 = test3.getData();
273: data2.setAttribute(PropertiesResponder.SUITES, "foo");
274: data3.setAttribute(PropertiesResponder.SUITES, "bar, smoke");
275: test2.commit(data2);
276: test3.commit(data3);
277: }
278: }
|