Pimki 1.3.092 → 1.4.092

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/README +145 -131
  2. data/README-PIMKI +15 -5
  3. data/app/controllers/wiki.rb +167 -54
  4. data/app/models/author.rb +3 -3
  5. data/app/models/chunks/chunk.rb +3 -3
  6. data/app/models/chunks/engines.rb +18 -21
  7. data/app/models/chunks/include.rb +29 -29
  8. data/app/models/chunks/literal.rb +20 -20
  9. data/app/models/chunks/match.rb +19 -19
  10. data/app/models/chunks/nowiki.rb +31 -31
  11. data/app/models/chunks/nowiki_test.rb +14 -14
  12. data/app/models/chunks/test.rb +18 -18
  13. data/app/models/chunks/todo.rb +44 -23
  14. data/app/models/chunks/uri.rb +97 -97
  15. data/app/models/chunks/uri_test.rb +92 -92
  16. data/app/models/chunks/wiki.rb +4 -4
  17. data/app/models/chunks/wiki_symbols.rb +22 -22
  18. data/app/models/chunks/wiki_test.rb +36 -36
  19. data/app/models/page.rb +39 -7
  20. data/app/models/page_lock.rb +23 -23
  21. data/app/models/page_set.rb +72 -72
  22. data/app/models/page_test.rb +75 -75
  23. data/app/models/revision.rb +1 -1
  24. data/app/models/revision_test.rb +251 -251
  25. data/app/models/web.rb +19 -6
  26. data/app/models/web_test.rb +52 -52
  27. data/app/models/wiki_content.rb +131 -119
  28. data/app/models/wiki_service.rb +31 -16
  29. data/app/models/wiki_service_test.rb +15 -15
  30. data/app/models/wiki_words.rb +1 -1
  31. data/app/models/wiki_words_test.rb +12 -12
  32. data/app/views/bottom.rhtml +3 -3
  33. data/app/views/markdown_help.rhtml +15 -15
  34. data/app/views/menu.rhtml +20 -20
  35. data/app/views/navigation.rhtml +26 -26
  36. data/app/views/rdoc_help.rhtml +15 -15
  37. data/app/views/static_style_sheet.rhtml +237 -237
  38. data/app/views/style.rhtml +178 -178
  39. data/app/views/textile_help.rhtml +27 -27
  40. data/app/views/top.rhtml +7 -2
  41. data/app/views/wiki/authors.rhtml +15 -15
  42. data/app/views/wiki/bliki.rhtml +101 -101
  43. data/app/views/wiki/bliki_edit.rhtml +3 -0
  44. data/app/views/wiki/bliki_new.rhtml +3 -0
  45. data/app/views/wiki/bliki_revision.rhtml +90 -90
  46. data/app/views/wiki/edit.rhtml +12 -3
  47. data/app/views/wiki/edit_menu.rhtml +64 -47
  48. data/app/views/wiki/edit_web.rhtml +65 -18
  49. data/app/views/wiki/export.rhtml +14 -14
  50. data/app/views/wiki/feeds.rhtml +10 -10
  51. data/app/views/wiki/list.rhtml +17 -15
  52. data/app/views/wiki/locked.rhtml +13 -13
  53. data/app/views/wiki/login.rhtml +10 -10
  54. data/app/views/wiki/mind.rhtml +0 -1
  55. data/app/views/wiki/new.rhtml +8 -3
  56. data/app/views/wiki/new_system.rhtml +77 -77
  57. data/app/views/wiki/new_web.rhtml +63 -63
  58. data/app/views/wiki/page.rhtml +88 -82
  59. data/app/views/wiki/print.rhtml +15 -15
  60. data/app/views/wiki/published.rhtml +2 -1
  61. data/app/views/wiki/recently_revised.rhtml +31 -31
  62. data/app/views/wiki/revision.rhtml +1 -7
  63. data/app/views/wiki/rollback.rhtml +31 -0
  64. data/app/views/wiki/rss_feed.rhtml +21 -21
  65. data/app/views/wiki/search.rhtml +48 -48
  66. data/app/views/wiki/tex.rhtml +22 -22
  67. data/app/views/wiki/tex_web.rhtml +34 -34
  68. data/app/views/wiki/todo.rhtml +90 -67
  69. data/app/views/wiki/web_list.rhtml +12 -12
  70. data/app/views/wiki_words_help.rhtml +1 -1
  71. data/favicon.png +0 -0
  72. data/libraries/action_controller_servlet.rb +17 -2
  73. data/libraries/bluecloth.rb +1127 -1127
  74. data/libraries/diff/diff.rb +474 -474
  75. data/libraries/diff/diff_test.rb +79 -79
  76. data/libraries/erb.rb +490 -490
  77. data/libraries/madeleine/automatic.rb +418 -357
  78. data/libraries/madeleine/clock.rb +94 -94
  79. data/libraries/madeleine/files.rb +19 -0
  80. data/libraries/madeleine/zmarshal.rb +60 -0
  81. data/libraries/madeleine_service.rb +14 -15
  82. data/libraries/rdocsupport.rb +155 -155
  83. data/libraries/redcloth_for_tex.rb +869 -869
  84. data/libraries/redcloth_for_tex_test.rb +40 -40
  85. data/libraries/view_helper.rb +32 -32
  86. data/libraries/web_controller_server.rb +96 -94
  87. data/pimki.rb +47 -6
  88. metadata +18 -4
