Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge branch 'master' into slim_refactoring

Conflicts:
	FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteResponderTests/SuiteVersionResponder/TestVersionsInPage/content.txt
	FitNesseRoot/RecentChanges/content.txt
	ivy.xml
	src/fitnesse/junit/FitNesseSuite.java
	src/fitnesse/resources/templates/versionNav.vm
	src/fitnesse/responders/WikiPageResponder.java
	src/fitnesse/responders/run/FitClientResponder.java
	src/fitnesse/responders/run/JavaFormatter.java
	src/fitnesse/responders/run/JavaFormatterTest.java
	src/fitnesse/responders/versions/VersionResponder.java
	src/fitnesse/testsystems/CompositeExecutionLog.java
	src/fitnesse/testsystems/ExecutionLog.java
	src/fitnesse/wiki/WikiImportPropertyTest.java
  • Loading branch information...
commit 3f4f4781005ca94277d025173748f8da36fd2f99 2 parents 520485a + 1c6cb16
@amolenaar amolenaar authored
Showing with 1,049 additions and 4,980 deletions.
  1. +36 −0 ...Root/FitNesse/SuiteAcceptanceTests/SuiteResponderTests/SuiteVersionResponder/TestVersionsInPage/content.txt
  2. +0 −15 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestAccessVirtualChild/content.txt
  3. +0 −10 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestAccessVirtualChild/properties.xml
  4. +0 −13 ...e/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestAliasLinkToNonExistentPageDefersToRemoteServer/content.txt
  5. +0 −10 ...uiteAcceptanceTests/SuiteVirtualWikiTests/TestAliasLinkToNonExistentPageDefersToRemoteServer/properties.xml
  6. +0 −13 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestAliasLinkToNonExistentSubPage/content.txt
  7. +0 −10 ...seRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestAliasLinkToNonExistentSubPage/properties.xml
  8. +0 −15 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestIncludedPageInRange/content.txt
  9. +0 −10 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestIncludedPageInRange/properties.xml
  10. +0 −19 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestIncludedPageOutOfRange/content.txt
  11. +0 −10 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestIncludedPageOutOfRange/properties.xml
  12. +0 −17 ...ot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestQuestionMarkLinkDefersToRemoteServer/content.txt
  13. +0 −10 ...FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestQuestionMarkLinkDefersToRemoteServer/properties.xml
  14. +0 −19 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestQuestionMarkLinkForChildPage/content.txt
  15. +0 −10 ...sseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestQuestionMarkLinkForChildPage/properties.xml
  16. +0 −13 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestVirtualLinkConnection/content.txt
  17. +0 −10 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestVirtualLinkConnection/properties.xml
  18. +0 −16 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestVirtualLinkError/content.txt
  19. +0 −10 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestVirtualLinkError/properties.xml
  20. +0 −11 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/content.txt
  21. +0 −14 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/properties.xml
  22. +1 −1  FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteWikiImportTests/content.txt
  23. +0 −2  FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteWikiImportTests/properties.xml
  24. +0 −73 FitNesseRoot/FitNesse/UserGuide/DownloadingAndInstallingFitNesse/content.txt
  25. +0 −13 FitNesseRoot/FitNesse/UserGuide/DownloadingAndInstallingFitNesse/properties.xml
  26. +1 −1  FitNesseRoot/FitNesse/UserGuide/EditingFitNessePages/content.txt
  27. +0 −26 FitNesseRoot/FitNesse/UserGuide/FitNesseWontStart/content.txt
  28. +0 −9 FitNesseRoot/FitNesse/UserGuide/FitNesseWontStart/properties.xml
  29. +1 −3 FitNesseRoot/FitNesse/UserGuide/MarkupEditWikiPage/content.txt
  30. +3 −4 FitNesseRoot/FitNesse/UserGuide/MarkupEditWikiPage/properties.xml
  31. +0 −31 FitNesseRoot/FitNesse/UserGuide/MarkupVirtualWiki/VirtualWikiNetworkError/content.txt
  32. +0 −13 FitNesseRoot/FitNesse/UserGuide/MarkupVirtualWiki/VirtualWikiNetworkError/properties.xml
  33. +0 −27 FitNesseRoot/FitNesse/UserGuide/MarkupVirtualWiki/content.txt
  34. +0 −10 FitNesseRoot/FitNesse/UserGuide/MarkupVirtualWiki/properties.xml
  35. +1 −1  FitNesseRoot/FitNesse/UserGuide/OneMinuteDescription/content.txt
  36. +0 −2  FitNesseRoot/FitNesse/UserGuide/SecurityDescription/content.txt
  37. +1 −1  FitNesseRoot/FitNesse/UserGuide/SymbolicLinks/content.txt
  38. +0 −6 FitNesseRoot/FitNesse/UserGuide/TestDevelopmentEnvironment/content.txt
  39. +8 −9 FitNesseRoot/FitNesse/UserGuide/TestDevelopmentEnvironment/properties.xml
  40. +2 −2 FitNesseRoot/FitNesse/UserGuide/TwoMinuteExample/content.txt
  41. +61 −61 FitNesseRoot/FitNesse/UserGuide/content.txt
  42. +5 −5 FitNesseRoot/RecentChanges/content.txt
  43. +0 −3,041 antf
  44. +0 −185 changeLog.txt
  45. +1 −0  ivy.xml
  46. +1 −1  src/fitnesse/authentication/SecureOperationTest.java
  47. +5 −11 src/fitnesse/authentication/SecurePageOperation.java
  48. +0 −1  src/fitnesse/components/ClassPathBuilderTest.java
  49. +6 −10 src/fitnesse/components/RegularExpressionWikiPageFinderTest.java
  50. +5 −13 src/fitnesse/components/TitleWikiPageFinderTest.java
  51. +4 −12 src/fitnesse/components/WhereUsedPageFinderTest.java
  52. +0 −44 src/fitnesse/html/HtmlTableListingBuilder.java
  53. +188 −117 src/fitnesse/junit/FitNesseSuite.java
  54. +1 −1  src/fitnesse/junit/TestHelper.java
  55. +37 −0 src/fitnesse/resources/css/fitnesse_wiki.css
  56. BIN  src/fitnesse/resources/images/symlinkDiagram.gif
  57. +19 −0 src/fitnesse/resources/templates/compareVersions.vm
  58. +4 −0 src/fitnesse/resources/templates/compareVersionsNav.vm
  59. +0 −5 src/fitnesse/resources/templates/propertiesPage.vm
  60. +7 −1 src/fitnesse/resources/templates/versionNav.vm
  61. +29 −24 src/fitnesse/resources/templates/versionSelection.vm
  62. +15 −1 src/fitnesse/resources/wysiwyg/testcase.js
  63. +3 −8 src/fitnesse/resources/wysiwyg/wysiwyg.js
  64. +2 −3 src/fitnesse/responders/ImportAndViewResponder.java
  65. +2 −0  src/fitnesse/responders/ResponderFactory.java
  66. +10 −15 src/fitnesse/responders/ResponderFactoryTest.java
  67. +1 −3 src/fitnesse/responders/WikiPageResponder.java
  68. +1 −36 src/fitnesse/responders/WikiPageResponderTest.java
  69. +11 −33 src/fitnesse/responders/editing/PropertiesResponder.java
  70. +0 −12 src/fitnesse/responders/editing/PropertiesResponderTest.java
  71. +0 −14 src/fitnesse/responders/editing/SavePropertiesResponder.java
  72. +2 −59 src/fitnesse/responders/editing/SavePropertiesResponderTest.java
  73. +15 −4 src/fitnesse/responders/files/FileResponder.java
  74. +23 −3 src/fitnesse/responders/files/FileResponderTest.java
  75. +0 −2  src/fitnesse/responders/run/FitClientResponder.java
  76. +121 −70 src/fitnesse/responders/run/JavaFormatter.java
  77. +10 −18 src/fitnesse/responders/run/JavaFormatterFolderResultsRepositoryTest.java
  78. +14 −11 src/fitnesse/responders/run/JavaFormatterTest.java
  79. +44 −0 src/fitnesse/responders/run/NullListener.java
  80. +2 −16 src/fitnesse/responders/run/SuiteContentsFinder.java
  81. +0 −2  src/fitnesse/responders/run/slimResponder/SlimResponder.java
  82. +31 −0 src/fitnesse/responders/versions/VersionComparer.java
  83. +136 −0 src/fitnesse/responders/versions/VersionComparerResponder.java
  84. +86 −0 src/fitnesse/responders/versions/VersionComparerResponderTest.java
  85. +36 −0 src/fitnesse/responders/versions/VersionComparerTest.java
  86. +46 −13 src/fitnesse/responders/versions/VersionResponder.java
  87. +0 −2  src/fitnesse/testsystems/CompositeExecutionLog.java
  88. +0 −2  src/fitnesse/testsystems/ExecutionLog.java
  89. +0 −7 src/fitnesse/testutil/FitNesseUtil.java
  90. +0 −61 src/fitnesse/testutil/MockExtendableWikiPage.java
  91. +0 −13 src/fitnesse/testutil/SimpleExtension.java
  92. +1 −10 src/fitnesse/wiki/BaseWikiPage.java
  93. +2 −3 src/fitnesse/wiki/CachingPage.java
  94. +1 −1  src/fitnesse/wiki/CommitingPage.java
  95. +0 −28 src/fitnesse/wiki/ExtendableWikiPage.java
  96. +0 −20 src/fitnesse/wiki/ExtendableWikiPageTest.java
  97. +0 −9 src/fitnesse/wiki/Extension.java
  98. +0 −1  src/fitnesse/wiki/InMemoryPage.java
  99. +0 −18 src/fitnesse/wiki/NullVirtualCouplingPage.java
  100. +0 −9 src/fitnesse/wiki/SymbolicPage.java
  101. +0 −57 src/fitnesse/wiki/VirtualCouplingExtension.java
  102. +0 −97 src/fitnesse/wiki/VirtualCouplingExtensionTest.java
  103. +0 −111 src/fitnesse/wiki/VirtualCouplingPage.java
  104. +0 −22 src/fitnesse/wiki/VirtualEnabledPageCrawler.java
  105. +0 −57 src/fitnesse/wiki/VirtualEnabledPageCrawlerTest.java
  106. +0 −14 src/fitnesse/wiki/VirtualMockingPageCrawler.java
  107. +0 −20 src/fitnesse/wiki/WikiImportPropertyTest.java
  108. +0 −9 src/fitnesse/wiki/WikiPage.java
  109. +3 −22 src/fitnesse/wiki/WikiPageDummy.java
  110. +0 −1  src/fitnesse/wiki/WikiPageProperties.java
  111. +0 −8 src/fitnesse/wikitext/parser/WikiSourcePage.java
  112. +4 −34 src/fitnesse/wikitext/test/WikiSourcePageTest.java
