To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / test / unit / lib / redmine / wiki_formatting / textile_formatter_test.rb @ 441:cbce1fd3b1b7

History | View | Annotate | Download (6.04 KB)

1 0:513646585e45 Chris
# Redmine - project management software
2
# Copyright (C) 2006-2010  Jean-Philippe Lang
3
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17
18 119:8661b858af72 Chris
require File.expand_path('../../../../../test_helper', __FILE__)
19 0:513646585e45 Chris
20
class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
21
22
  def setup
23
    @formatter = Redmine::WikiFormatting::Textile::Formatter
24
  end
25
26
  MODIFIERS = {
27
    "*" => 'strong', # bold
28
    "_" => 'em',     # italic
29
    "+" => 'ins',    # underline
30
    "-" => 'del',    # deleted
31
    "^" => 'sup',    # superscript
32
    "~" => 'sub'     # subscript
33
  }
34
35
  def test_modifiers
36
    assert_html_output(
37
      '*bold*'                => '<strong>bold</strong>',
38
      'before *bold*'         => 'before <strong>bold</strong>',
39
      '*bold* after'          => '<strong>bold</strong> after',
40
      '*two words*'           => '<strong>two words</strong>',
41
      '*two*words*'           => '<strong>two*words</strong>',
42
      '*two * words*'         => '<strong>two * words</strong>',
43
      '*two* *words*'         => '<strong>two</strong> <strong>words</strong>',
44
      '*(two)* *(words)*'     => '<strong>(two)</strong> <strong>(words)</strong>',
45
      # with class
46
      '*(foo)two words*'      => '<strong class="foo">two words</strong>'
47
    )
48
  end
49
50
  def test_modifiers_combination
51
    MODIFIERS.each do |m1, tag1|
52
      MODIFIERS.each do |m2, tag2|
53
        next if m1 == m2
54
        text = "#{m2}#{m1}Phrase modifiers#{m1}#{m2}"
55
        html = "<#{tag2}><#{tag1}>Phrase modifiers</#{tag1}></#{tag2}>"
56
        assert_html_output text => html
57
      end
58
    end
59
  end
60
61
  def test_inline_code
62
    assert_html_output(
63
      'this is @some code@'      => 'this is <code>some code</code>',
64
      '@<Location /redmine>@'    => '<code>&lt;Location /redmine&gt;</code>'
65
    )
66
  end
67 441:cbce1fd3b1b7 Chris
68 0:513646585e45 Chris
  def test_escaping
69
    assert_html_output(
70
      'this is a <script>'      => 'this is a &lt;script&gt;'
71
    )
72
  end
73 441:cbce1fd3b1b7 Chris
74
  def test_use_of_backslashes_followed_by_numbers_in_headers
75
    assert_html_output({
76
      'h1. 2009\02\09'      => '<h1>2009\02\09</h1>'
77
    }, false)
78
  end
79 0:513646585e45 Chris
80
  def test_double_dashes_should_not_strikethrough
81
    assert_html_output(
82
      'double -- dashes -- test'  => 'double -- dashes -- test',
83
      'double -- *dashes* -- test'  => 'double -- <strong>dashes</strong> -- test'
84
    )
85
  end
86
87 37:94944d00e43c chris
  def test_acronyms
88
    assert_html_output(
89
      'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>',
90
      '2 letters JP(Jean-Philippe) acronym' => '2 letters <acronym title="Jean-Philippe">JP</acronym> acronym',
91
      'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted &quot;title&quot;">GPL</acronym>'
92
    )
93
  end
94
95 441:cbce1fd3b1b7 Chris
  def test_blockquote
96
    # orig raw text
97
    raw = <<-RAW
98
John said:
99
> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.
100
> Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
101
> * Donec odio lorem,
102
> * sagittis ac,
103
> * malesuada in,
104
> * adipiscing eu, dolor.
105
>
106
> >Nulla varius pulvinar diam. Proin id arcu id lorem scelerisque condimentum. Proin vehicula turpis vitae lacus.
107
> Proin a tellus. Nam vel neque.
108

109
He's right.
110
RAW
111
112
    # expected html
113
    expected = <<-EXPECTED
114
<p>John said:</p>
115
<blockquote>
116
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sed libero.<br />
117
Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
118
<ul>
119
  <li>Donec odio lorem,</li>
120
  <li>sagittis ac,</li>
121
  <li>malesuada in,</li>
122
  <li>adipiscing eu, dolor.</li>
123
</ul>
124
<blockquote>
125
<p>Nulla varius pulvinar diam. Proin id arcu id lorem scelerisque condimentum. Proin vehicula turpis vitae lacus.</p>
126
</blockquote>
127
<p>Proin a tellus. Nam vel neque.</p>
128
</blockquote>
129
<p>He's right.</p>
130
EXPECTED
131
132
    assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
133
  end
134
135
  def test_table
136
    raw = <<-RAW
137
This is a table with empty cells:
138

139
|cell11|cell12||
140
|cell21||cell23|
141
|cell31|cell32|cell33|
142
RAW
143
144
    expected = <<-EXPECTED
145
<p>This is a table with empty cells:</p>
146

147
<table>
148
  <tr><td>cell11</td><td>cell12</td><td></td></tr>
149
  <tr><td>cell21</td><td></td><td>cell23</td></tr>
150
  <tr><td>cell31</td><td>cell32</td><td>cell33</td></tr>
151
</table>
152
EXPECTED
153
154
    assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
155
  end
156
157
  def test_table_with_line_breaks
158
    raw = <<-RAW
159
This is a table with line breaks:
160

161
|cell11
162
continued|cell12||
163
|-cell21-||cell23
164
cell23 line2
165
cell23 *line3*|
166
|cell31|cell32
167
cell32 line2|cell33|
168

169
RAW
170
171
    expected = <<-EXPECTED
172
<p>This is a table with line breaks:</p>
173

174
<table>
175
  <tr>
176
    <td>cell11<br />continued</td>
177
    <td>cell12</td>
178
    <td></td>
179
  </tr>
180
  <tr>
181
    <td><del>cell21</del></td>
182
    <td></td>
183
    <td>cell23<br/>cell23 line2<br/>cell23 <strong>line3</strong></td>
184
  </tr>
185
  <tr>
186
    <td>cell31</td>
187
    <td>cell32<br/>cell32 line2</td>
188
    <td>cell33</td>
189
  </tr>
190
</table>
191
EXPECTED
192
193
    assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
194
  end
195
196
  def test_textile_should_not_mangle_brackets
197
    assert_equal '<p>[msg1][msg2]</p>', to_html('[msg1][msg2]')
198
  end
199
200 0:513646585e45 Chris
  private
201
202 441:cbce1fd3b1b7 Chris
  def assert_html_output(to_test, expect_paragraph = true)
203 0:513646585e45 Chris
    to_test.each do |text, expected|
204 441:cbce1fd3b1b7 Chris
      assert_equal(( expect_paragraph ? "<p>#{expected}</p>" : expected ), @formatter.new(text).to_html, "Formatting the following text failed:\n===\n#{text}\n===\n")
205 0:513646585e45 Chris
    end
206
  end
207 441:cbce1fd3b1b7 Chris
208
  def to_html(text)
209
    @formatter.new(text).to_html
210
  end
211 0:513646585e45 Chris
end