@@ -1,73 +1,73 @@
1
- # Container for a set of pages with methods for manipulation.
2
- class PageSet < Array
3
- attr_reader :web
4
-
5
- def initialize(web, pages, accept_proc)
6
- @web = web
7
- if accept_proc.nil? then
8
- super(pages)
9
- else
10
- super(pages.select { |page| accept_proc[page] })
11
- end
12
- end
13
-
14
- def most_recent_revision
15
- self.sort_by { |page| [page.created_at] }.reverse.first.created_at
16
- end
17
-
18
- def by_name
19
- self.sort_by { |page| [page.name] }
20
- end
21
-
22
- def by_revision
23
- self.sort_by { |page| [page.created_at] }.reverse
24
- end
25
-
26
- def by_last_visited #{{{
27
- self.sort_by { |page| [page.last_visited] }.reverse
28
- end #}}}
29
-
30
- def by_most_viewed #{{{
31
- self.sort_by { |page| [page.viewed] }.reverse
32
- end #}}}
33
-
34
-
35
- def pages_that_reference(page_name)
36
- self.select { |page| page.wiki_words.include?(page_name) }
37
- end
38
-
39
- def pages_authored_by(author)
40
- self.select { |page| page.authors.include?(author) }
41
- end
42
-
43
- def characters
44
- self.inject(0) { |chars,page| chars += page.content.size }
45
- end
46
-
47
- # Returns all the orphaned pages in this page set. That is,
48
- # pages in this set for which there is no reference in the web.
49
- # The HomePage and author pages are always assumed to have
50
- # references and so cannot be orphans
51
- def orphaned_pages
52
- references = web.select.wiki_words + ["HomePage"] + web.select.authors
53
- self.reject { |page| references.include?(page.name) }
54
- end
55
-
56
- # Returns all the wiki words in this page set for which
57
- # there are no pages in this page set's web
58
- def wanted_pages
59
- wiki_words - web.select.names
60
- end
61
-
62
- def names
63
- self.map { |page| page.name }
64
- end
65
-
66
- def wiki_words
67
- self.inject([]) { |wiki_words, page| wiki_words << page.wiki_words }.flatten.uniq
68
- end
69
-
70
- def authors
71
- self.inject([]) { |authors, page| authors << page.authors }.flatten.uniq.sort
72
- end
1
+ # Container for a set of pages with methods for manipulation.
2
+ class PageSet < Array
3
+ attr_reader :web
4
+
5
+ def initialize(web, pages, accept_proc)
6
+ @web = web
7
+ if accept_proc.nil? then
8
+ super(pages)
9
+ else
10
+ super(pages.select { |page| accept_proc[page] })
11
+ end
12
+ end
13
+
14
+ def most_recent_revision
15
+ self.sort_by { |page| [page.created_at] }.reverse.first.created_at
16
+ end
17
+
18
+ def by_name
19
+ self.sort_by { |page| [page.name] }
20
+ end
21
+
22
+ def by_revision
23
+ self.sort_by { |page| [page.created_at] }.reverse
24
+ end
25
+
26
+ def by_last_visited #{{{
27
+ self.sort_by { |page| [page.last_visited] }.reverse
28
+ end #}}}
29
+
30
+ def by_most_viewed #{{{
31
+ self.sort_by { |page| [page.viewed] }.reverse
32
+ end #}}}
33
+
34
+
35
+ def pages_that_reference(page_name)
36
+ self.select { |page| page.wiki_words.include?(page_name) }
37
+ end
38
+
39
+ def pages_authored_by(author)
40
+ self.select { |page| page.authors.include?(author) }
41
+ end
42
+
43
+ def characters
44
+ self.inject(0) { |chars,page| chars += page.content.size }
45
+ end
46
+
47
+ # Returns all the orphaned pages in this page set. That is,
48
+ # pages in this set for which there is no reference in the web.
49
+ # The HomePage and author pages are always assumed to have
50
+ # references and so cannot be orphans
51
+ def orphaned_pages
52
+ references = web.select.wiki_words + ["HomePage"] + web.select.authors
53
+ self.reject { |page| references.include?(page.name) }
54
+ end
55
+
56
+ # Returns all the wiki words in this page set for which
57
+ # there are no pages in this page set's web
58
+ def wanted_pages
59
+ wiki_words - web.select.names
60
+ end
61
+
62
+ def names
63
+ self.map { |page| page.name }
64
+ end
65
+
66
+ def wiki_words
67
+ self.inject([]) { |wiki_words, page| wiki_words << page.wiki_words }.flatten.uniq
68
+ end
69
+
70
+ def authors
71
+ self.inject([]) { |authors, page| authors << page.authors }.flatten.uniq.sort
72
+ end
73
73
  end
