##// END OF EJS Templates
merge r6759 from trunk...
Toshi MARUYAMA -
r7588:d181a2221ac0
parent child
Show More
@@ -1,211 +1,211
1 1 # Redmine - project management software
2 # Copyright (C) 2006-2010 Jean-Philippe Lang
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.expand_path('../../../../../test_helper', __FILE__)
19 19
20 20 class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
21 21
22 22 def setup
23 23 @formatter = Redmine::WikiFormatting::Textile::Formatter
24 24 end
25 25
26 26 MODIFIERS = {
27 27 "*" => 'strong', # bold
28 28 "_" => 'em', # italic
29 29 "+" => 'ins', # underline
30 30 "-" => 'del', # deleted
31 31 "^" => 'sup', # superscript
32 32 "~" => 'sub' # subscript
33 33 }
34 34
35 35 def test_modifiers
36 36 assert_html_output(
37 37 '*bold*' => '<strong>bold</strong>',
38 38 'before *bold*' => 'before <strong>bold</strong>',
39 39 '*bold* after' => '<strong>bold</strong> after',
40 40 '*two words*' => '<strong>two words</strong>',
41 41 '*two*words*' => '<strong>two*words</strong>',
42 42 '*two * words*' => '<strong>two * words</strong>',
43 43 '*two* *words*' => '<strong>two</strong> <strong>words</strong>',
44 44 '*(two)* *(words)*' => '<strong>(two)</strong> <strong>(words)</strong>',
45 45 # with class
46 46 '*(foo)two words*' => '<strong class="foo">two words</strong>'
47 47 )
48 48 end
49 49
50 50 def test_modifiers_combination
51 51 MODIFIERS.each do |m1, tag1|
52 52 MODIFIERS.each do |m2, tag2|
53 53 next if m1 == m2
54 54 text = "#{m2}#{m1}Phrase modifiers#{m1}#{m2}"
55 55 html = "<#{tag2}><#{tag1}>Phrase modifiers</#{tag1}></#{tag2}>"
56 56 assert_html_output text => html
57 57 end
58 58 end
59 59 end
60 60
61 61 def test_inline_code
62 62 assert_html_output(
63 63 'this is @some code@' => 'this is <code>some code</code>',
64 64 '@<Location /redmine>@' => '<code>&lt;Location /redmine&gt;</code>'
65 65 )
66 66 end
67 67
68 68 def test_escaping
69 69 assert_html_output(
70 70 'this is a <script>' => 'this is a &lt;script&gt;'
71 71 )
72 72 end
73 73
74 74 def test_use_of_backslashes_followed_by_numbers_in_headers
75 75 assert_html_output({
76 76 'h1. 2009\02\09' => '<h1>2009\02\09</h1>'
77 77 }, false)
78 78 end
79 79
80 80 def test_double_dashes_should_not_strikethrough
81 81 assert_html_output(
82 82 'double -- dashes -- test' => 'double -- dashes -- test',
83 83 'double -- *dashes* -- test' => 'double -- <strong>dashes</strong> -- test'
84 84 )
85 85 end
86 86
87 87 def test_acronyms
88 88 assert_html_output(
89 89 'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>',
90 90 '2 letters JP(Jean-Philippe) acronym' => '2 letters <acronym title="Jean-Philippe">JP</acronym> acronym',
91 91 'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted &quot;title&quot;">GPL</acronym>'
92 92 )
93 93 end
94 94
95 95 def test_blockquote
96 96 # orig raw text
97 97 raw = <<-RAW
98 98 John said:
99 99 > Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.
100 100 > Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
101 101 > * Donec odio lorem,
102 102 > * sagittis ac,
103 103 > * malesuada in,
104 104 > * adipiscing eu, dolor.
105 105 >
106 106 > >Nulla varius pulvinar diam. Proin id arcu id lorem scelerisque condimentum. Proin vehicula turpis vitae lacus.
107 107 > Proin a tellus. Nam vel neque.
108 108
109 109 He's right.
110 110 RAW
111 111
112 112 # expected html
113 113 expected = <<-EXPECTED
114 114 <p>John said:</p>
115 115 <blockquote>
116 116 Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.<br />
117 117 Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
118 118 <ul>
119 119 <li>Donec odio lorem,</li>
120 120 <li>sagittis ac,</li>
121 121 <li>malesuada in,</li>
122 122 <li>adipiscing eu, dolor.</li>
123 123 </ul>
124 124 <blockquote>
125 125 <p>Nulla varius pulvinar diam. Proin id arcu id lorem scelerisque condimentum. Proin vehicula turpis vitae lacus.</p>
126 126 </blockquote>
127 127 <p>Proin a tellus. Nam vel neque.</p>
128 128 </blockquote>
129 129 <p>He's right.</p>
130 130 EXPECTED
131 131
132 132 assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
133 133 end
134 134
135 135 def test_table
136 136 raw = <<-RAW
137 137 This is a table with empty cells:
138 138
139 139 |cell11|cell12||
140 140 |cell21||cell23|
141 141 |cell31|cell32|cell33|
142 142 RAW
143 143
144 144 expected = <<-EXPECTED
145 145 <p>This is a table with empty cells:</p>
146 146
147 147 <table>
148 148 <tr><td>cell11</td><td>cell12</td><td></td></tr>
149 149 <tr><td>cell21</td><td></td><td>cell23</td></tr>
150 150 <tr><td>cell31</td><td>cell32</td><td>cell33</td></tr>
151 151 </table>
152 152 EXPECTED
153 153
154 154 assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
155 155 end
156 156
157 157 def test_table_with_line_breaks
158 158 raw = <<-RAW
159 159 This is a table with line breaks:
160 160
161 161 |cell11
162 162 continued|cell12||
163 163 |-cell21-||cell23
164 164 cell23 line2
165 165 cell23 *line3*|
166 166 |cell31|cell32
167 167 cell32 line2|cell33|
168 168
169 169 RAW
170 170
171 171 expected = <<-EXPECTED
172 172 <p>This is a table with line breaks:</p>
173 173
174 174 <table>
175 175 <tr>
176 176 <td>cell11<br />continued</td>
177 177 <td>cell12</td>
178 178 <td></td>
179 179 </tr>
180 180 <tr>
181 181 <td><del>cell21</del></td>
182 182 <td></td>
183 183 <td>cell23<br/>cell23 line2<br/>cell23 <strong>line3</strong></td>
184 184 </tr>
185 185 <tr>
186 186 <td>cell31</td>
187 187 <td>cell32<br/>cell32 line2</td>
188 188 <td>cell33</td>
189 189 </tr>
190 190 </table>
191 191 EXPECTED
192 192
193 193 assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
194 194 end
195 195
196 196 def test_textile_should_not_mangle_brackets
197 197 assert_equal '<p>[msg1][msg2]</p>', to_html('[msg1][msg2]')
198 198 end
199 199
200 200 private
201 201
202 202 def assert_html_output(to_test, expect_paragraph = true)
203 203 to_test.each do |text, expected|
204 204 assert_equal(( expect_paragraph ? "<p>#{expected}</p>" : expected ), @formatter.new(text).to_html, "Formatting the following text failed:\n===\n#{text}\n===\n")
205 205 end
206 206 end
207 207
208 208 def to_html(text)
209 209 @formatter.new(text).to_html
210 210 end
211 211 end
General Comments 0
You need to be logged in to leave comments. Login now