View
36 ...t/FitNesse/SuiteAcceptanceTests/SuiteResponderTests/SuiteVersionResponder/TestVersionsInPage/content.txt
@@ -0,0 +1,36 @@
+When editing pages each version is recorded in the versions list.
+
+Create a page to be requested.
+!|Page creator.|
+|Page name.|valid?|
+|VersionsPage|true|
+
+Now save the page a couple times. This will produce a version history.
+!|Response Requester.|
+|uri|status?|
+|VersionsPage?responder=saveData&pageContent=a+change&editTime=0&ticketId=0|303|
+|VersionsPage?responder=saveData&pageContent=another+change&editTime=0&ticketId=0|303|
+
+Now load up the version list.
+!|Response Requester.|
+|uri|status?|
+|VersionsPage?versions|200|
+
+The version list has the correct headings.
+|Response Examiner.|
+|type|pattern|matches?|
+|contents|>Compare<|true|
+|contents|>Name<|true|
+|contents|>Author<|true|
+|contents|>Age<|true|
+
+The version list has 3 entries and each has a checkbox.
+|Response Examiner.|
+|type|pattern|matches?|matchCount?|
+|contents|!-href="\?responder=viewVersion&amp;version=-!|true|3|
+|contents|!-input type="checkbox" name="Version_-!|true|3|
+
+Show the contents.
+|Response Examiner.|
+|contents?|
+||
View
15 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestAccessVirtualChild/content.txt
@@ -1,15 +0,0 @@
-In this test we make sure we can fetch the virtual child page.
-
-!|Page creator.|
-|Page name. |Page contents.|Page attributes. |valid?|
-|VirtualPage|!contents |VirtualWiki=http://localhost:${FITNESSE_PORT}/FitNesse.SuiteAcceptanceTests.AcceptanceTestPage|true |
-
-!|Response Requester.|
-|uri |valid?|
-|VirtualPage.ChildOne|true|
-
-!|Response Examiner|
-|type|pattern|matches?|wrapped html?|
-|contents|You have reached Child One.|true||
-
-!note Why doesn't the page look blue? Something about the URLRequester or !-ResponseExaminer-! fixtures must be bypassing the colorization.
View
10 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestAccessVirtualChild/properties.xml
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Files/>
- <LastModified>20081213072044</LastModified>
- <RecentChanges/>
- <Test/>
- <WhereUsed/>
- <saveId>1229174444028</saveId>
- <ticketId>-570500463035178939</ticketId>
-</properties>
View
13 ...uiteAcceptanceTests/SuiteVirtualWikiTests/TestAliasLinkToNonExistentPageDefersToRemoteServer/content.txt
@@ -1,13 +0,0 @@
-An alias link to a non-existent page on a virtual child should generate a '''[?]''' that links to an edit page on the remote server, not on the local server.
-
-!|Page creator.|
-|Page name. |Page contents.|Page attributes. |valid?|
-|VirtualPage|!contents |VirtualWiki=http://localhost:${FITNESSE_PORT}/FitNesse.SuiteAcceptanceTests.AcceptanceTestPage|true |
-
-!|Response Requester.|
-|uri |valid?|
-|VirtualPage.ChildWithAliasLinkToNonExistentPage|true|
-
-!|Response Examiner|
-|type|pattern|matches?|wrapped html?|
-|contents|<a title="create page" href="http://localhost:${FITNESSE_PORT}/FitNesse.SuiteAcceptanceTests.AcceptanceTestPage\.NonExistentPage\?edit&nonExistent=true">\[\?\]</a>|true||
View
10 ...eAcceptanceTests/SuiteVirtualWikiTests/TestAliasLinkToNonExistentPageDefersToRemoteServer/properties.xml
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Files/>
- <LastModified>20081213072127</LastModified>
- <RecentChanges/>
- <Test/>
- <WhereUsed/>
- <saveId>1229174487043</saveId>
- <ticketId>-8660594137363316073</ticketId>
-</properties>
View
13 ...seRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestAliasLinkToNonExistentSubPage/content.txt
@@ -1,13 +0,0 @@
-An alias link to a non-existent page on a virtual child should generate a '''[?]''' that links to an edit page on the remote server, not on the local server.
-
-!|Page creator.|
-|Page name. |Page contents.|Page attributes. |valid?|
-|VirtualPage|!contents |VirtualWiki=http://localhost:${FITNESSE_PORT}/FitNesse.SuiteAcceptanceTests.AcceptanceTestPage|true |
-
-!|Response Requester.|
-|uri |valid?|
-|VirtualPage.ChildWithAliasLinkToNonExistentSubPage|true|
-
-!|Response Examiner|
-|type|pattern|matches?|wrapped html?|
-|contents|<a title="create page" href="http://localhost:${FITNESSE_PORT}/FitNesse.SuiteAcceptanceTests.AcceptanceTestPage\.ChildWithAliasLinkToNonExistentSubPage\.NonExistentSubPage\?edit&nonExistent=true">\[\?\]</a>|true||
View
10 ...oot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestAliasLinkToNonExistentSubPage/properties.xml
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Files/>
- <LastModified>20081213072217</LastModified>
- <RecentChanges/>
- <Test/>
- <WhereUsed/>
- <saveId>1229174537699</saveId>
- <ticketId>-8455436134318421144</ticketId>
-</properties>
View
15 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestIncludedPageInRange/content.txt
@@ -1,15 +0,0 @@
-!3 BUG. Thanks John Goodsen.
-
-If a virtual page includes another that is in the same virtual subwiki, it should be able to find it remotely.
-
-!|Page creator.|
-|Page name. |Page contents.|Page attributes. |valid?|
-|VirtualPage|!contents |VirtualWiki=http://localhost:${FITNESSE_PORT}/FitNesse.SuiteAcceptanceTests.AcceptanceTestPage|true |
-
-!|Response Requester.|
-|uri |valid?|
-|VirtualPage.IncludingPage|true|
-
-!|Response Examiner|
-|type|pattern|matches?|wrapped html?|
-|contents|included page|true||
View
10 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestIncludedPageInRange/properties.xml
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Files/>
- <LastModified>20081213072238</LastModified>
- <RecentChanges/>
- <Test/>
- <WhereUsed/>
- <saveId>1229174558451</saveId>
- <ticketId>9079472808022855710</ticketId>
-</properties>
View
19 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestIncludedPageOutOfRange/content.txt
@@ -1,19 +0,0 @@
-!3 BUG. Thanks John Goodsen.
-
-If a virtual page includes another that is outside the virtual subwiki, it should still be able to find it remotely.
-
-!|Page creator.|
-|Page name. |Page contents.|Page attributes. |valid?|
-|VirtualPage|!contents |VirtualWiki=http://localhost:${FITNESSE_PORT}/FitNesse.SuiteAcceptanceTests.AcceptanceTestPage|true |
-
-!|Response Requester.|
-|uri |valid?|
-|VirtualPage.IncludingPage.ChildIncludingPage|true|
-
-!|Response Examiner|
-|type|pattern|matches?|wrapped html?|
-|contents|the included page 00bF|true||
-
-!|Response Examiner|
-|type|pattern|matches?|
-|contents|Page include failed|false|
View
10 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestIncludedPageOutOfRange/properties.xml
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Files/>
- <LastModified>20081213072259</LastModified>
- <RecentChanges/>
- <Test/>
- <WhereUsed/>
- <saveId>1229174579492</saveId>
- <ticketId>6672562401416929673</ticketId>
-</properties>
View
17 ...FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestQuestionMarkLinkDefersToRemoteServer/content.txt
@@ -1,17 +0,0 @@
-!c !1 Test Deactivated
-!c !3 Due to changes in the virtual wiki feature. This test should eventually get deleted.
-
-A link to a non-existent page on a virtual child should generate a '''[?]''' that links to an edit page on the remote server, not on the local server.
-
-!|Page creator.|
-|Page name. |Page contents.|Page attributes. |valid?|
-|VirtualPage|!contents |VirtualWiki=http://localhost:${FITNESSE_PORT}/AcceptanceTestPage|true |
-
-!|Response Requester.|
-|uri |valid?|
-|VirtualPage.ChildWithLinkToNonExistentPage|true|
-
-!|Response Examiner|
-|type|pattern|matches?|value|
-|contents|<a href="http://localhost:${FITNESSE_PORT}/AcceptanceTestPage\.DoesNotExist\?edit" target="DoesNotExist">\?</a>|true||
-
View
10 ...Nesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestQuestionMarkLinkDefersToRemoteServer/properties.xml
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Files/>
- <LastModified>20081105124106</LastModified>
- <Properties/>
- <RecentChanges/>
- <WhereUsed/>
- <saveId>1225906866680</saveId>
- <ticketId>6773079787846968340</ticketId>
-</properties>
View
19 ...sseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestQuestionMarkLinkForChildPage/content.txt
@@ -1,19 +0,0 @@
-!c !1 Test Deactivated
-!c !3 Due to changes the virtual wiki features is undergoing. This test should eventually get deleted.
-
-A sub page link to a non-existent page on a virtual child should generate a '''[?]''' that edits the subpage of the remote parent.
-
-
-!|Page creator.|
-|Page name. |Page contents.|Page attributes. |valid?|
-|VirtualPage|!contents |VirtualWiki=http://localhost:${FITNESSE_PORT}/AcceptanceTestPage|true |
-
-!|Response Requester.|
-|uri |valid?|
-|VirtualPage.ChildWithSubPageLinkToNonExistentPage|true|
-
-!|Response Examiner|
-|type|pattern|matches?|value|
-|contents|<a href="http://localhost:${FITNESSE_PORT}/AcceptanceTestPage.ChildWithSubPageLinkToNonExistentPage.NonExistentSubPage\?edit" target=".*">\?</a>|true||
-
-
View
10 ...Root/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestQuestionMarkLinkForChildPage/properties.xml
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Files/>
- <LastModified>20081105124132</LastModified>
- <Properties/>
- <RecentChanges/>
- <WhereUsed/>
- <saveId>1225906892617</saveId>
- <ticketId>2604514604538018580</ticketId>
-</properties>
View
13 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestVirtualLinkConnection/content.txt
@@ -1,13 +0,0 @@
-This test makes sure that we can build a simple virtual wiki link. We create a page with a !-!contents-! widget and then set the virtual wiki property to point to .FitNesse.SuiteAcceptanceTests.AcceptanceTestPage. When we fetch the page that !-!contents-! should show the !-ChildOne-! page that is below .FitNesse.SuiteAcceptanceTests.AcceptanceTestPage.
-
-!|Page creator.|
-|Page name. |Page contents.|Page attributes. |valid?|
-|VirtualPage|!contents |VirtualWiki=http://localhost:${FITNESSE_PORT}/FitNesse.SuiteAcceptanceTests.AcceptanceTestPage|true |
-
-!|Response Requester.|
-|uri |valid?|
-|VirtualPage|true|
-
-!|Response Examiner|
-|type|pattern|matches?|wrapped html?|
-|contents|ChildOne|true||
View
10 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestVirtualLinkConnection/properties.xml
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Files/>
- <LastModified>20081213072318</LastModified>
- <RecentChanges/>
- <Test/>
- <WhereUsed/>
- <saveId>1229174598553</saveId>
- <ticketId>-1388058458338497579</ticketId>
-</properties>
View
16 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestVirtualLinkError/content.txt
@@ -1,16 +0,0 @@
-This test makes sure that a !-VirtualWikiNetworkError-! page is created if the virtual wiki property is set to a non-existent page.
-
-!|Page creator.|
-|Page name. |Page contents.|Page attributes. |valid?|
-|VirtualPage|!contents |VirtualWiki=http://localhost:${FITNESSE_PORT}/InvalidPage|true |
-
-!note we fetch the page twice here because the first fetch detects the error after the !-!contents-! has found all the local pages, thus preventing if from listing the !-VirtualWikiNetworkError-! page. This is probably a bug, but it's not serious enough to break this test at this point.
-
-!|Response Requester.|
-|uri |valid?||
-|VirtualPage|true|''This one mimics the save of the properties''|
-|VirtualPage|true|
-
-!|Response Examiner|
-|type|pattern|matches?|wrapped html?|
-|contents|VirtualWikiNetworkError|true||
View
10 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/TestVirtualLinkError/properties.xml
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Files/>
- <LastModified>20081213072337</LastModified>
- <RecentChanges/>
- <Test/>
- <WhereUsed/>
- <saveId>1229174617733</saveId>
- <ticketId>-559825304016805882</ticketId>
-</properties>
View
11 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/content.txt
@@ -1,11 +0,0 @@
-This suite specifies the behavior of the virtual wiki feature. These tests use some special pages that exist in ''this'' wiki. The pages are .FitNesse.SuiteAcceptanceTests.AcceptanceTestPage and its children.
-
-^TestVirtualLinkConnection
-^TestVirtualLinkError
-^TestAccessVirtualChild
-^TestQuestionMarkLinkDefersToRemoteServer
-^TestQuestionMarkLinkForChildPage
-^TestAliasLinkToNonExistentPageDefersToRemoteServer
-^TestAliasLinkToNonExistentSubPage
-^TestIncludedPageInRange
-^TestIncludedPageOutOfRange
View
14 FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteVirtualWikiTests/properties.xml
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Files/>
- <LastModified>20081105123242</LastModified>
- <Properties/>
- <RecentChanges/>
- <Refactor/>
- <Search/>
- <Suite/>
- <Versions/>
- <WhereUsed/>
- <saveId>1225906362023</saveId>
- <ticketId>455850599843702522</ticketId>
-</properties>
View
2  FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteWikiImportTests/content.txt
@@ -1,7 +1,7 @@
!c !3 Wiki Import Suite
Wiki Import is a key feature for development teams. It allows each developer to have their own FitNesse playground to run tests on the code they're playing with while sharing the test definitions with a central repository. A test author need only write a test once and all the developers will be able to import that test to their local environment.
-Wiki Import is meant to replace the existing Virtual Wiki feature.
+Wiki Import replaces the old, deprecated and now removed, Virtual Wiki feature.
!note make sure to define PORT {80} in root.
View
2  FitNesseRoot/FitNesse/SuiteAcceptanceTests/SuiteWikiImportTests/properties.xml
@@ -2,12 +2,10 @@
<properties>
<Edit/>
<Files/>
- <Help/>
<Properties/>
<RecentChanges/>
<Refactor/>
<Suite/>
- <Suites/>
<Versions/>
<WhereUsed/>
</properties>
View
73 FitNesseRoot/FitNesse/UserGuide/DownloadingAndInstallingFitNesse/content.txt
@@ -1,73 +0,0 @@
-!2 Downloading and Installing FitNesse
-It really takes very little time and effort to get FitNesse running on your machine.
- 1 Go to !style_code(http://fitnesse.org/FrontPage.FitNesseDevelopment.DownLoad) and click on the most recent !style_code(fitnesse-standalone.jar) file.
- * If this is a brand new installation, just put it in some convenient empty directory.
- * If this is an update, then copy it on top of the old fitnesse(-standalone).jar in your current installation.
- 2 Type !style_code(java -jar fitnesse-standalone.jar)
- * It will ask you to be patient as it installs or updates.
- * Your shell should respond with something like this:
- !img http://files/images/fitnessestarted.png
- 3 Start up a browser and go to !style_code(http://localhost)
- 4 The main FitNesse screen should come up. That's it. You're ready to start using FitNesse.
-
-!3 It didn't work!
-Most likely you have another web server running. Web servers default to port 80, so if another one is running on your machine you'll have to specify another port via a CommandLineOption. Try this command:
- !style_code(java -jar fitnesse-standalone.jar -p 8080)
-
-Then point your browser to !style_code(http://localhost:8080)
-
-!**> Still no? Open me up.
-!2 What to Do If You Have the Wrong Java Runtime Environment
-FitNesse requires version 1.5 or later of the Java Runtime Environment (JRE).
-If you see the messages:
-
-{{{
-C:\fitnesse>java -jar fitnesse-standalone.jar
-Exception in thread "main" java.lang.NoClassDefFoundError:
-java/lang/CharSequence
- at fitnesse.FitNesse.parseCommandLine(Unknown Source)
- at fitnesse.FitNesse.main(Unknown Source)
-}}}
-
-Then you need to download and install version 1.5 or later of the JRE. Follow these steps:
- * Press a key to close the command window
- * Go to [[this download link][https://jsecom15a.sun.com:443/ECom/EComActionServlet;jsessionid=jsecom15a.sun.com-9752%3A415dafbe%3A147685f2fbcc1de1]].
- * Accept the terms of agreement (if you are permitted), and click Continue.
- * Download the right JRE installer for your machine and operating system.
- * Launch the installer, and follow its instructions to install JRE 1.5 or later.
- * Change the PATH environment variable so that it points to the new JRE.
- * Go to the /bin folder that contains java.exe, and copy the pathname (for example, ''C:\Program Files\Java\j2re1.5.0_13'')
- * Go to Settings>Control Panel>System>Advanced>Environment Variables>PATH>Edit
- * Paste in that same complete pathname
- * Save the PATH environment variable, and close the System control panel
- * Double-click run.bat again.
- * Return to DownloadingAndInstallingFitNesse.
-
-!2 What to do if Apache Velocity is not found
-There are two builds of the FitNesse binary:
- * '''fitnesse.jar''' contains only the fitnesse code, no dependencies. This is the version you use if you're using a dependency management system like [[Maven][http://maven.apache.org/]] or [[Apache Ivy][http://ant.apache.org/ivy/]].
- * '''fitnesse-standalone.jar''' is the big one-has-all jar file containing FitNesse and support libraries.
-
-If you're seeing this:
-
-{{{
-C:\fitnesse>java -jar fitnesse.jar
-Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/velocity/context/Context
- at fitnesse.FitNesseContext.(FitNesseContext.java:29)
- at fitnesse.FitNesseContext.(FitNesseContext.java:39)
- at fitnesseMain.FitNesseMain.loadContext(FitNesseMain.java:88)
- at fitnesseMain.FitNesseMain.launchFitNesse(FitNesseMain.java:36)
-}}}
-
-You probably want the latter.
-*!
-
-!2 Learning More
-If you have not yet done so, check out the TwoMinuteExample. To learn more about what FitNesse acceptance testing is all about, see AcceptanceTests. If you are ready to start creating FitNesse pages and test tables, check out EditingFitNessePages and CreatingTestTables.
-
-!2 Memory Issues.
-With the 20090320 release, some operations in !-FitNesse-! take more than the default memory allocated to the JVM. This can cause tests to fail for ''out of heap space'' reasons. You can fix this by adding the !style_code(!--Xmx100M-!) JVM argument to the java command line when you start !-FitNesse-!. !style_code(!-java -Xmx100M -jar fitnesse.jar-!).
-
-!3 Memory issues and the build.
-If you build !-FitNesse-! from source, the ant script may fail for ''out of heap space'' reasons. You can fix this by setting the !style_code(ANT_OPTS) environment variable to !style_code(!--Xmx100M-!).
-
View
13 FitNesseRoot/FitNesse/UserGuide/DownloadingAndInstallingFitNesse/properties.xml
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Edit/>
- <Files/>
- <Normal/>
- <Properties/>
- <RecentChanges/>
- <Refactor/>
- <Versions/>
- <WhereUsed/>
- <saveId>1237473507730</saveId>
- <ticketId>-8390780236878065853</ticketId>
-</properties>
View
2  FitNesseRoot/FitNesse/UserGuide/EditingFitNessePages/content.txt
@@ -2,7 +2,7 @@
FitNesse is a [[wiki web server][http://wiki.org/wiki.cgi?WhatIsWiki]]. Before you can begin CreatingTestTables, you need to know a bit about how a wiki works.
-A wiki allows any authorized user to make changes to any edit-enabled page, or to create new pages, simply by using their Web browser. If you are working with a copy of FitNesse on your own machine, you are probably authorized to make such changes. (If you have not yet installed FitNesse on your own machine, it's easy do to. You can read about it on DownloadingAndInstallingFitNesse.)
+A wiki allows any authorized user to make changes to any edit-enabled page, or to create new pages, simply by using their Web browser. If you are working with a copy of FitNesse on your own machine, you are probably authorized to make such changes.
!3 Editing a Page
Once you are on a page your want to change, hit the '''Edit''' button in the upper left. (If the button does not appear, then the page is not edit-enabled.)
View
26 FitNesseRoot/FitNesse/UserGuide/FitNesseWontStart/content.txt
@@ -1,26 +0,0 @@
-!2 What to Do If You Have the Wrong Java Runtime Environment
-FitNesse requires version 1.5 or later of the Java Runtime Environment (JRE).
-If you see the messages:
-
-''!-C:\fitnesse>java -jar fitnesse-standalone.jar-!
-!-Exception in thread "main" java.lang.NoClassDefFoundError:-!
-!-java/lang/CharSequence-!
-!- at fitnesse.FitNesse.parseCommandLine(Unknown Source)-!
-!- at fitnesse.FitNesse.main(Unknown Source)-!
-
-!-C:\fitnesse>pause-!
-!-Press any key to continue . . .-!''
-
-Then you need to download and install version 1.5 or later of the JRE. Follow these steps:
- * Press a key to close the command window
- * Go to [[this download link][https://jsecom15a.sun.com:443/ECom/EComActionServlet;jsessionid=jsecom15a.sun.com-9752%3A415dafbe%3A147685f2fbcc1de1]].
- * Accept the terms of agreement (if you are permitted), and click Continue.
- * Download the right JRE installer for your machine and operating system.
- * Launch the installer, and follow its instructions to install JRE 1.5 or later.
- * Change the PATH environment variable so that it points to the new JRE.
- * Go to the /bin folder that contains java.exe, and copy the pathname (for example, ''C:\Program Files\Java\j2re1.5.0_13'')
- * Go to Settings>Control Panel>System>Advanced>Environment Variables>PATH>Edit
- * Paste in that same complete pathname
- * Save the PATH environment variable, and close the System control panel
- * Double-click run.bat again.
- * Return to DownloadingAndInstallingFitNesse.
View
9 FitNesseRoot/FitNesse/UserGuide/FitNesseWontStart/properties.xml
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Files/>
- <LastModified>20090315141112</LastModified>
- <RecentChanges/>
- <WhereUsed/>
- <saveId>1237144272538</saveId>
- <ticketId>3374330756985795038</ticketId>
-</properties>
View
4 FitNesseRoot/FitNesse/UserGuide/MarkupEditWikiPage/content.txt
@@ -9,9 +9,7 @@ When you click the '''Save''' button (or push ALT+S) ''!-FitNesse-!'' saves the
* '''Paste From Excel'''
* The edit page contains a PasteFromExcel button, which will allow you to paste a table copied from a Microsoft Excel spreadsheet into the text window. The table will be reformatted to the standard Fitnesse [[table][MarkupTable]] conventions.
* '''Setting Page Attributes.'''
- * Hitting the '''Properties''' button (or typing ''alt-p'') will bring up a form that shows the attributes for this page.
- * Some attributes are associated with a button on the wiki page. You can hide or show these buttons by clearing of setting their check boxes and hitting '''Save'''.
- * The virtual wiki attribute determines whether or not this page is symbolically linked to another system. See MarkupVirtualWiki.
+ * Hitting the '''Properties''' button (or typing ''alt-p'') will bring up a form that shows the attributes for this page. Some attributes are associated with a button on the wiki page. You can hide or show these buttons by clearing of setting their check boxes and hitting '''Save'''.
See [[Page Attributes][PageProperties]].
View
7 FitNesseRoot/FitNesse/UserGuide/MarkupEditWikiPage/properties.xml
@@ -1,7 +1,6 @@
<?xml version="1.0"?>
<properties>
- <Files/>
- <LastModified>20081020135106</LastModified>
- <RecentChanges/>
- <WhereUsed/>
+ <Files/>
+ <RecentChanges/>
+ <WhereUsed/>
</properties>
View
31 FitNesseRoot/FitNesse/UserGuide/MarkupVirtualWiki/VirtualWikiNetworkError/content.txt
@@ -1,31 +0,0 @@
-{{{java.io.StreamCorruptedException: invalid stream header
- java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:764)
- java.io.ObjectInputStream.<init>(ObjectInputStream.java:277)
- fitnesse.wiki.ProxyPage.getObjectFromUrl(ProxyPage.java:142)
- fitnesse.wiki.ProxyPage.retrievePage(ProxyPage.java:52)
- fitnesse.wiki.VirtualCouplingExtension.loadVirtualChildren(VirtualCouplingExtension.java:45)
- fitnesse.wiki.VirtualCouplingExtension.detectAndLoadVirtualChildren(VirtualCouplingExtension.java:40)
- fitnesse.wiki.VirtualCouplingExtension.getVirtualCoupling(VirtualCouplingExtension.java:33)
- fitnesse.wikitext.widgets.TOCWidget.buildListOfChildPages(TOCWidget.java:269)
- fitnesse.wikitext.widgets.TOCWidget.buildList(TOCWidget.java:164)
- fitnesse.wikitext.widgets.TOCWidget.buildContentsDiv(TOCWidget.java:150)
- fitnesse.wikitext.widgets.TOCWidget.buildListItem(TOCWidget.java:190)
- fitnesse.wikitext.widgets.TOCWidget.buildList(TOCWidget.java:165)
- fitnesse.wikitext.widgets.TOCWidget.buildContentsDiv(TOCWidget.java:150)
- fitnesse.wikitext.widgets.TOCWidget.render(TOCWidget.java:111)
- fitnesse.wikitext.widgets.ParentWidget.childHtml(ParentWidget.java:70)
- fitnesse.wikitext.widgets.WidgetRoot.render(WidgetRoot.java:92)
- fitnesse.wiki.PageData.processHTMLWidgets(PageData.java:196)
- fitnesse.wiki.PageData.getHtml(PageData.java:166)
- fitnesse.responders.WikiPageResponder.generateHtml(WikiPageResponder.java:95)
- fitnesse.responders.WikiPageResponder.makeHtml(WikiPageResponder.java:87)
- fitnesse.responders.WikiPageResponder.makePageResponse(WikiPageResponder.java:70)
- fitnesse.responders.WikiPageResponder.makeResponse(WikiPageResponder.java:45)
- fitnesse.FitNesseExpediter.createGoodResponse(FitNesseExpediter.java:122)
- fitnesse.FitNesseExpediter.makeResponse(FitNesseExpediter.java:105)
- fitnesse.FitNesseExpediter.start(FitNesseExpediter.java:47)
- fitnesse.FitNesseServer.serve(FitNesseServer.java:24)
- fitnesse.FitNesseServer.serve(FitNesseServer.java:17)
- fitnesse.socketservice.SocketService$ServerRunner.run(SocketService.java:88)
- java.lang.Thread.run(Thread.java:613)
-}}}
View
13 FitNesseRoot/FitNesse/UserGuide/MarkupVirtualWiki/VirtualWikiNetworkError/properties.xml
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Edit>true</Edit>
- <Files>true</Files>
- <LastModified>20090327171601</LastModified>
- <Properties>true</Properties>
- <RecentChanges>true</RecentChanges>
- <Refactor>true</Refactor>
- <Search>true</Search>
- <Versions>true</Versions>
- <WhereUsed>true</WhereUsed>
- <ticketId>-9007199047140889011</ticketId>
-</properties>
View
27 FitNesseRoot/FitNesse/UserGuide/MarkupVirtualWiki/content.txt
@@ -1,27 +0,0 @@
-!2 The Virtual Wiki Features is deprecated altogether. Don't use it. It will be removed soon. Probably before 2010.
-See WikiImport and SymbolicLinks as alternative to Virtual Wiki
-
-!***> Description of the deprecated Virtual Wiki feature
-'''!virtual wiki has been deprecated and this page describes the new method to set up a virtual wiki.'''
-
-Sometimes you want to attach the pages of a remote sub-wiki to a page in your local wiki. You do this by setting the ''!-VirtualWiki-!'' property in a page's property window. The value to should be the URL of the remote page whose children you would like to appear as subpages.
-
-''See TestDevelopmentEnvironment for a justification of this feature.''
-
-For example: if on page !-MyWiki.MyPage-! you set ''!-VirtualWiki-!'' to ''!-http://fitnesse.org/FitNesse-!'' then all the children of !-fitnesse.org/FitNesse-! would become children of !-MyWiki.MyPage-!.
-
-Try it out.
- 1 Make this page a virtual parent by putting the following URL in the ''Virtual Wiki'' property in the property window. !-http://fitnesse.org/FitNesse.SuiteAcceptanceTests-!
- 2 Add a !contents to the bottom of this page. Without this the virtual wiki will still work, but you won't see a convenient list of virtual sub pages.
- 3 If you are using the newest version of !-FitNesse-! and your installtion has internet access, then you should see the children of !-fitnesse.org/FitNesse.SuiteAcceptanceTests-! shown as links below. If you click on one of those links you will note that the page background changes to blue. This is a hint that you are looking at a remote page.
-
- * If you edit a remote page, the changes will be made remotely. Note that a new edit window will pop up, and the url will be to the remote system, not the local system. Note also that the background will be white. This is your clue that this window is directly connected to the remote system. After you hit save, this window will show the edited page on the ''remote'' system, and the background will be white. Remember to dismiss this window and return to the blue window before you try to run a test!
- * If you test a remote page, the test is run locally, and the !path directives from the !-ClassPath-! pages in your local environment will be used to establish the execution classpath.
- * If you test a remote suite, all the tests will be run locally, using the the local classpath.
- * Note: If there are !-ClassPath-! pages in the remote hierarchy below the <url>, they will still be used.
-
-If FitNesse has a problem connecting to a remote server it will create a page beneath the local page called !-VirtualWikiNetworkError-!. In this page you will find a stack trace of the exception received. As an example: MarkupVirtualWiki.VirtualWikiNetworkError
-
-The previous implentation of VirtualWiki made use of the special !virtualwiki widget. If you try to use it you will get the follwing message.
-!virtualwiki http://fitnesse.org/FitNesse.SuiteAcceptanceTests
-**********!
View
10 FitNesseRoot/FitNesse/UserGuide/MarkupVirtualWiki/properties.xml
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<properties>
- <Files/>
- <LastModified>20090327102725</LastModified>
- <RecentChanges/>
- <VirtualWiki>http://fitnesse.org/FitNesse.SuiteAcceptanceTests</VirtualWiki>
- <WhereUsed/>
- <saveId>1238167645133</saveId>
- <ticketId>7990255477344717059</ticketId>
-</properties>
View
2  FitNesseRoot/FitNesse/UserGuide/OneMinuteDescription/content.txt
@@ -21,7 +21,7 @@ From another perspective, !-FitNesse-! is a lightweight, open-source framework t
!3 !-FitNesse-! is a web server.
* It requires '''no configuration or setup'''.
- * Just run it and then direct your browser to the machine where it is running (see [[Downloading and Installing][DownloadingAndInstallingFitNesse]]).
+ * Just run it and then direct your browser to the machine where it is running (see [[Downloading and Installing][http://fitnesse.org/FitNesseDownload]]).
!3 Want a quick introduction? Check out the [[Two Minute Example][TwoMinuteExample]].
----
View
2  FitNesseRoot/FitNesse/UserGuide/SecurityDescription/content.txt
@@ -22,8 +22,6 @@ Pages inherit their security from their parent pages. If a parent page has ''se
* A user must be authenticated to inspect or change the /files directory structure. However, unauthenticated readers can read files from the /files directory.
* Searching, WhereUsed, Sisterhood, and other queries of that kind are not secure and do not require authentication.
-!3 Virtual Wiki
-A virtual page inherits the security of its ''local'' parents, not its remote parents. This is a security hole for reading and testing. If the parent of a page has secure-read, but that page is accessed through a virtual wiki below the secure parent, then the security will be lost. Fortunately this is only true for reading and testing. Writing is never done over a virtual wiki, so it remains secure. At this point we're not sure whether this is a real problem or not. Let us know what you think.
!3 Authentication
The users and their passwords are supplied to FitNesse by using the -a as one of the CommandLineArguments.
!3 SPNEGO/GSSAPI Authentication
View
2  FitNesseRoot/FitNesse/UserGuide/SymbolicLinks/content.txt
@@ -1,4 +1,4 @@
-!img-r http://docs.fitnesse.org/files/images/symlinkDiagram.gif
+!img-r http://files/fitnesse/images/symlinkDiagram.gif
!3 What are SymbolicLinks?
Symbolic Links allow a user to easily create parent-child links between pages without permanently affecting the wiki structure. Refer to the diagram on the right. You will notice that the !-ApplicationTests-! page has a child page named !-SuiteTests-! which contains several other pages. The !-EnvironmentOne-! page has no static child pages but it does have a symbolic link to the !-SuiteTests-! page. This symbolic link acts like a child page in almost every way and give two full names to the !-SuiteTests-! page:
View
6 FitNesseRoot/FitNesse/UserGuide/TestDevelopmentEnvironment/content.txt
@@ -6,9 +6,3 @@ Two ad-hoc solutions to this problem were tried. The first was to create a simp
1 They were clunky and inconvenient.
2 The !-ClassPath-! pages needed to be identical, or at least very carefully managed.
#
-!3 Enter virtual wiki.
-We wanted developers to be able run the tests on their local machines. We also wanted customers to write the tests on the global server. The solution to this dilemma was ''Virtual Wiki''.
-
-Virtual wiki (See the [[Virtual Wiki Instructions][MarkupVirtualWiki]]) allows a developer to start up a !-FitNesse-! server on his local machine, and then to point one of his local pages to a sub-wiki on the global !-FitNesse-! server. The entire sub-wiki from the global server then appears on the developer's local machine -- just as if the developer had written the pages there. But the pages are really still on the server. Pressing the '''Test''' button on such a page, causes the test to be executed ''locally''. The developer can create !-ClassPath-! pages on ''his'' machine that allow the acceptance tests to be run in his local environment.
-
-Thus, each developer can set up his own local environment and create a set of !-ClassPath-! pages that bind that environment to his wiki. Then he can use Virtual Wiki to merge the remote acceptance tests to his local !-ClassPath-! environment.
View
17 FitNesseRoot/FitNesse/UserGuide/TestDevelopmentEnvironment/properties.xml
@@ -1,12 +1,11 @@
<?xml version="1.0"?>
<properties>
- <Files/>
- <LastModified>20081020135119</LastModified>
- <Properties/>
- <RecentChanges/>
- <Search/>
- <Test/>
- <Versions/>
- <WhereUsed/>
- <saveId>1051902744361</saveId>
+ <Files/>
+ <Properties/>
+ <RecentChanges/>
+ <Search/>
+ <Test/>
+ <Versions/>
+ <WhereUsed/>
+ <saveId>1051902744361</saveId>
</properties>
View
4 FitNesseRoot/FitNesse/UserGuide/TwoMinuteExample/content.txt
@@ -34,7 +34,7 @@ How did we put that test table on this page in the first place? Well, we used Fi
FitNesse is a [[wiki][http://wiki.org/wiki.cgi?WhatIsWiki]], which is a style of web server that allows any visitor to make any edits, including changing existing pages and creating new pages. A simple markup language lets you easily create headings, make text bold, underline, and italic, create bulleted lists, and do other kinds of simple formatting. You can read more about it on EditingFitNessePages.
-Once you download FitNesse to your own computer, you can edit any page simply by clicking on the Edit button on the left (just below the Test button). If you are reading this page on your own copy of FitNesse on your own machine, you can click the Edit button and see for yourself. (To learn more, see DownloadingAndInstallingFitNesse.)
+Once you download FitNesse to your own computer, you can edit any page simply by clicking on the Edit button on the left (just below the Test button). If you are reading this page on your own copy of FitNesse on your own machine, you can click the Edit button and see for yourself.
The wiki markup for our table above (with some omissions) looks like this:{{{|eg.Division|
|numerator|denominator|quotient?|
@@ -54,7 +54,7 @@ FitNesse test tables live on test pages (such as this one). There are several Te
How shall you spend the next few minutes? It's up to you.
!3 More Technical Detail...
-If you are more interested in learning how to create the code that makes test tables work, see FixtureCode. If you want to start diving into installing and running FitNesse, check out DownloadingAndInstallingFitNesse.
+If you are more interested in learning how to create the code that makes test tables work, see FixtureCode. If you want to start diving into installing and running FitNesse, check out [[fitnesse.org][http://fitnesse.org/FitNesseDownload]].
!3 More Usage Detail...
If you are more interested in why and how to get teams to use FitNesse, see AcceptanceTests. If you want to learn how to create and run FitNesse tests, check out EditingFitNessePages, CreatingTestTables, and TestTableStyles.
View
122 FitNesseRoot/FitNesse/UserGuide/content.txt
@@ -1,40 +1,41 @@
-!1 !c FitNesse User Guide
-!c Robert C. Martin
-!c Micah D. Martin
-!c Patrick Wilson-Welsh
-!c October, 2008
+!1 !c !-FitNesse-! User Guide
+!c Robert C. Martin,
+!c Micah D. Martin,
+!c Patrick Wilson-Welsh &
+!c !-FitNesse-! contributors
----
!2 Getting Started
-What FitNesse is, a brief example, and how to install it on your computer.
-|[[A One-Minute Description][>OneMinuteDescription]]|''What is FitNesse? Start here.''|
-|[[A Two-Minute Example][>TwoMinuteExample]]|''A brief example. Read this one second.''|
-|[[Downloading, Installing, and Updating][>DownloadingAndInstallingFitNesse]]|''How to get FitNesse up and running on your machine.''|
-|[[Quick Reference Guide][>QuickReferenceGuide]]|''A cheat sheet for markups and usage.''|
+What !-FitNesse-! is, a brief example, and how to install it on your computer.
+
+| [[A One-Minute Description][>OneMinuteDescription]] | ''What is !-FitNesse-!? Start here.'' |
+| [[A Two-Minute Example][>TwoMinuteExample]] | ''A brief example. Read this one second.'' |
+| [[Downloading, Installing, and Updating][http://fitnesse.org/FitNesseDownload]] | ''How to get !-FitNesse-! up and running on your machine.'' |
+| [[Quick Reference Guide][>QuickReferenceGuide]] | ''A cheat sheet for markups and usage.'' |
----
-!2 Working With FitNesse Wiki Pages
-FitNesse is a [[wiki web server][http://wiki.org/wiki.cgi?WhatIsWiki]]. Learn how to use wiki features to create and change FitNesse pages.
+!2 Working With !-FitNesse-! Wiki Pages
+!-FitNesse-! is a [[wiki web server][http://wiki.org/wiki.cgi?WhatIsWiki]]. Learn how to use wiki features to create and change !-FitNesse-! pages.
-FitNesse is an application testing suite that allows you to test the business layer of your application.
+!-FitNesse-! is an application testing suite that allows you to test the business layer of your application.
-It is not a browser automation tool, although there are such tools that work with FitNesse.
+It is not a browser automation tool, although there are such tools that work with !-FitNesse-!.
-It is not a unit testing tool. The tests that FitNesse runs integrate the various layers of your application together, demonstrating even to non-coders that the application works as designed.
+It is not a unit testing tool. The tests that !-FitNesse-! runs integrate the various layers of your application together, demonstrating even to non-coders that the application works as designed.
It is an ''integration testing tool''. That means that it provides a method to automatically determine that your application is working correctly. Not your beautiful user interface, with all its fancy CSS and slick Ajax calls, but the stuff underneath, where the actual brains of the application live.
-The goal is for FitNesse to operate at a level just ''below'' the user interface level, demonstrating that, given various inputs to your application, the correct results are returned. In a sense, you could consider it an alternative user interface for the application.
+The goal is for !-FitNesse-! to operate at a level just ''below'' the user interface level, demonstrating that, given various inputs to your application, the correct results are returned. In a sense, you could consider it an alternative user interface for the application.
-FitNesse provides an easy-to-use [[wiki][http://wiki.org/wiki.cgi?WhatIsWiki]] to create web pages that are run as tests. Test pages have a button on them allowing all the tests on the page to be run, so any user can go to that page and click the button at any time, and see if the tests are passing. Also, FitNesse provides means to automatically run tests, so it can be easily added to your automated build scripts.
+!-FitNesse-! provides an easy-to-use [[wiki][http://wiki.org/wiki.cgi?WhatIsWiki]] to create web pages that are run as tests. Test pages have a button on them allowing all the tests on the page to be run, so any user can go to that page and click the button at any time, and see if the tests are passing. Also, !-FitNesse-! provides means to automatically run tests, so it can be easily added to your automated build scripts.
So what does a test page look like? Each page that has tests will consist of a series of HTML tables. Fitnesse understands various formats of tables, and if those formats are not sufficient, developers are welcome to add additional ones. Generally, the tables take the basic form of a Command cell and some Parameter cells, which are followed by some Output cells. When a test is run, the command and parameters are evaluated to see if the correct output is given. [[Here's a quick example][>TwoMinuteExample]] to get you started.
-Now, if you're reading this on the web site, you probably found that the Fitnesse Test button in that example didn't work as advertised. It's been disabled to minimize stress on the site. But that's ok - since among other things, Fitnesse is a wiki, you can simply download and run it, and read these same web pages as served up by your local system. When you do that, you'll be able to run the tests. Why not [[download it now][>DownloadingAndInstallingFitNesse]]?
+Now, if you're reading this on the web site, you probably found that the Fitnesse Test button in that example didn't work as advertised. It's been disabled to minimize stress on the site. But that's ok - since among other things, Fitnesse is a wiki, you can simply download and run it, and read these same web pages as served up by your local system. When you do that, you'll be able to run the tests. Why not [[download it now][http://fitnesse.org/FitNesseDownload]]?
!3 Creating the Table
Okay, so you saw what Fitnesse can do. You ran a test with some inputs, checked to make sure the outputs were as expected, and saw how easy it was to determine whether the application worked correctly or not. Now you'd like to create some tests of your own. How do you do it?
-If you go back and edit the [[Example page][>TwoMinuteExample]], you'll see some wiki markup that looks like this: {{{
+If you go back and edit the [[Example page][>TwoMinuteExample]], you'll see some wiki markup that looks like this:{{{
|eg.Division|
|numerator|denominator|quotient?|
|10 |2 |5 |
@@ -45,59 +46,58 @@ The vertical bars delimit table cells. For this table, there is not much more to
If you'll be spending a lot of time writing tests, you'll probably want to study these tips for using the wiki:
-|[[Editing !-FitNesse-! Pages][>EditingFitNessePages]]|''An intro to creating and changing FitNesse pages using the wiki markup language.''|
-|[[Working with Wiki Pages][>WorkingWithWikiPages]]|''More FitNesse wiki page features.''|
-|[[Markup Language Reference][>MarkupLanguageReference]]|''A reference for formatting FitNesse pages using the wiki markup language.''|
-|[[Sub Wikis][>SubWiki]]|''How to create hierarchies of FitNesse pages.''|
-|[[Special Wiki Functions][>SpecialWikiFunctions]]|''Special things you can do with wikis.''|
-|[[Wiki Import][>WikiImport]]|''Importing wiki pages from a remote FitNesse server.''|
-|[[Symbolic Links][>SymbolicLinks]]|''Dynamically altering the wiki page structure.''|
-|[[Special Pages][>SpecialPages]]|''Some pages in FitNesse that serve special purposes.''|
-|[[Quick Reference Guide][>QuickReferenceGuide]]|''A cheat sheet for markups and usage.''|
-|[[Changing look and feel][>WikiTheming]]|''Style FitNesse the way you like (theming).''|
+| [[Editing !-FitNesse-! Pages][>EditingFitNessePages]] | ''An intro to creating and changing ''!-FitNesse-!'' pages using the wiki markup language.'' |
+| [[Working with Wiki Pages][>WorkingWithWikiPages]] | ''More ''!-FitNesse-!'' wiki page features.'' |
+| [[Markup Language Reference][>MarkupLanguageReference]] | ''A reference for formatting ''!-FitNesse-!'' pages using the wiki markup language.'' |
+| [[Sub Wikis][>SubWiki]] | ''How to create hierarchies of ''!-FitNesse-!'' pages.'' |
+| [[Special Wiki Functions][>SpecialWikiFunctions]] | ''Special things you can do with wikis.'' |
+| [[Wiki Import][>WikiImport]] | ''Importing wiki pages from a remote ''!-FitNesse-!'' server.'' |
+| [[Symbolic Links][>SymbolicLinks]] | ''Dynamically altering the wiki page structure.'' |
+| [[Special Pages][>SpecialPages]] | ''Some pages in ''!-FitNesse-!'' that serve special purposes.'' |
+| [[Quick Reference Guide][>QuickReferenceGuide]] | ''A cheat sheet for markups and usage.'' |
+| [[Changing look and feel][>WikiTheming]] | ''Style ''!-FitNesse-!'' the way you like (theming).'' |
!3 Creating the Fixtures
-
The task of actually making the test ''pass'' is going to fall to a developer, presumably one who knows a little about the feature of the application that we're interested in. Going back to the Division example, let's pretend that the actual application has a web page containing two input boxes that accept numbers, and a Submit button. When the user clicks Submit, the application will divide the two numbers and show the result on the page.
Again, we're not interested in testing the user interface. We're not interested in making sure that the input boxes only accept digits, for example - we're strictly concerned with the business logic. We have some code that accepts two numbers as inputs, divides them, and returns the result. That's the code we're interested in.
-So our goal is to write this code in such a way that it can be called from either the web page UI or the FitNesse table UI. (If we've done that properly, we could even easily expand our product line by adding an iPhone UI, for example, or a console application.)
+So our goal is to write this code in such a way that it can be called from either the web page UI or the !-FitNesse-! table UI. (If we've done that properly, we could even easily expand our product line by adding an iPhone UI, for example, or a console application.)
-But how do we get from an HTML table to our code? Well, FitNesse provides a set of classes called Fixtures. Depending on the organization of the input and output cells, various fixtures translate the data in the cells to class properties. The application developer will derive a class from one of the fixtures, and make a call inside a fixture method to the business logic. [[Here's][>FixtureCode]] a more detailed walkthrough of the process.
+But how do we get from an HTML table to our code? Well, !-FitNesse-! provides a set of classes called Fixtures. Depending on the organization of the input and output cells, various fixtures translate the data in the cells to class properties. The application developer will derive a class from one of the fixtures, and make a call inside a fixture method to the business logic. [[Here's][>FixtureCode]] a more detailed walkthrough of the process.
-Of course, there's plenty more to know. If you have an existing application, you'll want to [[Tell FitNesse where to find it][>ClassPath]]. If you don't think the HTML table matches up well to your application, you might be interested in a different [[Test Table Style][>TestTableStyles]]. If you do change the style, you'll probably want to look through the [[Fixture Gallery][>FixtureGallery]] to determine which fixture is most appropriate to use. And, of course, developers always need to know [[How to debug the fixtures][>DebugingFixtureCode]].
+Of course, there's plenty more to know. If you have an existing application, you'll want to [[Tell !-FitNesse-! where to find it][>ClassPath]]. If you don't think the HTML table matches up well to your application, you might be interested in a different [[Test Table Style][>TestTableStyles]]. If you do change the style, you'll probably want to look through the [[Fixture Gallery][>FixtureGallery]] to determine which fixture is most appropriate to use. And, of course, developers always need to know [[How to debug the fixtures][>DebugingFixtureCode]].
And continue on below to learn more!
!2 Tutorial: Creating and Organizing Acceptance Tests
-Acceptance tests are what FitNesse is about. Learn why and how to make, run, and organize them.
-|[[Project Death by Requirements][>ProjectDeathByRequirements]]|''Why use automated acceptance tests? What goes wrong when we don't use them?''|
-|[[Test Systems][>TestSystems]]|''[[Slim][>SliM]] and [[Fit][>FitFramework]], the two major test systems of FitNesse.''|
-|[[Acceptance Tests][>AcceptanceTests]]|''What are the advantages of FitNesse automated acceptance tests?''|
-|[[Delivering the Right System][>DeliveringTheRightSystem]]|''An intro to how software teams can use FitNesse to build better systems.''|
-|[[Creating Test Tables][>CreatingTestTables]]|''Creating and enabling test tables on FitNesse pages.''|
-|[[Graceful Names][>GracefulName]]|''Managing the names of fixtures, packages, and variables.''|
-|[[Test Table Styles][>TestTableStyles]]|''The different styles and uses of test tables and corresponding fixtures.''|
-|[[Test Suites][>TestSuites]]|''How to group many test pages into a suite; then tag, search, and execute them.''|
-|[[Acceptance Test Patterns][>AcceptanceTestPatterns]]|''Some patterns we have seen emerge while writing FitNesse [[Acceptance Tests][>AcceptanceTests]].''|
-|[[Test History][>TestHistory]]|''The results of all test runs are recorded. You can access and display those results at any time.''|
-
-!2 Tutorial: FitNesse Fixtures
-|[[Fixture Code][>FixtureCode]]|''An intro to the fixture code that lets you run FitNesse tables.''|
-|[[Class Path][>ClassPath]]|''Telling FitNesse where your Fixture Code is.''|
-|[[Test Table Styles][>TestTableStyles]]|''The styles of FitNesse test tables, and corresponding Fixture Code they use.''|
-|[[Fixture Gallery][>FixtureGallery]]|''A walk through of the various Fit Fixtures.''|
-|[[Debuging Fixture Code][>DebugingFixtureCode]]|''How to debug the testing code.''|
-
-!2 FitNesse for Integrators
-|[[Source Code Control][>SourceCodeControl]]|''How to create a plugin for marrying !-FitNesse-! to your SCM system.''|
-|[[Customizing Test Execution][>CustomizingTestExecution]]|''Modify the way tests are executed.''|
-|[[Multi-Language Fitnesse][>MultiLanguageFitNesse]] |''Using fixtures written in programming languages other than Java.''|
-|[[Executing Tests from Outside The UI][>ExecutingTestsOutsideTheUserInterface]]|''How to run tests from IDEs, commandline and build scripts.''|
-|[[Plugin Usage][>PluginUsage]]|''How to create and use plugins.''|
-Several plugins for FitNesse are available at http://www.fitnesse.org/FrontPage.PluginsPage.
+Acceptance tests are what !-FitNesse-! is about. Learn why and how to make, run, and organize them.
+
+| [[Project Death by Requirements][>ProjectDeathByRequirements]] | ''Why use automated acceptance tests? What goes wrong when we don't use them?'' |
+| [[Test Systems][>TestSystems]] | ''[[Slim][>SliM]] and [[Fit][>FitFramework]], the two major test systems of ''!-FitNesse-!''.'' |
+| [[Acceptance Tests][>AcceptanceTests]] | ''What are the advantages of ''!-FitNesse-!'' automated acceptance tests?'' |
+| [[Delivering the Right System][>DeliveringTheRightSystem]] | ''An intro to how software teams can use ''!-FitNesse-!'' to build better systems.'' |
+| [[Creating Test Tables][>CreatingTestTables]] | ''Creating and enabling test tables on ''!-FitNesse-!'' pages.'' |
+| [[Graceful Names][>GracefulName]] | ''Managing the names of fixtures, packages, and variables.'' |
+| [[Test Table Styles][>TestTableStyles]] | ''The different styles and uses of test tables and corresponding fixtures.'' |
+| [[Test Suites][>TestSuites]] | ''How to group many test pages into a suite; then tag, search, and execute them.'' |
+| [[Acceptance Test Patterns][>AcceptanceTestPatterns]] | ''Some patterns we have seen emerge while writing ''!-FitNesse-!'' [[Acceptance Tests][>AcceptanceTests]].'' |
+| [[Test History][>TestHistory]] | ''The results of all test runs are recorded. You can access and display those results at any time.'' |
+
+!2 Tutorial: !-FitNesse-! Fixtures
+| [[Fixture Code][>FixtureCode]] | ''An intro to the fixture code that lets you run ''!-FitNesse-!'' tables.'' |
+| [[Class Path][>ClassPath]] | ''Telling ''!-FitNesse-!'' where your Fixture Code is.'' |
+| [[Test Table Styles][>TestTableStyles]] | ''The styles of ''!-FitNesse-!'' test tables, and corresponding Fixture Code they use.'' |
+| [[Fixture Gallery][>FixtureGallery]] | ''A walk through of the various Fit Fixtures.'' |
+| [[Debuging Fixture Code][>DebugingFixtureCode]] | ''How to debug the testing code.'' |
+
+!2 !-FitNesse-! for Integrators
+| [[Source Code Control][>SourceCodeControl]] | ''How to create a plugin for marrying !-FitNesse-! to your SCM system.'' |
+| [[Customizing Test Execution][>CustomizingTestExecution]] | ''Modify the way tests are executed.'' |
+| [[Multi-Language Fitnesse][>MultiLanguageFitNesse]] | ''Using fixtures written in programming languages other than Java.'' |
+| [[Executing Tests from Outside The UI][>ExecutingTestsOutsideTheUserInterface]] | ''How to run tests from IDEs, commandline and build scripts.'' |
+| [[Plugin Usage][>PluginUsage]] | ''How to create and use plugins.'' |
!2 Miscellaneous
-|[[Design Notes][>DesignNotes]]|''Various articles and discussions on the design of FitNesse.''|
-|[[!-FitNesse-! Tests][<FitNesse.SuiteAcceptanceTests]]|''The suite of acceptance tests for !-FitNesse-! itself.''|
+| [[Design Notes][>DesignNotes]] | ''Various articles and discussions on the design of ''!-FitNesse-!''.'' |
+| [[!-FitNesse-! Tests][<FitNesse.SuiteAcceptanceTests]] | ''The suite of acceptance tests for !-FitNesse-! itself.'' |
View
10 FitNesseRoot/RecentChanges/content.txt
@@ -1,3 +1,8 @@
+|FitNesse.SuiteAcceptanceTests.SuiteWikiImportTests||11:46:53 Fri, Feb 15, 2013|
+|FitNesse.UserGuide.SecurityDescription||11:46:04 Fri, Feb 15, 2013|
+|FitNesse.UserGuide.TestDevelopmentEnvironment||11:45:43 Fri, Feb 15, 2013|
+|FitNesse.UserGuide.MarkupEditWikiPage||11:44:59 Fri, Feb 15, 2013|
+|FitNesse||22:32:02 Mo, Feb 11, 2013|
|FitNesse.SuiteAcceptanceTests.SuiteResponderTests.SuiteTestResponders.SuiteResponder.TestSuiteFilter||09:10:00 Mon, Dec 03, 2012|
|FitNesse.SuiteAcceptanceTests.SuiteSlimTests.LibrarySuite.LastLibraryPreceedsEarlierLibraryTest||10:30:54 Tue, Nov 27, 2012|
|FitNesse.SuiteAcceptanceTests.SuiteSlimTests.TestFixtureInteraction||13:27:39 Tue, Nov 06, 2012|
@@ -93,8 +98,3 @@
|FitNesse.SuiteAcceptanceTests.PageFooter||08:43:11 Wed, Feb 03, 2010|
|FitNesse.UserGuide.SliM.ValueComparisons||19:06:36 Tue, Feb 02, 2010|
|FitNesse.SuiteAcceptanceTests.SuiteSlimTests.RegularExpressionMatching||19:03:43 Tue, Feb 02, 2010|
-|JunkParent||09:50:16 Fri, Jan 29, 2010|
-|FitNesse.SuiteAcceptanceTests.SuiteWidgetTests.ContentsTestsIncludeWithHelp||17:33:03 Sun, Jan 17, 2010|
-|FitNesse.SuiteAcceptanceTests.SuiteWidgetTests.TestContentsHelp||17:32:46 Sun, Jan 17, 2010|
-|FitNesse.SuiteAcceptanceTests.SuiteTestHistory.SuiteTestHistoryTests.PageHistoryFailCountIsSumOfFailuresAndExceptions||17:31:55 Sun, Jan 17, 2010|
-|FitNesse.SuiteAcceptanceTests.SuiteSlimTests.LibrarySuite.OneLibraryTest||17:31:14 Sun, Jan 17, 2010|
View
3,041 antf
0 additions, 3,041 deletions not shown
View
185 changeLog.txt
@@ -1,185 +0,0 @@
-20121110 Matt Warhaftig
- * Updated wiki page functionality to display tags in the header section.
-
-20120816
- * Allow users to wrap the calls to the SUT. Do this by extending fitnesse.slim.fixtureInteraction.FixtureInteraction, and pass in that
- class name with the -i flag to the Slim Server.
-
-
-20120208 JAmes Atwill
- * Force the TCP port that Slim uses by passing -Dslim.port= on command line (or any means of setting the system property)
-
-20110923 Dan Rollo
- maven pom.xml cleanups:
- * Remove unneeded default <groupId> tags.
- * Add plugin <version> tags.
- * Add explicit, platform independent UTF-8 file encoding via property: project.build.sourceEncoding
- * Remove dependency on obsolete fitlibrary (the required classes are already in the source tree).
- * Replace <system> dependency on json with the latest published json artifact.
- * Remove unneeded ${basedir} from <sourceDirectory> tag value.
-
-20081128 UB
- * Added &debug flag to TestResponder url. This forces the test to run ''inside'' the fitnesse process. If you are running fitnesse in a debugger, you can breakpoint your fixtures.
- * Symbols can be java properties or environment variables. Symbols first, env variables second, java properties third.
- * If the first cell of a script table is a symbol assignment ($V=) then the rest must be a function call. The symbol is assigned the return value of the function.
-
-20081118 UB
-Fixed some bugs in Decision Table that misreported exceptions when the execute
-method was not present.
-
-Fixed bug in QueryTable that misreported when the query method returned null.
-
-20081112 UB
-Added ?format=xml to TestResponder and SuiteResponder so that you can get test results using REST.
-
-20080920 UB
-Added !style_myStyle(some text) widget. This translates to <span class="myStyle">some text</span>
-Added TEST_SYSTEM variable. If this variable is defined on a test page, it will replace the ?test
- on the test button link with the value of the variable. So if the variable is 'zap', then ?zap
- will replace ?test on the test button link. I use this to invoke alternate test runners.
--- 20080702 RELEASE -------------------------------------------------------------------------------
-Uncle Bob.
-Added new ant target "release", which does everything necessary for a release including running
-all the unit and acceptance tests. Got all the unit and acceptance tests to run in ant too,
-of course. That was a bit tricky since ant wants to execute everything that ends in 'Test'.
-So I had to change a few class names.
-
--- 20080701 -------------------------------------------------------------------------------
-Dean Wampler:
-Fix a few build problems reported by users.
-1) ClassPathBuilderTest.testWildCardExpansion() didn't handle Windows paths.
-2) "Rogue" dummy.jar in SVN caused build "mischief".
-3) Added comment to BUILD_README.txt about the special tests for Ruby, CPP, and .NET Fit.
-
--- 20080616 -------------------------------------------------------------------------------
-Dean Wampler:
-This commit contains the following changes (listed in no particular order). Most are usability improvements, but a few involve relatively-minor behavior changes.
-
-1) Changed the default ant build target to "all", which is new and which is effectively the same as the "testbuild" target.
-2) When you are editing a page, you can save your changes using control+s on the Mac and alt+s on the PC. I haven't tried it on Linux yet, but alt+s should work. Overriding the browsers command+s (Mac) or control+s (PC) is harder, but I may try to support those instead.
-3) The HTML headers h4 through h6 are now supported.
-5) Some command "links" have been replaced with buttons so it is easier to invoke them with hot keys or tabbing to them. For example, the "page does not" exist page has a "create page" button with access key "c" (i.e., "alt+c" on most platforms) and yes and no links on confirmation pages have been replaced with yes and no buttons with access keys "y" and "n", respectively.
-6) The edit page also has some "hints", such as supporting control+s/alt+s for saving.
-7) The front page has been simplified slightly and hints about what to do next have been added.
-8) The links in the sidebar and footer have been reorganized and (hopefully) improved. Some links are now turned on by default that were not previously, like "Edit" and "Properties". Having them off was a major roadblock to getting started for the beginner!
-9) To provide an easier clicking target than the single "?" for non-existent pages, the link is now "[?]".
-10) Pages with names that end in "Test" now default to having the Test property set; pages that start with "Test" still support this default.
-11) Pages with names that end in "Suite" now default to having the Suite property set; pages that start with "Suite" still support this default.
-12) The text fields on the Properties pages are now longer.
-13) The "!contents" are now displayed with a "Contents:" title (just bold text and only for the top-level contents, when listing contents recursively.). A faint box around the list is also shown.
-14) In the Properties page, the checkbox for "automatically update the wiki import when tests are run" defaults to "on" if importing hasn't been set up. This was done to encourage people to work this way....
-15) There are now convenience links on setup, teardown, and included pages to edit them. When you save, you will be returned to the page where you clicked the link, not the page you just edited.
-16) If you go to a non-existent URL, you are now taken directly to the edit page, on the assumption that you wanted to create a new page. You can always use the back button to cancel. (I tried adding a cancel button, but ran into page navigation problems that I didn't pursue. TBD)
-17) The first time you edit a new page, the text "!contents" is automatically added, as a default.
-18) You can now pass JVM arguments to "run.sh" using the new "-J jvm_arg" option. (This enhancement wasn't added to the run.bat, however. Any volunteers??)
-19) Fixed bug where white space after the last "|" a table row line results in a mysterious failure to parse the table. Specifically, all trailing (but not leading) spaces and tabs are trimmed from the wiki page lines (with some specific, but harmless(?) exceptions...).
-20) Added links on page footers to create set-up and tear-down pages, since beginners don't know how to do this.
-21) Generated HTML is more XHTML "compatible", e.g., all "<br>" are now written as "<br/>".
-
--- 20080610 -------------------------------------------------------------------------------
-Uncle Bob:
-Added double wildcard to !path so that all files in all subdirectories can be included
-as in !path myDirectory/**.jar
--- 20071107 -------------------------------------------------------------------------------
-Changes, ACDassing (i-m-fit-r-u) [acd]
---------------------------------------
-Bug Fixes:
- ComponentFactoryTest.java - commented out reassignment of global
- WidgetBuilder.htmlWidgetBuilder; it negatively affected subsequent tests via the
- integrated JUnit in Eclipse and appeared to be unnecessary.
- .classpath - (Eclipse) "
-
-Changes:
- Reorganization: Moved the following test modules to a different source folder for
- Eclipse integrated JUnit support (why are these embedded in FitNesse?):
- srcFitServerTests/fit/CppFitServertest.java
- srcFitServerTests/fit/DotNetFitServerTest.java
- srcFitServerTests/fit/RubyFitServerTest.java
-
- build.xml: Modified to support reorganization (above) using ${src2} initialzed with
- srcFitServerTests.
-
- Parse.java: Reimplemented using StringBuffer per suggestion from Konrad Argasinski.
-
- fitnesse_base.css: Modified .test_summary_link to be absolute to prevent inadvertant
- hiding of long page path names.
-
--- 20071102 -------------------------------------------------------------------------------
-Changes, ACDassing (i-m-fit-r-u) [acd]
---------------------------------------
-N.B.: Create a "TODO" or "Tasks" tag in your IDE to look for [acd]; all mods are tagged as such.
-- - - -
-Eclipse: org.eclipse.jdt.core.prefs - achieves a clean compile for Java 5.
- * Enabled project-specific settings for Errors/Warnings
- - Potential programming problems
- . Serializable class without serialVersionUID: Ignore
- - Generic types
- . Unchecked generic type operation: Ignore
-
- * Clean compile modifications to code
- - Added @SuppressWarnings("unused") to seven classes.
-
-- - - -
-Bug Fixes:
- * !define: Allow literals in parenthesized definitions; !lit(n) changed to !lit?n?.
- * !lit(): Changed delimiters from () to ?? to allow literals in !define X () markups.
- * !see: Backward-relative links included in suite test.
- * alias: [[tag][link]]--link section handles all relative types and fragment suffixes.
-
-- - - -
-Enhancements:
- * !contents: -R<number> to limit recursion depth & show "..." when more depth exists.
- * !contents: -g to re[g]race the TOC links.
- * !define & ${}: Allow periods in variable names.
- * !include: Multiple levels of relative child links are preserved.
- * !include: Variables are properly scoped to the including page.
- * !*<: New "invisible" collapsible section; requires div.invisible in fitnesse_base.css.
- * !{= =}: New EvaluatorWidget to pre-process arithmetic expressions; allows variables.
- * alias: [[tag][link]]--link section allows variables and expressions (see ${= =}.)
- * REGRACE_TOC: Globally set regracing of TOC widgets; set {true} or {false}.
- * REGRACE_LINK: Globally set regracing all page link widgets; set {true} or {false}.
- * ${PAGE_NAME}: Global variable returning the name of the page.
- * ${PAGE_PATH}: Global variable returning the absolute path to the page.
- * FitLibrary: Changed access of Fixture.getArgsForTable() to public for FitLibrary mods.
- * Expression.java: New module to support EvaluatorWidget expression evaluation.
- * Semaphores: Checks for semaphores (file-based) for page arbitration; see SemaphoreFixture.java.
- N.B., this is an initial implementation open to rewrite and extension to
- exit the table/test/suite on failure/exception/semaphore.
-
--- 20070519 -------------------------------------------------------------------------------
-Tim Ottinger and RMartin added the < and > link prefixes back in Feb.
-The > prefix replaces the ^ prefix, which is deprecated. >MyPage is now the
-preferred way of linking to a subpage.
-
-The < prefix is a search up the hierarchy. <MyPage.YourPage hunts from the current page
-up the hierarchy to first occurrence of MyPage. Then it links to >YourPage from there.
-
-Cleaned up a few odds and ends. Changed MockWikiPage to WikiPageDummy to follow
-Gerard's new nomenclature for Test Doubles.
-
-Apparently there have been some fixes to timing and reentrancy bugs by Andreas and a few others.
-
-Someone added an ant task to start fitnesse. This means that in order to compile you have to
-have the ANT jars in your classpath.
-
--- 20070426 -------------------------------------------------------------------------------
-SuiteSetUp and SuiteTearDown is called on running a single test
-Fixed unit tests which broke if run in non-US locale
-
--- 20060719 -------------------------------------------------------------------------------
-Requires Java 5.
-WikiImport:
- * Only modified pages are updated
- * Orphaned pages are deleted
- * Edit button removed, Edit Locally, Edit Remotely buttons added
- * Automatic Update option
- * SymbolicPages are not included in imports
-Symbolic Links to external directories
-Fixed FitServer Classpath bug.
-Support for FitLibrary's SuiteFixture
-Applied Joel Shprentz's fix for test execution threading issue on Solaris
-Applied Randy Coulman's fix for for missing exceptions.
-Minor bug fix to the Anchor widget
-Fixed bug in files section where directories with spaces in the names caused problems.
-Rafactoring: made the reference refactoring optional for the Rename and Move refactorings.
-Last release containing VirtualWiki
View
1  ivy.xml
@@ -29,6 +29,7 @@
<dependency org="org.apache.velocity" name="velocity" rev="1.7" conf="standalone->default,default" />
<dependency org="org.json" name="json" rev="20090211" conf="standalone->default,default" />
<dependency org="org.apache.ant" name="ant" rev="1.7.1" conf="default" transitive="false" />
+ <dependency org="com.googlecode.java-diff-utils" name="diffutils" rev="1.2.1" conf="standalone->default,default"/>
<!-- scope: test -->
<dependency org="org.mockito" name="mockito-all" rev="1.9.5" conf="test->default" />
<dependency org="junit" name="junit" rev="4.10" conf="test->default" />
View
2  src/fitnesse/authentication/SecureOperationTest.java
@@ -68,7 +68,7 @@ public void testNonExistentPageCanBeAuthenticated() throws Exception {
assertFalse(sro.shouldAuthenticate(context, request));
}
- public void testParentOfNonExistentPageStillSetsPriviledges() throws Exception {
+ public void testParentOfNonExistentPageStillSetsPrivileges() throws Exception {
WikiPage parentPage = crawler.addPage(root, parentPagePath);
makeSecure(parentPage);
request.setResource("ParentPage.NonExistentPage");
View
16 src/fitnesse/authentication/SecurePageOperation.java
@@ -2,18 +2,12 @@
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.authentication;
-import java.util.Iterator;
-import java.util.List;
-
import fitnesse.FitNesseContext;
import fitnesse.http.Request;
-import fitnesse.wiki.PageCrawler;
-import fitnesse.wiki.PageData;
-import fitnesse.wiki.PathParser;
-import fitnesse.wiki.VirtualMockingPageCrawler;
-import fitnesse.wiki.WikiPage;
-import fitnesse.wiki.WikiPagePath;
-import fitnesse.wiki.WikiPageUtil;
+import fitnesse.wiki.*;
+
+import java.util.Iterator;
+import java.util.List;
public abstract class SecurePageOperation implements SecureOperation {
protected abstract String getSecurityMode();
@@ -21,7 +15,7 @@
public boolean shouldAuthenticate(FitNesseContext context, Request request) throws Exception {
WikiPagePath path = PathParser.parse(request.getResource());
PageCrawler crawler = context.root.getPageCrawler();
- crawler.setDeadEndStrategy(new VirtualMockingPageCrawler());
+ crawler.setDeadEndStrategy(new MockingPageCrawler());
WikiPage page = crawler.getPage(context.root, path);
if (page == null)
return false;
View
1  src/fitnesse/components/ClassPathBuilderTest.java
@@ -99,7 +99,6 @@ private String makeClassPathFromSimpleStructure(String path) throws Exception {
public void testThatPathsWithSpacesGetQuoted() throws Exception {
crawler.addPage(root, somePagePath, "!path Some File.jar");
crawler = root.getPageCrawler();
- crawler.setDeadEndStrategy(new MockingPageCrawler());
WikiPage page = crawler.getPage(root, somePagePath);
assertEquals("\"Some File.jar\"", builder.getClasspath(page));
View
16 src/fitnesse/components/RegularExpressionWikiPageFinderTest.java
@@ -1,19 +1,17 @@
package fitnesse.components;
-import static junit.framework.Assert.assertEquals;
-import static org.junit.Assert.*;
-
-import java.util.ArrayList;
-import java.util.List;
-
+import fitnesse.wiki.*;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.junit.Before;
import org.junit.Test;
import org.junit.internal.matchers.TypeSafeMatcher;
-import fitnesse.testutil.FitNesseUtil;
-import fitnesse.wiki.*;
+import java.util.ArrayList;
+import java.util.List;
+
+import static junit.framework.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
public class RegularExpressionWikiPageFinderTest implements TraversalListener<WikiPage> {
@@ -40,8 +38,6 @@ public void setUp() throws Exception {
virtualPage = crawler.addPage(root, PathParser.parse("PageTwo"),
"PageTwo has a bit of content too\n^PageOneChild");
PageData data = virtualPage.getData();
- data.setAttribute(WikiPageProperties.VIRTUAL_WIKI_ATTRIBUTE, "http://localhost:"
- + FitNesseUtil.PORT + "/PageOne");
virtualPage.commit(data);
foundPages.clear();
}
View
18 src/fitnesse/components/TitleWikiPageFinderTest.java
@@ -1,22 +1,15 @@
package fitnesse.components;
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertTrue;
+import fitnesse.wiki.*;
+import org.junit.Before;
+import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import org.junit.Before;
-import org.junit.Test;
-
-import fitnesse.testutil.FitNesseUtil;
-import fitnesse.wiki.InMemoryPage;
-import fitnesse.wiki.PageCrawler;
-import fitnesse.wiki.PageData;
-import fitnesse.wiki.PathParser;
-import fitnesse.wiki.WikiPage;
-import fitnesse.wiki.WikiPageProperties;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
public class TitleWikiPageFinderTest implements TraversalListener<WikiPage> {
WikiPage root;
@@ -38,7 +31,6 @@ public void setUp() throws Exception {
crawler.addPage(root, PathParser.parse("PageOne.PageOneChild"), "PageChild is a child of PageOne");
pageTwo = crawler.addPage(root, PathParser.parse("PageTwo"), "PageTwo has a bit of content too\n^PageOneChild");
PageData data = pageTwo.getData();
- data.setAttribute(WikiPageProperties.VIRTUAL_WIKI_ATTRIBUTE, "http://localhost:" + FitNesseUtil.PORT + "/PageOne");
pageTwo.commit(data);
hits.clear();
}
View
16 src/fitnesse/components/WhereUsedPageFinderTest.java
@@ -1,14 +1,13 @@
package fitnesse.components;
-import java.util.ArrayList;
-import java.util.List;
-
-import util.RegexTestCase;
-import fitnesse.testutil.FitNesseUtil;
import fitnesse.wiki.InMemoryPage;
import fitnesse.wiki.PageCrawler;
import fitnesse.wiki.PathParser;
import fitnesse.wiki.WikiPage;
+import util.RegexTestCase;
+
+import java.util.ArrayList;
+import java.util.List;
public class WhereUsedPageFinderTest extends RegexTestCase implements TraversalListener<WikiPage> {
@@ -73,11 +72,4 @@ public void testWordsNotFoundInPreprocessedText() throws Exception {
assertEquals(0, resultList.size());
}
- public void testDontLookForReferencesInVirtualPages() throws Exception {
- FitNesseUtil.bindVirtualLinkToPage(pageOne, pageTwo);
- whereUsed = new WhereUsedPageFinder(pageOne, this);
- whereUsed.search(pageOne);
- assertEquals(0, hits.size());
- }
-
}
View
44 src/fitnesse/html/HtmlTableListingBuilder.java
@@ -1,44 +0,0 @@
-// 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;
-
-public class HtmlTableListingBuilder {
- private int shade = 0;
- private HtmlTag table;
-
- public HtmlTableListingBuilder() {
- makeTable();
- }
-
- public HtmlTag getTable() {
- return table;
- }
-
- private HtmlTag makeTable() {
- table = new HtmlTag("table");
- table.addAttribute("border", "0");
- table.addAttribute("cellspacing", "0");
- table.addAttribute("class", "dirListing");
- return table;
- }
-
- public void addRow(HtmlElement[] rowItems) {
- HtmlTag row = new HtmlTag("tr");
- addShade(row);
-
- HtmlTag cell = null;
- for (HtmlElement rowItem : rowItems) {
- cell = new HtmlTag("td", rowItem);
- row.add(cell);
- }
- cell.addAttribute("style", "text-align: right;");
- table.add(row);
- }
-
- private void addShade(HtmlTag row) {
- if (shade++ % 2 == 0)
- row.addAttribute("style", "background-color: #EFEFEF;");
- else
- row.addAttribute("style", "background-color: #FFFFFF;");
- }
-}
View
305 src/fitnesse/junit/FitNesseSuite.java
@@ -5,10 +5,20 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import java.util.ArrayList;
import java.util.List;
+import fitnesse.ComponentFactory;
+import fitnesse.FitNesseContext;
+import fitnesse.FitNesseContext.Builder;
+import fitnesse.WikiPageFactory;
+import fitnesse.authentication.PromiscuousAuthenticator;
+import fitnesse.responders.run.SuiteContentsFinder;
+import fitnesse.wiki.PageCrawler;
+import fitnesse.wiki.PathParser;
+import fitnesse.wiki.WikiPage;
+import fitnesse.wiki.WikiPagePath;
import junit.framework.AssertionFailedError;
-
import org.junit.runner.Description;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunNotifier;
@@ -16,89 +26,88 @@
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.RunnerBuilder;
-import fitnesse.responders.run.JavaFormatter;
+public class FitNesseSuite extends ParentRunner<String> {
+
+ /**
+ * The <code>Name</code> annotation specifies the name of the Fitnesse suite
+ * to be run, e.g.: MySuite.MySubSuite
+ */
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.TYPE)
+ public @interface Name {
+ public String value();
+ }
+
+ /**
+ * The <code>DebugMode</code> annotation specifies whether the test is run
+ * with the REST debug option. Default is true
+ */
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.TYPE)
+ public @interface DebugMode {
+ public boolean value();
+ }
+
+ /**
+ * The <code>SuiteFilter</code> annotation specifies the suite filter of the Fitnesse suite
+ * to be run, e.g.: fasttests
+ */
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.TYPE)
+ public @interface SuiteFilter {
+ public String value();
+ }
-public class FitNesseSuite extends ParentRunner<String>{
+ /**
+ * The <code>ExcludeSuiteFilter</code> annotation specifies a filter for excluding tests from the Fitnesse suite
+ * to be run, e.g.: slowtests
+ */
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.TYPE)
+ public @interface ExcludeSuiteFilter {
+ public String value();
+ }
/**
- * The <code>Name</code> annotation specifies the name of the Fitnesse suite
- * to be run, e.g.: MySuite.MySubSuite
- */
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.TYPE)
- public @interface Name {
- public String value();
- }
-
- /**
- * The <code>DebugMode</code> annotation specifies whether the test is run
- * with the REST debug option. Default is true
- */
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.TYPE)
- public @interface DebugMode {
- public boolean value();
- }
-
- /**
- * The <code>SuiteFilter</code> annotation specifies the suite filter of the Fitnesse suite
- * to be run, e.g.: fasttests
- */
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.TYPE)
- public @interface SuiteFilter {
- public String value();
- }
-
- /**
- * The <code>ExcludeSuiteFilter</code> annotation specifies a filter for excluding tests from the Fitnesse suite
- * to be run, e.g.: slowtests
- */
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.TYPE)
- public @interface ExcludeSuiteFilter {
- public String value();
- }
-
- /**
- * The <code>FitnesseDir</code> annotation specifies the absolute or relative
- * path to the directory in which FitNesseRoot can be found
- */
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.TYPE)
- public @interface FitnesseDir {
- public String value();
- }
-
- /**
- * The <code>OutputDir</code> annotation specifies where the html reports of
- * run suites and tests will be found after running them. You can either
- * specify a relative or absolute path directly, e.g.:
- * <code>@OutputDir("/tmp/trinidad-results")</code>, or you can specify a
- * system property the content of which will be taken as base dir and
- * optionally give a path extension, e.g.:
- * <code>@OutputDir(systemProperty = "java.io.tmpdir", pathExtension = "trinidad-results")</code>
- */
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.TYPE)
- public @interface OutputDir {
- public String value() default "";
-
- public String systemProperty() default "";
-
- public String pathExtension() default "";
- }
-
- /**
- * The <code>Port</code> annotation specifies the port used by the FitNesse
- * server. Default is the standard FitNesse port.
- */
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.TYPE)
- public @interface Port {
- public int value() default 0;
- public String systemProperty() default "";
- }
+ * The <code>FitnesseDir</code> annotation specifies the absolute or relative
+ * path to the directory in which FitNesseRoot can be found
+ */
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.TYPE)
+ public @interface FitnesseDir {
+ public String value();
+ }
+
+ /**
+ * The <code>OutputDir</code> annotation specifies where the html reports of
+ * run suites and tests will be found after running them. You can either
+ * specify a relative or absolute path directly, e.g.: <code>@OutputDir("/tmp/trinidad-results")</code>, or you can
+ * specify a
+ * system property the content of which will be taken as base dir and
+ * optionally give a path extension, e.g.:
+ * <code>@OutputDir(systemProperty = "java.io.tmpdir", pathExtension = "trinidad-results")</code>
+ */
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.TYPE)
+ public @interface OutputDir {
+ public String value() default "";
+
+ public String systemProperty() default "";
+
+ public String pathExtension() default "";
+ }
+
+ /**
+ * The <code>Port</code> annotation specifies the port used by the FitNesse
+ * server. Default is the standard FitNesse port.
+ */
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.TYPE)
+ public @interface Port {
+ public int value() default 0;
+
+ public String systemProperty() default "";
+ }
private final Class<?> suiteClass;
private final String suiteName;
@@ -108,53 +117,81 @@
private String excludeSuiteFilter;
private boolean debugMode = false;
private int port = 0;
+ private List<String> children;
+
public FitNesseSuite(Class<?> suiteClass, RunnerBuilder builder) throws InitializationError {
super(suiteClass);
this.suiteClass = suiteClass;
- this.suiteName=getSuiteName(suiteClass);
- this.fitNesseDir=getFitnesseDir(suiteClass);
- this.outputDir=getOutputDir(suiteClass);
- this.suiteFilter=getSuiteFilter(suiteClass);
- this.excludeSuiteFilter=getExcludeSuiteFilter(suiteClass);
- this.debugMode=useDebugMode(suiteClass);
- this.port=getPort(suiteClass);
- }
-
+ this.suiteName = getSuiteName(suiteClass);
+ this.fitNesseDir = getFitnesseDir(suiteClass);
+ this.outputDir = getOutputDir(suiteClass);
+ this.suiteFilter = getSuiteFilter(suiteClass);
+ this.excludeSuiteFilter = getExcludeSuiteFilter(suiteClass);
+ this.debugMode = useDebugMode(suiteClass);
+ this.port = getPort(suiteClass);
+
+ try {
+ FitNesseContext context = initContext(this.fitNesseDir, port);
+ this.children = initChildren(context);
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ private List<String> initChildren(FitNesseContext context) {
+ WikiPagePath path = PathParser.parse(this.suiteName);
+ PageCrawler crawler = context.root.getPageCrawler();
+ WikiPage suiteRoot = crawler.getPage(context.root, path);
+ if (!suiteRoot.getData().hasAttribute("Suite")) {
+ throw new IllegalArgumentException("page " + this.suiteName + " is not a suite");
+ }
+ WikiPage root = crawler.getPage(context.root, PathParser.parse("."));
+ List<WikiPage> pages = new SuiteContentsFinder(suiteRoot, null, root).getAllPagesToRunForThisSuite();
+
+ List<String> testPages = new ArrayList<String>();
+ for (WikiPage wp : pages) {
+ testPages.add(crawler.getFullPath(wp).toString());
+ }
+ return testPages;
+ }
+
@Override
protected Description describeChild(String child) {
return Description.createTestDescription(suiteClass, child);
}
-
+
@Override
protected List<String> getChildren() {
- return JavaFormatter.getInstance(suiteName).getTestsExecuted();
+ return this.children;
}
-
+
static String getFitnesseDir(Class<?> klass)
- throws InitializationError {
+ throws InitializationError {
FitnesseDir fitnesseDirAnnotation = klass.getAnnotation(FitnesseDir.class);
if (fitnesseDirAnnotation == null) {
throw new InitializationError("There must be a @FitnesseDir annotation");
}
return fitnesseDirAnnotation.value();
}
+
static String getSuiteFilter(Class<?> klass)
- throws InitializationError {
+ throws InitializationError {
SuiteFilter suiteFilterAnnotation = klass.getAnnotation(SuiteFilter.class);
if (suiteFilterAnnotation == null) {
return null;
}
return suiteFilterAnnotation.value();
}
+
static String getExcludeSuiteFilter(Class<?> klass)
- throws InitializationError {
+ throws InitializationError {
ExcludeSuiteFilter excludeSuiteFilterAnnotation = klass.getAnnotation(ExcludeSuiteFilter.class);
if (excludeSuiteFilterAnnotation == null) {
return null;
}
return excludeSuiteFilterAnnotation.value();
}
-
+
static String getSuiteName(Class<?> klass) throws InitializationError {
Name nameAnnotation = klass.getAnnotation(Name.class);
if (nameAnnotation == null) {
@@ -162,6 +199,7 @@ static String getSuiteName(Class<?> klass) throws InitializationError {
}
return nameAnnotation.value();
}
+
static String getOutputDir(Class<?> klass) throws InitializationError {
OutputDir outputDirAnnotation = klass.getAnnotation(OutputDir.class);
if (outputDirAnnotation == null) {
@@ -176,8 +214,8 @@ static String getOutputDir(Class<?> klass) throws InitializationError {
return outputDir.getAbsolutePath();
}
throw new InitializationError(
- "In annotation @OutputDir you have to specify either 'value' or 'systemProperty'");
- }
+ "In annotation @OutputDir you have to specify either 'value' or 'systemProperty'");
+ }
public static boolean useDebugMode(Class<?> klass) {
DebugMode debugModeAnnotation = klass.getAnnotation(DebugMode.class);
@@ -200,35 +238,68 @@ public static int getPort(Class<?> klass) {
}
@Override
- public void run(final RunNotifier notifier) {
- JUnitHelper helper=createJUnitHelper(notifier);
- try{
- helper.assertSuitePasses(suiteName, suiteFilter, excludeSuiteFilter);
- }catch(AssertionFailedError e){
- notifier.fireTestFailure(new Failure(Description.createSuiteDescription(suiteClass),e));
- } catch (Exception e) {
- notifier.fireTestFailure(new Failure(Description.createSuiteDescription(suiteClass),e));
- }
+ public void run(final RunNotifier notifier) {
+ if (isFilteredForChildTest()) {
+ super.run(notifier);
+ } else {
+ runFullSuite(notifier);
+ }
+ }
+
+ protected void runFullSuite(final RunNotifier notifier) {
+ JUnitHelper helper = createJUnitHelper(notifier);
+ try {
+ helper.assertSuitePasses(suiteName, suiteFilter, excludeSuiteFilter);
+ } catch (AssertionFailedError e) {
+ notifier.fireTestFailure(new Failure(Description.createSuiteDescription(suiteClass), e));
+ } catch (Exception e) {
+ notifier.fireTestFailure(new Failure(Description.createSuiteDescription(suiteClass), e));
+ }
+ }
+
+ private boolean isFilteredForChildTest() {
+ return getDescription().getChildren().size() < getChildren().size();
}
@Override
protected void runChild(String test, RunNotifier notifier) {
- JUnitHelper helper=createJUnitHelper(notifier);
- try{
- helper.assertTestPasses(suiteName);
- }catch(AssertionFailedError e){
- notifier.fireTestFailure(new Failure(Description.createSuiteDescription(suiteClass),e));
+ JUnitHelper helper = createJUnitHelper(notifier);
+ try {
+ helper.assertTestPasses(test);
+ } catch (AssertionFailedError e) {
+ notifier.fireTestFailure(new Failure(Description.createSuiteDescription(suiteClass), e));
} catch (Exception e) {
- notifier.fireTestFailure(new Failure(Description.createSuiteDescription(suiteClass),e));
+ notifier.fireTestFailure(new Failure(Description.createSuiteDescription(suiteClass), e));
}
}
private JUnitHelper createJUnitHelper(final RunNotifier notifier) {
- JUnitHelper jUnitHelper = new JUnitHelper(this.fitNesseDir, this.outputDir, new JUnitRunNotifierResultsListener(notifier,suiteClass));
+ JUnitHelper jUnitHelper = new JUnitHelper(this.fitNesseDir, this.outputDir, new JUnitRunNotifierResultsListener(notifier, suiteClass));
jUnitHelper.setDebugMode(debugMode);
jUnitHelper.setPort(port);
return jUnitHelper;
}
-
-}
+ private static FitNesseContext initContext(String rootPath, int port) throws Exception {
+ Builder builder = new Builder();
+ WikiPageFactory wikiPageFactory = new WikiPageFactory();
+ ComponentFactory componentFactory = new ComponentFactory(rootPath);
+
+ builder.port = port;
+ builder.rootPath = rootPath;
+ builder.rootDirectoryName = "FitNesseRoot";
+
+ builder.pageTheme = componentFactory.getProperty(ComponentFactory.THEME);
+ builder.defaultNewPageContent = componentFactory
+ .getProperty(ComponentFactory.DEFAULT_NEWPAGE_CONTENT);
+
+ builder.root = wikiPageFactory.makeRootPage(builder.rootPath,
+ builder.rootDirectoryName, componentFactory);
+
+ builder.logger = null;
+ builder.authenticator = new PromiscuousAuthenticator();
+
+ FitNesseContext context = builder.createFitNesseContext();
+ return context;
+ }
+}
View
2  src/fitnesse/junit/TestHelper.java
@@ -42,7 +42,7 @@ public TestSummary run(String pageName, String pageType, String suiteFilter, in
}
public TestSummary run(String pageName, String pageType, String suiteFilter, String excludeSuiteFilter, int port) throws Exception{
JavaFormatter testFormatter=JavaFormatter.getInstance(pageName);
- testFormatter.setResultsRepository(new JavaFormatter.FolderResultsRepository(outputPath,fitNesseRootPath));
+ testFormatter.setResultsRepository(new JavaFormatter.FolderResultsRepository(outputPath));
testFormatter.setListener(resultListener);
Arguments arguments=new Arguments();
arguments.setDaysTillVersionsExpire("0");
View
37 src/fitnesse/resources/css/fitnesse_wiki.css
@@ -193,3 +193,40 @@ table.fit_table tr td {border: solid 1px grey; padding: 2px 2px 2px 2px;}
.fit_keyword {color: #1010A0;}
.fit_member {color: #208080;}
.fit_SUT {color: #808020;}
+
+/* Diff styling */
+
+table.diff_table tr td {border: 0px; padding: 0px 0px 0px 0px;}
+
+.diff_table {
+ margin: 0px;
+ padding: 0px;
+ border: 1px;
+ border-spacing: 0px;
+ font-family: monospace;
+ font-size: 125%;
+}
+
+.diff_line {
+ padding-bottom: 0px;
+ padding-top: 0px;
+ white-space: pre;
+ background: #D6D0D2;
+}
+
+.diff_chunk_header {
+ background: #C0C0C0;
+ font-weight: bold;
+}
+
+.diff_line_added {
+ background: #B3FCC1;
+ color: #000000;
+ font-weight: bold;
+}
+
+.diff_line_removed {
+ background: #FFCBDB;
+ color: #CC5478;
+ font-weight: bold;
+}
View
BIN  src/fitnesse/resources/images/symlinkDiagram.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
19 src/fitnesse/resources/templates/compareVersions.vm
@@ -0,0 +1,19 @@
+<h2>Comparing version $original to $revised</h2>
+
+<table class="diff_table">
+ #foreach($line in $differences)
+ #set($class = "diff_line")
+ #if($line.startsWith("-") && !$line.startsWith("---"))
+ #set($class = "${class} diff_line_removed")
+ #end
+ #if($line.startsWith("+") && !$line.startsWith("+++"))
+ #set($class = "${class} diff_line_added")
+ #end
+ #if($line.startsWith("@@") || $line.startsWith("---") || $line.startsWith("+++"))
+ #set($class = "${class} diff_chunk_header")
+ #end
+ <tr>
+ <td class="$class">$line</td>
+ </tr>
+ #end
+</table>
View
4 src/fitnesse/resources/templates/compareVersionsNav.vm
@@ -0,0 +1,4 @@
+<ul>
+ <li ><a href="$localPath?responder=versions">Versions</a></li>
+ <li ><a href="$localPath">Get out</a></li>
+</ul>
View
5 src/fitnesse/resources/templates/propertiesPage.vm
@@ -47,11 +47,6 @@
<label for="Suites">Tags:</label>
<input type="text" id="Suites" title="Separate tags by a comma" name="Suites"#value( "Suites" ) size="70"/>
</fieldset>
-
- <fieldset>
- <label for="VirtualWiki">VirtualWiki URL:</label>
- <input type="text" id="VirtualWiki" name="VirtualWiki" value="$!virtualWikiValue" size="70"/> <strong>(DEPRECATED)</strong>
- </fieldset>
</div>
<fieldset class="buttons">
<input type="submit" name="Save" value="Save Properties" accesskey="s"/>
View
8 src/fitnesse/resources/templates/versionNav.vm
@@ -1,4 +1,10 @@
<ul>
+ #if( $!nextVersion )
+ <li ><a href="$localPath?responder=viewVersion&version=$nextVersion">Next</a></li>
+ #end
+ #if( $!previousVersion )
+ <li ><a href="$localPath?responder=viewVersion&version=$previousVersion">Previous</a></li>
+ #end
<li ><a href="$localPath?responder=rollback&version=$rollbackVersion">Rollback</a></li>
<li ><a href="$localPath">Get out</a></li>
-</ul>
+</ul>
View
53 src/fitnesse/resources/templates/versionSelection.vm
@@ -1,25 +1,30 @@
<h2>Select a version</h2>
-<table>
- <thead>
- <tr>
- <th>Name</th>
- <th>Author</th>
- <th>Age</th>
- <th>&nbsp;</th>
- </tr>
- </thead>
- <tbody>
- #foreach( $version in $versions )
- <tr>
- <td>$version.name</td>
- <td>$version.author</td>
- <td>$version.age</td>
- <td><a href="?responder=viewVersion&amp;version=$version.name">view</a></td>
- </tr>
- #end
- </tbody>
-</table>
-
-<fieldset>
- <a class="button" href="$viewLocation">Cancel</a>
-</fieldset>
+<form action= "" method="get" name="compareVersions">
+ <fieldset class="buttons">
+ <input type="hidden" value="compareVersions" name="responder"/>
+ <input type="submit" value="Compare" />
+ <a class="button" href="$viewLocation">Cancel</a>
+ </fieldset>
+ <table>
+ <thead>
+ <tr>
+ <th>Compare</th>
+ <th>Name</th>
+ <th>Author</th>
+ <th>Age</th>
+ <th>&nbsp;</th>
+ </tr>
+ </thead>
+ <tbody>
+ #foreach( $version in $versions )
+ <tr>
+ <td><input type="checkbox" name="Version_$version.name"/></td>
+ <td>$version.name</td>
+ <td>$version.author</td>
+ <td>$version.age</td>
+ <td><a href="?responder=viewVersion&amp;version=$version.name">view</a></td>
+ </tr>
+ #end
+ </tbody>
+ </table>
+</form>
View
16 src/fitnesse/resources/wysiwyg/testcase.js
@@ -236,10 +236,24 @@ $(function() {
unit.add("link with markup", function() {
var dom = fragment(
element("p", a("LinkPage", element("i", "label"))));
- generateFragment.call(this, dom,
+ generate.call(this, dom,
"[[''label''][LinkPage]]");
});
+ unit.add("link with hash", function() {
+ var dom = fragment(
+ element("p", a("LinkPage#foo", "label")));
+ generate.call(this, dom,
+ "[[label][LinkPage#foo]]");
+ });
+
+ unit.add("link with parameter", function() {
+ var dom = fragment(
+ element("p", a("LinkPage?edit&test", "label")));
+ generate.call(this, dom,
+ "[[label][LinkPage?edit&test]]");
+ });
+
unit.add("wiki macros", function() {
var dom = fragment(
element("table", element("tbody",
View
11 src/fitnesse/resources/wysiwyg/wysiwyg.js
@@ -2600,16 +2600,11 @@ Wysiwyg.prototype.domToWikitext = function (root, options) {
if (!/\]/.test(label) && !/^[\"\']/.test(label)) {
return "[[" + label + "][" + link + "]]";
}
- if (!/\"/.test(label)) {
- return "[[" + label + ']["' + link + '"]]';
- }
- if (!/\'/.test(label)) {
- return "[[" + label + "]['" + link + "']]";
- }
- return "[[" + label.replace(/"+/g, "") + ' ]["' + link + '"]]';
+ return "[[" + label.replace(/"+/g, "") + "][" + link + "]]";
}
function pushAnchor(node, bracket) {
+ var _texts = texts;
var link = node.getAttribute("data-wysiwyg-link");
var autolink = node.getAttribute("data-wysiwyg-autolink");
@@ -2628,7 +2623,7 @@ Wysiwyg.prototype.domToWikitext = function (root, options) {
if (text === null) {
text = linkText(link, label);
}
- pushTextWithDecorations(text, node);
+ _texts.push(text);
}
function string(source, times) {
View
5 src/fitnesse/responders/ImportAndViewResponder.java
@@ -2,8 +2,6 @@
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.responders;
-import java.net.MalformedURLException;
-
import fitnesse.FitNesseContext;
import fitnesse.authentication.SecureOperation;
import fitnesse.authentication.SecureReadOperation;
@@ -13,6 +11,8 @@
import fitnesse.http.SimpleResponse;
import fitnesse.wiki.*;
+import java.net.MalformedURLException;
+
public class ImportAndViewResponder implements SecureResponder, WikiImporterClient {
private WikiPage page;
@@ -36,7 +36,6 @@ public Response makeResponse(FitNesseContext context, Request request) throws Ma
protected void loadPage(String resource, FitNesseContext context) {
WikiPagePath path = PathParser.parse(resource);
PageCrawler crawler = context.root.getPageCrawler();
- crawler.setDeadEndStrategy(new VirtualEnabledPageCrawler());
page = crawler.getPage(context.root, path);
}
View
2  src/fitnesse/responders/ResponderFactory.java
@@ -38,6 +38,7 @@
import fitnesse.responders.testHistory.SuiteOverviewResponder;
import fitnesse.responders.testHistory.TestHistoryResponder;
import fitnesse.responders.versions.RollbackResponder;
+import fitnesse.responders.versions.VersionComparerResponder;
import fitnesse.responders.versions.VersionResponder;
import fitnesse.responders.versions.VersionSelectionResponder;
import fitnesse.wiki.WikiPage;
@@ -97,6 +98,7 @@ public ResponderFactory(String rootPath) {
addResponder("compareHistory", HistoryComparerResponder.class);
addResponder("replace", SearchReplaceResponder.class);
addResponder("overview", SuiteOverviewResponder.class);
+ addResponder("compareVersions", VersionComparerResponder.class);
}
public void addResponder(String key, String responderClassName) throws ClassNotFoundException {
View
25 src/fitnesse/responders/ResponderFactoryTest.java
@@ -9,7 +9,10 @@
import fitnesse.responders.files.*;
import fitnesse.responders.refactoring.*;
import fitnesse.responders.run.*;
-import fitnesse.responders.search.*;
+import fitnesse.responders.search.ExecuteSearchPropertiesResponder;
+import fitnesse.responders.search.SearchFormResponder;
+import fitnesse.responders.search.SearchResponder;
+import fitnesse.responders.search.WhereUsedResponder;
import fitnesse.responders.testHistory.HistoryComparerResponder;
import fitnesse.responders.testHistory.PageHistoryResponder;
import fitnesse.responders.testHistory.PurgeHistoryResponder;
@@ -17,15 +20,18 @@
import fitnesse.responders.versions.RollbackResponder;
import fitnesse.responders.versions.VersionResponder;
import fitnesse.responders.versions.VersionSelectionResponder;
-import fitnesse.testutil.FitNesseUtil;
-import fitnesse.wiki.*;
-import static org.junit.Assert.assertEquals;
+import fitnesse.wiki.InMemoryPage;
+import fitnesse.wiki.PageCrawler;
+import fitnesse.wiki.WikiPage;
+import fitnesse.wiki.WikiPageDummy;
import org.junit.Before;
import org.junit.Test;
import util.FileUtil;
import java.io.File;
+import static org.junit.Assert.assertEquals;
+
public class ResponderFactoryTest {
private ResponderFactory factory;
private MockRequest request;
@@ -269,17 +275,6 @@ public void testReplaceResponder() throws Exception {
}
@Test
- public void testWillDisplayVirtualPages() throws Exception {
- WikiPage root = InMemoryPage.makeRoot("RooT");
- WikiPage page1 = crawler.addPage(root, PathParser.parse("PageOne"));
- crawler.addPage(page1, PathParser.parse("ChildOne"), "child content");
- WikiPage page2 = crawler.addPage(root, PathParser.parse("PageTwo"));
- FitNesseUtil.bindVirtualLinkToPage(page2, page1);
- request.setResource("PageTwo.ChildOne");
- assertResponderType(WikiPageResponder.class, root);
- }
-
- @Test
public void testNotFoundResponder() throws Exception {
request.setResource("somepage");
assertResponderType(NotFoundResponder.class, root);
View
4 src/fitnesse/responders/WikiPageResponder.java
@@ -11,14 +11,13 @@
import fitnesse.http.Response;
import fitnesse.http.SimpleResponse;
import fitnesse.responders.editing.EditResponder;
-import fitnesse.testsystems.TestPage;
import fitnesse.responders.templateUtilities.HtmlPage;
import fitnesse.responders.templateUtilities.PageTitle;
+import fitnesse.testsystems.TestPage;
import fitnesse.testsystems.TestPageWithSuiteSetUpAndTearDown;
import fitnesse.wiki.PageCrawler;
import fitnesse.wiki.PageData;
import fitnesse.wiki.PathParser;
-import fitnesse.wiki.VirtualEnabledPageCrawler;
import fitnesse.wiki.WikiImportProperty;
import fitnesse.wiki.WikiPage;
import fitnesse.wiki.WikiPageActions;
@@ -39,7 +38,6 @@ public Response makeResponse(FitNesseContext context, Request request) {
protected void loadPage(String pageName, FitNesseContext context) {
WikiPagePath path = PathParser.parse(pageName);
crawler = context.root.getPageCrawler();
- crawler.setDeadEndStrategy(new VirtualEnabledPageCrawler());
page = crawler.getPage(context.root, path);
}
View
37 src/fitnesse/responders/WikiPageResponderTest.java
@@ -10,15 +10,7 @@
import fitnesse.http.MockRequest;
import fitnesse.http.SimpleResponse;
import fitnesse.testutil.FitNesseUtil;
-import fitnesse.wiki.InMemoryPage;
-import fitnesse.wiki.PageCrawler;
-import fitnesse.wiki.PageData;
-import fitnesse.wiki.PageVersionPruner;
-import fitnesse.wiki.PathParser;
-import fitnesse.wiki.VirtualCouplingExtensionTest;
-import fitnesse.wiki.WikiImportProperty;
-import fitnesse.wiki.WikiPage;
-import fitnesse.wiki.WikiPageProperties;
+import fitnesse.wiki.*;
import util.RegexTestCase;
public class WikiPageResponderTest extends RegexTestCase {
@@ -121,33 +113,6 @@ private SimpleResponse requestPage(String name) throws Exception {
return (SimpleResponse) responder.makeResponse(context, request);
}
- public void testShouldGetVirtualPage() throws Exception {
- final WikiPage pageOne = crawler.addPage(root, PathParser.parse("TargetPage"), "some content");
- crawler.addPage(pageOne, PathParser.parse("ChildPage"), "child content");
- final WikiPage linkerPage = crawler.addPage(root, PathParser.parse("LinkerPage"), "linker content");
- FitNesseUtil.bindVirtualLinkToPage(linkerPage, pageOne);
- final SimpleResponse response = requestPage("LinkerPage.ChildPage");
-
- assertSubString("child content", response.getContent());
- }
-
- public void testVirtualPageIndication() throws Exception {
- final WikiPage targetPage = crawler.addPage(root, PathParser.parse("TargetPage"));
- crawler.addPage(targetPage, PathParser.parse("ChildPage"));
- final WikiPage linkPage = crawler.addPage(root, PathParser.parse("LinkPage"));
- VirtualCouplingExtensionTest.setVirtualWiki(linkPage, "http://localhost:" + FitNesseUtil.PORT + "/TargetPage");
-
- FitNesseUtil.startFitnesse(root);
- SimpleResponse response = null;
- try {
- response = requestPage("LinkPage.ChildPage");
- } finally {
- FitNesseUtil.stopFitnesse();
- }
-
- assertSubString("<body class=\"virtual\">", response.getContent());
- }
-
public void testImportedPageIndication() throws Exception {
final WikiPage page = crawler.addPage(root, PathParser.parse("SamplePage"));
final PageData data = page.getData();
View
44 src/fitnesse/responders/editing/PropertiesResponder.java
@@ -2,16 +2,6 @@
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.responders.editing;
-import static fitnesse.wiki.PageData.*;
-import static fitnesse.wiki.PageType.*;
-
-import java.util.Set;
-import java.util.List;
-import java.util.ArrayList;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
import fitnesse.FitNesseContext;
import fitnesse.authentication.SecureOperation;
import fitnesse.authentication.SecureReadOperation;
@@ -22,17 +12,18 @@
import fitnesse.responders.NotFoundResponder;
import fitnesse.responders.templateUtilities.HtmlPage;
import fitnesse.responders.templateUtilities.PageTitle;
-import fitnesse.wiki.MockingPageCrawler;
-import fitnesse.wiki.PageCrawler;
-import fitnesse.wiki.PageData;
-import fitnesse.wiki.PathParser;