@@ -1,76 +1,76 @@
1
- require "test/unit"
2
- require "web"
3
- require "page"
4
-
5
- class MockWeb < Web
6
- def initialize() super('test','test') end
7
- def [](wiki_word) %w( MyWay ThatWay SmartEngine ).include?(wiki_word) end
8
- def refresh_pages_with_references(name) end
9
- end
10
-
11
- class PageTest < Test::Unit::TestCase
12
- def setup
13
- @page = Page.new(
14
- MockWeb.new,
15
- "FirstPage",
16
- "HisWay would be MyWay in kinda ThatWay in HisWay though MyWay \\OverThere -- see SmartEngine in that SmartEngineGUI",
17
- Time.local(2004, 4, 4, 16, 50),
18
- "DavidHeinemeierHansson"
19
- )
20
- end
21
-
22
- def test_basics
23
- assert_equal "First Page", @page.plain_name
24
- assert_equal "April 4, 2004", @page.pretty_revised_on
25
- end
26
-
27
- def test_locking
28
- assert !@page.locked?(Time.local(2004, 4, 4, 16, 50))
29
-
30
- @page.lock(Time.local(2004, 4, 4, 16, 30), "DavidHeinemeierHansson")
31
-
32
- assert @page.locked?(Time.local(2004, 4, 4, 16, 50))
33
- assert !@page.locked?(Time.local(2004, 4, 4, 17, 1))
34
-
35
- @page.unlock
36
-
37
- assert !@page.locked?(Time.local(2004, 4, 4, 16, 50))
38
- end
39
-
40
- def test_locking_duration
41
- @page.lock(Time.local(2004, 4, 4, 16, 30), "DavidHeinemeierHansson")
42
-
43
- assert_equal 15, @page.lock_duration(Time.local(2004, 4, 4, 16, 45))
44
- end
45
-
46
- def test_revision
47
- @page.revise("HisWay would be MyWay in kinda lame", Time.local(2004, 4, 4, 16, 55), "MarianneSyhler")
48
- assert_equal 2, @page.revisions.length, "Should have two revisions"
49
- assert_equal "MarianneSyhler", @page.author, "Mary should be the author now"
50
- assert_equal "DavidHeinemeierHansson", @page.revisions.first.author, "David was the first author"
51
- end
52
-
53
- def test_rollback
54
- @page.revise("spot two", Time.now, "David")
55
- @page.revise("spot three", Time.now + 2000, "David")
56
- assert_equal 3, @page.revisions.length, "Should have three revisions"
57
- @page.rollback(1, Time.now)
58
- assert_equal "spot two", @page.content
59
- end
60
-
61
- def test_continous_revision
62
- @page.revise("HisWay would be MyWay in kinda lame", Time.local(2004, 4, 4, 16, 55), "MarianneSyhler")
63
- assert_equal 2, @page.revisions.length
64
-
65
- @page.revise("HisWay would be MyWay in kinda update", Time.local(2004, 4, 4, 16, 57), "MarianneSyhler")
66
- assert_equal 2, @page.revisions.length
67
- assert_equal "HisWay would be MyWay in kinda update", @page.revisions.last.content
68
-
69
- @page.revise("HisWay would be MyWay in the house", Time.local(2004, 4, 4, 16, 58), "DavidHeinemeierHansson")
70
- assert_equal 3, @page.revisions.length
71
- assert_equal "HisWay would be MyWay in the house", @page.revisions.last.content
72
-
73
- @page.revise("HisWay would be MyWay in my way", Time.local(2004, 4, 4, 17, 30), "DavidHeinemeierHansson")
74
- assert_equal 4, @page.revisions.length
75
- end
1
+ require "test/unit"
2
+ require "web"
3
+ require "page"
4
+
5
+ class MockWeb < Web
6
+ def initialize() super('test','test') end
7
+ def [](wiki_word) %w( MyWay ThatWay SmartEngine ).include?(wiki_word) end
8
+ def refresh_pages_with_references(name) end
9
+ end
10
+
11
+ class PageTest < Test::Unit::TestCase
12
+ def setup
13
+ @page = Page.new(
14
+ MockWeb.new,
15
+ "FirstPage",
16
+ "HisWay would be MyWay in kinda ThatWay in HisWay though MyWay \\OverThere -- see SmartEngine in that SmartEngineGUI",
17
+ Time.local(2004, 4, 4, 16, 50),
18
+ "DavidHeinemeierHansson"
19
+ )
20
+ end
21
+
22
+ def test_basics
23
+ assert_equal "First Page", @page.plain_name
24
+ assert_equal "April 4, 2004", @page.pretty_revised_on
25
+ end
26
+
27
+ def test_locking
28
+ assert !@page.locked?(Time.local(2004, 4, 4, 16, 50))
29
+
30
+ @page.lock(Time.local(2004, 4, 4, 16, 30), "DavidHeinemeierHansson")
31
+
32
+ assert @page.locked?(Time.local(2004, 4, 4, 16, 50))
33
+ assert !@page.locked?(Time.local(2004, 4, 4, 17, 1))
34
+
35
+ @page.unlock
36
+
37
+ assert !@page.locked?(Time.local(2004, 4, 4, 16, 50))
38
+ end
39
+
40
+ def test_locking_duration
41
+ @page.lock(Time.local(2004, 4, 4, 16, 30), "DavidHeinemeierHansson")
42
+
43
+ assert_equal 15, @page.lock_duration(Time.local(2004, 4, 4, 16, 45))
44
+ end
45
+
46
+ def test_revision
47
+ @page.revise("HisWay would be MyWay in kinda lame", Time.local(2004, 4, 4, 16, 55), "MarianneSyhler")
48
+ assert_equal 2, @page.revisions.length, "Should have two revisions"
49
+ assert_equal "MarianneSyhler", @page.author, "Mary should be the author now"
50
+ assert_equal "DavidHeinemeierHansson", @page.revisions.first.author, "David was the first author"
51
+ end
52
+
53
+ def test_rollback
54
+ @page.revise("spot two", Time.now, "David")
55
+ @page.revise("spot three", Time.now + 2000, "David")
56
+ assert_equal 3, @page.revisions.length, "Should have three revisions"
57
+ @page.rollback(1, Time.now)
58
+ assert_equal "spot two", @page.content
59
+ end
60
+
61
+ def test_continous_revision
62
+ @page.revise("HisWay would be MyWay in kinda lame", Time.local(2004, 4, 4, 16, 55), "MarianneSyhler")
63
+ assert_equal 2, @page.revisions.length
64
+
65
+ @page.revise("HisWay would be MyWay in kinda update", Time.local(2004, 4, 4, 16, 57), "MarianneSyhler")
66
+ assert_equal 2, @page.revisions.length
67
+ assert_equal "HisWay would be MyWay in kinda update", @page.revisions.last.content
68
+
69
+ @page.revise("HisWay would be MyWay in the house", Time.local(2004, 4, 4, 16, 58), "DavidHeinemeierHansson")
70
+ assert_equal 3, @page.revisions.length
71
+ assert_equal "HisWay would be MyWay in the house", @page.revisions.last.content
72
+
73
+ @page.revise("HisWay would be MyWay in my way", Time.local(2004, 4, 4, 17, 30), "DavidHeinemeierHansson")
74
+ assert_equal 4, @page.revisions.length
75
+ end
76
76
  end
