summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/helpers/application_helper.rb1
-rw-r--r--test/helpers/application_helper_test.rb46
2 files changed, 47 insertions, 0 deletions
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index b535d9d1b..419287533 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -780,6 +780,7 @@ module ApplicationHelper
link_project = project
esc, all, page, title = $1, $2, $3, $5
if esc.nil?
+ page = CGI.unescapeHTML(page)
if page =~ /^\#(.+)$/
anchor = sanitize_anchor_name($1)
url = "##{anchor}"
diff --git a/test/helpers/application_helper_test.rb b/test/helpers/application_helper_test.rb
index 0a4c32077..fd0886c80 100644
--- a/test/helpers/application_helper_test.rb
+++ b/test/helpers/application_helper_test.rb
@@ -822,6 +822,25 @@ RAW
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
end
+ def test_wiki_links_with_special_characters_should_work_in_textile
+ to_test = wiki_links_with_special_characters
+
+ @project = Project.find(1)
+ with_settings :text_formatting => 'textile' do
+ to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
+ end
+ end
+
+ def test_wiki_links_with_special_characters_should_work_in_markdown
+ to_test = wiki_links_with_special_characters
+
+ @project = Project.find(1)
+ with_settings :text_formatting => 'markdown' do
+ to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text).strip }
+ end
+ end
+
+
def test_wiki_links_within_local_file_generation_context
to_test = {
# link to a page
@@ -1723,6 +1742,33 @@ RAW
assert_equal '<span class="hours hours-int">0</span><span class="hours hours-dec">.75</span>', html_hours('0.75')
end
+ private
+
+ def wiki_links_with_special_characters
+ return {
+ '[[Jack & Coke]]' =>
+ link_to("Jack & Coke",
+ "/projects/ecookbook/wiki/Jack_&_Coke",
+ :class => "wiki-page new"),
+ '[[a "quoted" name]]' =>
+ link_to("a \"quoted\" name",
+ "/projects/ecookbook/wiki/A_%22quoted%22_name",
+ :class => "wiki-page new"),
+ '[[le français, c\'est super]]' =>
+ link_to("le français, c\'est super",
+ "/projects/ecookbook/wiki/Le_fran%C3%A7ais_c'est_super",
+ :class => "wiki-page new"),
+ '[[broken < less]]' =>
+ link_to("broken < less",
+ "/projects/ecookbook/wiki/Broken_%3C_less",
+ :class => "wiki-page new"),
+ '[[broken > more]]' =>
+ link_to("broken > more",
+ "/projects/ecookbook/wiki/Broken_%3E_more",
+ :class => "wiki-page new"),
+ }
+ end
+
def test_export_csv_encoding_select_tag_should_return_nil_when_general_csv_encoding_is_UTF8
with_locale 'az' do
assert_equal l(:general_csv_encoding), 'UTF-8'