To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.
root / test / unit / lib / redmine / wiki_formatting / .svn / text-base / textile_formatter_test.rb.svn-base @ 442:753f1380d6bc
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><Location /redmine></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 <script>' |
||
| 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 "title"">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 |