diff --git a/app/models/chunks/include.rb b/app/models/chunks/include.rb index 4430be9a..6ecaa1fb 100644 --- a/app/models/chunks/include.rb +++ b/app/models/chunks/include.rb @@ -9,7 +9,7 @@ require 'chunks/wiki' class Include < WikiChunk::WikiReference - INCLUDE_PATTERN = /\[\[!include(.*)\]\]\s*/i + INCLUDE_PATTERN = /\[\[!include\s+(.*?)\]\]\s*/i def self.pattern() INCLUDE_PATTERN end diff --git a/app/models/chunks/wiki.rb b/app/models/chunks/wiki.rb index d9ff2987..840f644a 100644 --- a/app/models/chunks/wiki.rb +++ b/app/models/chunks/wiki.rb @@ -99,7 +99,7 @@ module WikiChunk class Link < WikiLink unless defined? WIKI_LINK - WIKI_LINK = /(":)?\[\[([^\]]+)\]\]/ + WIKI_LINK = /(":)?\[\[\s*([^\]\s][^\]]+?)\s*\]\]/ LINK_TYPE_SEPARATION = Regexp.new('^(.+):((file)|(pic))$', 0, 'utf-8') ALIAS_SEPARATION = Regexp.new('^(.+)\|(.+)$', 0, 'utf-8') end diff --git a/test/test_helper.rb b/test/test_helper.rb index 61d06edf..fe8c1e29 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -102,6 +102,13 @@ module ChunkMatch "Wrong #{a_method} value") end end + + # Asserts that test_text doesn't match the chunk_type + def no_match(chunk_type, test_text) + if chunk_type.respond_to? :pattern + assert_no_match(chunk_type.pattern, test_text) + end + end end if defined? $validate_xml_in_assert_success and $validate_xml_in_assert_success == true diff --git a/test/unit/chunks/wiki_test.rb b/test/unit/chunks/wiki_test.rb index 014e8c87..b73a88cc 100755 --- a/test/unit/chunks/wiki_test.rb +++ b/test/unit/chunks/wiki_test.rb @@ -19,13 +19,39 @@ class WikiTest < Test::Unit::TestCase end def test_simple_brackets - match(WikiChunk::Link, 'This is a [[bracketted link]]', :page_name => 'bracketted link') + match(WikiChunk::Link, 'This is a [[bracketted link]]', :page_name => 'bracketted link') + end + + def test_void_brackets + # double brackets woith only spaces inside are not a WikiLink + no_match(WikiChunk::Link, "This [[ ]] are [[]] no [[ \t ]] links") + end + + def test_brackets_strip_spaces + match(WikiChunk::Link, + "This is a [[Sperberg-McQueen \t ]] link with trailing spaces to strip", + :page_name => 'Sperberg-McQueen') + match(WikiChunk::Link, + "This is a [[ \t Sperberg-McQueen]] link with leading spaces to strip", + :page_name => 'Sperberg-McQueen') + match(WikiChunk::Link, + 'This is a [[ Sperberg-McQueen ]] link with spaces around it to strip', + :page_name => 'Sperberg-McQueen') + match(WikiChunk::Link, + 'This is a [[ Sperberg McQueen ]] link with spaces inside and around it', + :page_name => 'Sperberg McQueen') end def test_complex_brackets match(WikiChunk::Link, 'This is a tricky link [[Sperberg-McQueen]]', :page_name => 'Sperberg-McQueen') end + + def test_include_chunk_pattern + content = 'This is a [[!include pagename]] and [[!include WikiWord]] but [[blah]]' + recognized_includes = content.scan(Include.pattern).collect { |m| m[0] } + assert_equal %w(pagename WikiWord), recognized_includes + end def test_textile_link textile_link = ContentStub.new('"Here is a special link":SpecialLink')