@@ -1,4 +1,5 @@
1
1
 
2
+
2
3
  require "diff/diff"
3
4
 
4
5
  require "wiki_content"
@@ -65,7 +66,6 @@ class Revision
65
66
  # Ensures new version works with older snapshots.
66
67
  def display_content
67
68
  unless @display_cache && @display_cache.respond_to?(:find_chunks)
68
- #$stderr << "Rendering: #{page.name}\n"
69
69
  @display_cache = WikiContent.new(self)
70
70
  end
71
71
  @display_cache
@@ -1,252 +1,252 @@
1
- require "web"
2
- require "test/unit"
3
- require "revision"
4
-
5
- class MockWeb < Web;
6
- attr_accessor :markup
7
- def pages() MockPages.new end
8
- def safe_mode() false end
9
- end
10
- class MockPages
11
- def [](wiki_word) %w( MyWay ThatWay SmartEngine ).include?(wiki_word) end
12
- end
13
- class MockPage
14
- attr_accessor :web, :revisions
15
- def name() "page" end
16
- end
17
-
18
- class RevisionTest < Test::Unit::TestCase
19
-
20
- def setup
21
- @mock_page = MockPage.new
22
- @mock_web = MockWeb.new
23
- @mock_page.web = @mock_web
24
-
25
- @mock_web.markup = :textile
26
-
27
- @revision = Revision.new(
28
- @mock_page,
29
- 1,
30
- "HisWay would be MyWay in kinda ThatWay in HisWay though MyWay \\OverThere -- see SmartEngine in that SmartEngineGUI",
31
- Time.local(2004, 4, 4, 16, 50),
32
- "DavidHeinemeierHansson"
33
- )
34
-
35
- @revision_with_auto_links = Revision.new(
36
- @mock_page,
37
- 1,
38
- "http://www.loudthinking.com/ points to ThatWay from david@loudthinking.com",
39
- Time.local(2004, 4, 4, 16, 50),
40
- "DavidHeinemeierHansson"
41
- )
42
-
43
- @revision_with_aliased_links = Revision.new(
44
- @mock_page,
45
- 1,
46
- "Would a [[SmartEngine|clever motor]] go by any other name?",
47
- Time.local(2004, 4, 4, 16, 50),
48
- "MarkReid"
49
- )
50
-
51
- @revision_with_wiki_word_in_em = Revision.new(
52
- @mock_page,
53
- 1,
54
- "_should we go ThatWay or ThisWay _",
55
- Time.local(2004, 4, 4, 16, 50),
56
- "MarkReid"
57
- )
58
-
59
- @revision_with_pre_blocks = Revision.new(
60
- @mock_page,
61
- 1,
62
- "A <code>class SmartEngine end</code> would not mark up <pre>CodeBlocks</pre>",
63
- Time.local(2004, 4, 4, 16, 50),
64
- "MarkReid"
65
- )
66
-
67
- @revision_with_wikiword_in_tag = Revision.new(
68
- @mock_page,
69
- 1,
70
- "That is some <em style=\"WikiWord\">Stylish Emphasis</em>",
71
- Time.local(2004, 4, 4, 16, 50),
72
- "MarkReid"
73
- )
74
-
75
- @revision_with_autolink_in_parentheses = Revision.new(
76
- @mock_page,
77
- 1,
78
- 'The W3C body (http://www.w3c.org) sets web standards',
79
- Time.local(2004, 4, 4, 16, 50),
80
- "MarkReid"
81
- )
82
-
83
- @revision_with_link_in_parentheses = Revision.new(
84
- @mock_page,
85
- 1,
86
- 'Instiki is a "Wiki Clone":http://www.c2.com/cgi/wiki?WikiWikiClones ("What is a wiki?":http://wiki.org/wiki.cgi?WhatIsWiki) that\'s so easy to setup',
87
- Time.local(2004, 4, 4, 16, 50),
88
- "MarkReid"
89
- )
90
-
91
- @revision_with_image_link = Revision.new(
92
- @mock_page,
93
- 1,
94
- 'This !http://hobix.com/sample.jpg! is a Textile image link.',
95
- Time.local(2004, 4, 4, 16, 50),
96
- "MarkReid"
97
- )
98
-
99
- @revision_with_nowiki_text = Revision.new(
100
- @mock_page,
101
- 1,
102
- 'Do not mark up <nowiki>[[this text]]</nowiki> or <nowiki>http://www.thislink.com</nowiki>.',
103
- Time.local(2004, 4, 4, 16, 50),
104
- "MarkReid"
105
- )
106
-
107
- @revision_with_bracketted_wiki_word = Revision.new(
108
- @mock_page,
109
- 1,
110
- 'This is a WikiWord and a tricky name [[Sperberg-McQueen]].',
111
- Time.local(2004, 4, 4, 16, 50),
112
- "MarkReid"
113
- )
114
-
115
- end
116
-
117
- def test_wiki_words
118
- assert_equal %w( HisWay MyWay SmartEngine SmartEngineGUI ThatWay ), @revision.wiki_words.sort
119
- end
120
-
121
- def test_existing_pages
122
- assert_equal %w( MyWay SmartEngine ThatWay ), @revision.existing_pages.sort
123
- end
124
-
125
- def test_unexisting_pages
126
- assert_equal %w( HisWay SmartEngineGUI ), @revision.unexisting_pages.sort
127
- end
128
-
129
- def test_content_with_wiki_links
130
- assert_equal "<p><span class=\"newWikiWord\">His Way<a href=\"../show/HisWay\">?</a></span> would be <a class=\"existingWikiWord\" href=\"../show/MyWay\">My Way</a> in kinda <a class=\"existingWikiWord\" href=\"../show/ThatWay\">That Way</a> in <span class=\"newWikiWord\">His Way<a href=\"../show/HisWay\">?</a></span> though <a class=\"existingWikiWord\" href=\"../show/MyWay\">My Way</a> OverThere&#8212;see <a class=\"existingWikiWord\" href=\"../show/SmartEngine\">Smart Engine</a> in that <span class=\"newWikiWord\">Smart Engine <span class=\"caps\">GUI</span><a href=\"../show/SmartEngineGUI\">?</a></span></p>", @revision.display_content
131
- end
132
-
133
- def test_bluecloth
134
- @mock_web.markup = :markdown
135
-
136
- @revision = Revision.new(
137
- @mock_page,
138
- 1,
139
- "My Headline\n===========\n\n that SmartEngineGUI",
140
- Time.local(2004, 4, 4, 16, 50),
141
- "DavidHeinemeierHansson"
142
- )
143
-
144
- @revision_with_code_block = Revision.new(
145
- @mock_page,
146
- 1,
147
- "This is a code block:\n def a_method(arg)\n return ThatWay\n\nNice!",
148
- Time.local(2004, 4, 4, 16, 50),
149
- "MarkReid"
150
- )
151
-
152
- assert_equal "<h1>My Headline</h1>\n\n<p>that <span class=\"newWikiWord\">Smart Engine GUI<a href=\"../show/SmartEngineGUI\">?</a></span></p>", @revision.display_content
153
-
154
- assert_equal "<p>This is a code block:</p>\n\n<pre><code>def a_method(arg)\nreturn ThatWay\n</code></pre>\n\n<p>Nice!</p>", @revision_with_code_block.display_content
155
- end
156
-
157
- def test_rdoc
158
- @mock_web.markup = :rdoc
159
-
160
- @revision = Revision.new(
161
- @mock_page,
162
- 1,
163
- "+hello+ that SmartEngineGUI",
164
- Time.local(2004, 4, 4, 16, 50),
165
- "DavidHeinemeierHansson"
166
- )
167
-
168
- assert_equal "<tt>hello</tt> that <span class=\"newWikiWord\">Smart Engine GUI<a href=\"../show/SmartEngineGUI\">?</a></span>\n\n", @revision.display_content
169
- end
170
-
171
- def test_content_with_auto_links
172
- assert_equal "<p><a href=\"http://www.loudthinking.com/\">http://www.loudthinking.com/</a> points to <a class=\"existingWikiWord\" href=\"../show/ThatWay\">That Way</a> from <a href=\"mailto:david@loudthinking.com\">david@loudthinking.com</a></p>", @revision_with_auto_links.display_content
173
- end
174
-
175
- def test_content_with_aliased_links
176
- assert_equal "<p>Would a <a class=\"existingWikiWord\" href=\"../show/SmartEngine\">clever motor</a> go by any other name?</p>", @revision_with_aliased_links.display_content
177
- end
178
-
179
- def test_content_with_wikiword_in_em
180
- assert_equal "<p><em>should we go <a class=\"existingWikiWord\" href=\"../show/ThatWay\">That Way</a> or <span class=\"newWikiWord\">This Way<a href=\"../show/ThisWay\">?</a></span> </em></p>", @revision_with_wiki_word_in_em.display_content
181
- end
182
-
183
- def test_content_with_wikiword_in_tag
184
- assert_equal "<p>That is some <em style=\"WikiWord\">Stylish Emphasis</em></p>", @revision_with_wikiword_in_tag.display_content
185
- end
186
-
187
- def test_content_with_pre_blocks
188
- assert_equal "A <code>class SmartEngine end</code> would not mark up <pre>CodeBlocks</pre>", @revision_with_pre_blocks.display_content
189
- end
190
-
191
- def test_content_with_autolink_in_parentheses
192
- assert_equal '<p>The <span class="caps">W3C</span> body (<a href="http://www.w3c.org">http://www.w3c.org</a>) sets web standards</p>', @revision_with_autolink_in_parentheses.display_content
193
- end
194
-
195
- def test_content_with_link_in_parentheses
196
- assert_equal '<p>Instiki is a <a href="http://www.c2.com/cgi/wiki?WikiWikiClones">Wiki Clone</a> (<a href="http://wiki.org/wiki.cgi?WhatIsWiki">What is a wiki?</a>) that&#8217;s so easy to setup</p>', @revision_with_link_in_parentheses.display_content
197
- end
198
-
199
- def test_content_with_image_link
200
- assert_equal '<p>This <img src="http://hobix.com/sample.jpg" alt="" /> is a Textile image link.</p>', @revision_with_image_link.display_content
201
- end
202
-
203
- def test_content_with_nowiki_text
204
- assert_equal '<p>Do not mark up [[this text]] or http://www.thislink.com.</p>', @revision_with_nowiki_text.display_content
205
- end
206
-
207
- def test_content_with_bracketted_wiki_word
208
- @mock_web.brackets_only = true
209
- assert_equal '<p>This is a WikiWord and a tricky name <span class="newWikiWord">Sperberg-McQueen<a href="../show/Sperberg-McQueen">?</a></span>.</p>', @revision_with_bracketted_wiki_word.display_content
210
- end
211
-
212
- def test_content_for_export
213
- assert_equal "<p><span class=\"newWikiWord\">His Way</span> would be <a class=\"existingWikiWord\" href=\"MyWay.html\">My Way</a> in kinda <a class=\"existingWikiWord\" href=\"ThatWay.html\">That Way</a> in <span class=\"newWikiWord\">His Way</span> though <a class=\"existingWikiWord\" href=\"MyWay.html\">My Way</a> OverThere&#8212;see <a class=\"existingWikiWord\" href=\"SmartEngine.html\">Smart Engine</a> in that <span class=\"newWikiWord\">Smart Engine <span class=\"caps\">GUI</span></span></p>", @revision.display_content_for_export
214
- end
215
-
216
- def test_double_replacing
217
- @revision.content = "VersionHistory\r\n\r\ncry VersionHistory"
218
- assert_equal(
219
- "<p><span class=\"newWikiWord\">Version History<a href=\"../show/VersionHistory\">?</a></span></p>\n\n\t<p>cry <span class=\"newWikiWord\">Version History<a href=\"../show/VersionHistory\">?</a></span></p>",
220
- @revision.display_content
221
- )
222
-
223
- @revision.clear_display_cache
224
-
225
- @revision.content = "f\r\nVersionHistory\r\n\r\ncry VersionHistory"
226
- assert_equal(
227
- "<p>f<br />\n<span class=\"newWikiWord\">Version History<a href=\"../show/VersionHistory\">?</a></span></p>\n\n\t<p>cry <span class=\"newWikiWord\">Version History<a href=\"../show/VersionHistory\">?</a></span></p>",
228
- @revision.display_content
229
- )
230
- end
231
-
232
- def test_difficult_wiki_words
233
- @revision.content = "[[It's just awesome GUI!]]"
234
- assert_equal(
235
- "<p><span class=\"newWikiWord\">It&#8217;s just awesome <span class=\"caps\">GUI</span>!<a href=\"../show/It%27s+just+awesome+GUI%21\">?</a></span></p>",
236
- @revision.display_content
237
- )
238
- end
239
-
240
- def test_revisions_diff
241
- page = MockPage.new
242
- web = MockWeb.new
243
- web.markup = :textile
244
- page.web = web
245
-
246
- page.revisions = [ 0 ]
247
- page.revisions << Revision.new(page, 1, "What a blue and lovely morning", Time.local(2004, 4, 4, 16, 50), "DavidHeinemeierHansson")
248
- page.revisions << Revision.new(page, 2, "What a red and lovely morning today", Time.local(2004, 4, 4, 16, 50), "DavidHeinemeierHansson")
249
-
250
- assert_equal "<p>What a <del class=\"diffmod\">blue </del><ins class=\"diffmod\">red </ins>and lovely <del class=\"diffmod\">morning</del><ins class=\"diffmod\">morning today</ins></p>", page.revisions.last.display_diff
251
- end
1
+ require "web"
2
+ require "test/unit"
3
+ require "revision"
4
+
5
+ class MockWeb < Web;
6
+ attr_accessor :markup
7
+ def pages() MockPages.new end
8
+ def safe_mode() false end
9
+ end
10
+ class MockPages
11
+ def [](wiki_word) %w( MyWay ThatWay SmartEngine ).include?(wiki_word) end
12
+ end
13
+ class MockPage
14
+ attr_accessor :web, :revisions
15
+ def name() "page" end
16
+ end
17
+
18
+ class RevisionTest < Test::Unit::TestCase
19
+
20
+ def setup
21
+ @mock_page = MockPage.new
22
+ @mock_web = MockWeb.new
23
+ @mock_page.web = @mock_web
24
+
25
+ @mock_web.markup = :textile
26
+
27
+ @revision = Revision.new(
28
+ @mock_page,
29
+ 1,
30
+ "HisWay would be MyWay in kinda ThatWay in HisWay though MyWay \\OverThere -- see SmartEngine in that SmartEngineGUI",
31
+ Time.local(2004, 4, 4, 16, 50),
32
+ "DavidHeinemeierHansson"
33
+ )
34
+
35
+ @revision_with_auto_links = Revision.new(
36
+ @mock_page,
37
+ 1,
38
+ "http://www.loudthinking.com/ points to ThatWay from david@loudthinking.com",
39
+ Time.local(2004, 4, 4, 16, 50),
40
+ "DavidHeinemeierHansson"
41
+ )
42
+
43
+ @revision_with_aliased_links = Revision.new(
44
+ @mock_page,
45
+ 1,
46
+ "Would a [[SmartEngine|clever motor]] go by any other name?",
47
+ Time.local(2004, 4, 4, 16, 50),
48
+ "MarkReid"
49
+ )
50
+
51
+ @revision_with_wiki_word_in_em = Revision.new(
52
+ @mock_page,
53
+ 1,
54
+ "_should we go ThatWay or ThisWay _",
55
+ Time.local(2004, 4, 4, 16, 50),
56
+ "MarkReid"
57
+ )
58
+
59
+ @revision_with_pre_blocks = Revision.new(
60
+ @mock_page,
61
+ 1,
62
+ "A <code>class SmartEngine end</code> would not mark up <pre>CodeBlocks</pre>",
63
+ Time.local(2004, 4, 4, 16, 50),
64
+ "MarkReid"
65
+ )
66
+
67
+ @revision_with_wikiword_in_tag = Revision.new(
68
+ @mock_page,
69
+ 1,
70
+ "That is some <em style=\"WikiWord\">Stylish Emphasis</em>",
71
+ Time.local(2004, 4, 4, 16, 50),
72
+ "MarkReid"
73
+ )
74
+
75
+ @revision_with_autolink_in_parentheses = Revision.new(
76
+ @mock_page,
77
+ 1,
78
+ 'The W3C body (http://www.w3c.org) sets web standards',
79
+ Time.local(2004, 4, 4, 16, 50),
80
+ "MarkReid"
81
+ )
82
+
83
+ @revision_with_link_in_parentheses = Revision.new(
84
+ @mock_page,
85
+ 1,
86
+ 'Instiki is a "Wiki Clone":http://www.c2.com/cgi/wiki?WikiWikiClones ("What is a wiki?":http://wiki.org/wiki.cgi?WhatIsWiki) that\'s so easy to setup',
87
+ Time.local(2004, 4, 4, 16, 50),
88
+ "MarkReid"
89
+ )
90
+
91
+ @revision_with_image_link = Revision.new(
92
+ @mock_page,
93
+ 1,
94
+ 'This !http://hobix.com/sample.jpg! is a Textile image link.',
95
+ Time.local(2004, 4, 4, 16, 50),
96
+ "MarkReid"
97
+ )
98
+
99
+ @revision_with_nowiki_text = Revision.new(
100
+ @mock_page,
101
+ 1,
102
+ 'Do not mark up <nowiki>[[this text]]</nowiki> or <nowiki>http://www.thislink.com</nowiki>.',
103
+ Time.local(2004, 4, 4, 16, 50),
104
+ "MarkReid"
105
+ )
106
+
107
+ @revision_with_bracketted_wiki_word = Revision.new(
108
+ @mock_page,
109
+ 1,
110
+ 'This is a WikiWord and a tricky name [[Sperberg-McQueen]].',
111
+ Time.local(2004, 4, 4, 16, 50),
112
+ "MarkReid"
113
+ )
114
+
115
+ end
116
+
117
+ def test_wiki_words
118
+ assert_equal %w( HisWay MyWay SmartEngine SmartEngineGUI ThatWay ), @revision.wiki_words.sort
119
+ end
120
+
121
+ def test_existing_pages
122
+ assert_equal %w( MyWay SmartEngine ThatWay ), @revision.existing_pages.sort
123
+ end
124
+
125
+ def test_unexisting_pages
126
+ assert_equal %w( HisWay SmartEngineGUI ), @revision.unexisting_pages.sort
127
+ end
128
+
129
+ def test_content_with_wiki_links
130
+ assert_equal "<p><span class=\"newWikiWord\">His Way<a href=\"../show/HisWay\">?</a></span> would be <a class=\"existingWikiWord\" href=\"../show/MyWay\">My Way</a> in kinda <a class=\"existingWikiWord\" href=\"../show/ThatWay\">That Way</a> in <span class=\"newWikiWord\">His Way<a href=\"../show/HisWay\">?</a></span> though <a class=\"existingWikiWord\" href=\"../show/MyWay\">My Way</a> OverThere&#8212;see <a class=\"existingWikiWord\" href=\"../show/SmartEngine\">Smart Engine</a> in that <span class=\"newWikiWord\">Smart Engine <span class=\"caps\">GUI</span><a href=\"../show/SmartEngineGUI\">?</a></span></p>", @revision.display_content
131
+ end
132
+
133
+ def test_bluecloth
134
+ @mock_web.markup = :blue_markdown
135
+
136
+ @revision = Revision.new(
137
+ @mock_page,
138
+ 1,
139
+ "My Headline\n===========\n\n that SmartEngineGUI",
140
+ Time.local(2004, 4, 4, 16, 50),
141
+ "DavidHeinemeierHansson"
142
+ )
143
+
144
+ @revision_with_code_block = Revision.new(
145
+ @mock_page,
146
+ 1,
147
+ "This is a code block:\n def a_method(arg)\n return ThatWay\n\nNice!",
148
+ Time.local(2004, 4, 4, 16, 50),
149
+ "MarkReid"
150
+ )
151
+
152
+ assert_equal "<h1>My Headline</h1>\n\n<p>that <span class=\"newWikiWord\">Smart Engine GUI<a href=\"../show/SmartEngineGUI\">?</a></span></p>", @revision.display_content
153
+
154
+ assert_equal "<p>This is a code block:</p>\n\n<pre><code>def a_method(arg)\nreturn ThatWay\n</code></pre>\n\n<p>Nice!</p>", @revision_with_code_block.display_content
155
+ end
156
+
157
+ def test_rdoc
158
+ @mock_web.markup = :rdoc
159
+
160
+ @revision = Revision.new(
161
+ @mock_page,
162
+ 1,
163
+ "+hello+ that SmartEngineGUI",
164
+ Time.local(2004, 4, 4, 16, 50),
165
+ "DavidHeinemeierHansson"
166
+ )
167
+
168
+ assert_equal "<tt>hello</tt> that <span class=\"newWikiWord\">Smart Engine GUI<a href=\"../show/SmartEngineGUI\">?</a></span>\n\n", @revision.display_content
169
+ end
170
+
171
+ def test_content_with_auto_links
172
+ assert_equal "<p><a href=\"http://www.loudthinking.com/\">http://www.loudthinking.com/</a> points to <a class=\"existingWikiWord\" href=\"../show/ThatWay\">That Way</a> from <a href=\"mailto:david@loudthinking.com\">david@loudthinking.com</a></p>", @revision_with_auto_links.display_content
173
+ end
174
+
175
+ def test_content_with_aliased_links
176
+ assert_equal "<p>Would a <a class=\"existingWikiWord\" href=\"../show/SmartEngine\">clever motor</a> go by any other name?</p>", @revision_with_aliased_links.display_content
177
+ end
178
+
179
+ def test_content_with_wikiword_in_em
180
+ assert_equal "<p><em>should we go <a class=\"existingWikiWord\" href=\"../show/ThatWay\">That Way</a> or <span class=\"newWikiWord\">This Way<a href=\"../show/ThisWay\">?</a></span> </em></p>", @revision_with_wiki_word_in_em.display_content
181
+ end
182
+
183
+ def test_content_with_wikiword_in_tag
184
+ assert_equal "<p>That is some <em style=\"WikiWord\">Stylish Emphasis</em></p>", @revision_with_wikiword_in_tag.display_content
185
+ end
186
+
187
+ def test_content_with_pre_blocks
188
+ assert_equal "A <code>class SmartEngine end</code> would not mark up <pre>CodeBlocks</pre>", @revision_with_pre_blocks.display_content
189
+ end
190
+
191
+ def test_content_with_autolink_in_parentheses
192
+ assert_equal '<p>The <span class="caps">W3C</span> body (<a href="http://www.w3c.org">http://www.w3c.org</a>) sets web standards</p>', @revision_with_autolink_in_parentheses.display_content
193
+ end
194
+
195
+ def test_content_with_link_in_parentheses
196
+ assert_equal '<p>Instiki is a <a href="http://www.c2.com/cgi/wiki?WikiWikiClones">Wiki Clone</a> (<a href="http://wiki.org/wiki.cgi?WhatIsWiki">What is a wiki?</a>) that&#8217;s so easy to setup</p>', @revision_with_link_in_parentheses.display_content
197
+ end
198
+
199
+ def test_content_with_image_link
200
+ assert_equal '<p>This <img src="http://hobix.com/sample.jpg" alt="" /> is a Textile image link.</p>', @revision_with_image_link.display_content
201
+ end
202
+
203
+ def test_content_with_nowiki_text
204
+ assert_equal '<p>Do not mark up [[this text]] or http://www.thislink.com.</p>', @revision_with_nowiki_text.display_content
205
+ end
206
+
207
+ def test_content_with_bracketted_wiki_word
208
+ @mock_web.brackets_only = true
209
+ assert_equal '<p>This is a WikiWord and a tricky name <span class="newWikiWord">Sperberg-McQueen<a href="../show/Sperberg-McQueen">?</a></span>.</p>', @revision_with_bracketted_wiki_word.display_content
210
+ end
211
+
212
+ def test_content_for_export
213
+ assert_equal "<p><span class=\"newWikiWord\">His Way</span> would be <a class=\"existingWikiWord\" href=\"MyWay.html\">My Way</a> in kinda <a class=\"existingWikiWord\" href=\"ThatWay.html\">That Way</a> in <span class=\"newWikiWord\">His Way</span> though <a class=\"existingWikiWord\" href=\"MyWay.html\">My Way</a> OverThere&#8212;see <a class=\"existingWikiWord\" href=\"SmartEngine.html\">Smart Engine</a> in that <span class=\"newWikiWord\">Smart Engine <span class=\"caps\">GUI</span></span></p>", @revision.display_content_for_export
214
+ end
215
+
216
+ def test_double_replacing
217
+ @revision.content = "VersionHistory\r\n\r\ncry VersionHistory"
218
+ assert_equal(
219
+ "<p><span class=\"newWikiWord\">Version History<a href=\"../show/VersionHistory\">?</a></span></p>\n\n\t<p>cry <span class=\"newWikiWord\">Version History<a href=\"../show/VersionHistory\">?</a></span></p>",
220
+ @revision.display_content
221
+ )
222
+
223
+ @revision.clear_display_cache
224
+
225
+ @revision.content = "f\r\nVersionHistory\r\n\r\ncry VersionHistory"
226
+ assert_equal(
227
+ "<p>f<br />\n<span class=\"newWikiWord\">Version History<a href=\"../show/VersionHistory\">?</a></span></p>\n\n\t<p>cry <span class=\"newWikiWord\">Version History<a href=\"../show/VersionHistory\">?</a></span></p>",
228
+ @revision.display_content
229
+ )
230
+ end
231
+
232
+ def test_difficult_wiki_words
233
+ @revision.content = "[[It's just awesome GUI!]]"
234
+ assert_equal(
235
+ "<p><span class=\"newWikiWord\">It&#8217;s just awesome <span class=\"caps\">GUI</span>!<a href=\"../show/It%27s+just+awesome+GUI%21\">?</a></span></p>",
236
+ @revision.display_content
237
+ )
238
+ end
239
+
240
+ def test_revisions_diff
241
+ page = MockPage.new
242
+ web = MockWeb.new
243
+ web.markup = :textile
244
+ page.web = web
245
+
246
+ page.revisions = [ 0 ]
247
+ page.revisions << Revision.new(page, 1, "What a blue and lovely morning", Time.local(2004, 4, 4, 16, 50), "DavidHeinemeierHansson")
248
+ page.revisions << Revision.new(page, 2, "What a red and lovely morning today", Time.local(2004, 4, 4, 16, 50), "DavidHeinemeierHansson")
249
+
250
+ assert_equal "<p>What a <del class=\"diffmod\">blue </del><ins class=\"diffmod\">red </ins>and lovely <del class=\"diffmod\">morning</del><ins class=\"diffmod\">morning today</ins></p>", page.revisions.last.display_diff
251
+ end
252
252
  end