]> git.wincent.com - wikitext.git/commitdiff
Split link encoding specs into separate file, and rename the function
authorWincent Colaiuta <win@wincent.com>
Thu, 31 Jan 2008 20:35:00 +0000 (21:35 +0100)
committerWincent Colaiuta <win@wincent.com>
Thu, 31 Jan 2008 20:36:32 +0000 (21:36 +0100)
As this method is useful for both internal and external links, drop
"internal" from the name.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
ext/wikitext.c
spec/internal_link_spec.rb
spec/link_encoding_spec.rb [new file with mode: 0755]

index 1aebd208e65da3eda19c39e9ba23df745d13bf90..e640300ced0d2b1dbe8de04eb3c8bb05e1b1948a 100644 (file)
@@ -1354,7 +1354,7 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
                     if (NIL_P(link_target))
                     {
                         // syntax error: link with no link target
-                        //_Wikitext_encode_internal_link_target(pointer, lenght_in_characters_not_bytes)
+                        //_Wikitext_encode_link_target(pointer, lenght_in_characters_not_bytes)
                     }
                     else if (NIL_P(link_text))
                     {
@@ -1713,7 +1713,7 @@ finalize:   // can raise exceptions only after all clean-up is done
 // to be equivalent to:
 //         thing. [[Foo]] was...
 // TODO: this is probably the right place to check if treat_slash_as_special is true and act accordingly
-VALUE _Wikitext_encode_internal_link_target(uint16_t *input, long len)
+VALUE _Wikitext_encode_link_target(uint16_t *input, long len)
 {
     static char percent = '%';
     static char hex[]   = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
@@ -1778,10 +1778,10 @@ VALUE _Wikitext_encode_internal_link_target(uint16_t *input, long len)
 
 // public wrapper for the _Wikitext_encode_internal_link_target function (exposed for testing purposes)
 // expects input to be UTF-8 encoded, and returns the result in the same format
-VALUE Wikitext_encode_internal_link_target(VALUE self, VALUE input)
+VALUE Wikitext_encode_link_target(VALUE self, VALUE input)
 {
-    VALUE ucs2 = Wikitext_utf8_to_ucs2(mWikitext, input);
-    VALUE out = _Wikitext_encode_internal_link_target((uint16_t *)RSTRING_PTR(ucs2), RSTRING_LEN(ucs2) / sizeof(uint16_t));
+    VALUE ucs2  = Wikitext_utf8_to_ucs2(mWikitext, input);
+    VALUE out   = _Wikitext_encode_link_target((uint16_t *)RSTRING_PTR(ucs2), RSTRING_LEN(ucs2) / sizeof(uint16_t));
     return Wikitext_ucs2_to_utf8(mWikitext, out);
 }
 
index bb9c80b9bb13e5d0f0f3319fa0b37b7bcd682985..5ea5b0ef9f439287a1e47a57f3c01f6c49aa937e 100755 (executable)
@@ -15,7 +15,6 @@
 
 require File.join(File.dirname(__FILE__), 'spec_helper.rb')
 require 'wikitext'
-require 'uri'
 
 describe Wikitext::Parser, 'internal links' do
   before do
@@ -37,33 +36,3 @@ describe Wikitext::Parser, 'internal links' do
     @parser.parse('> ]]').should == "<blockquote><p>]]</p>\n</blockquote>\n"                        # in BLOCKQUOTE scope
   end
 end
-
-describe Wikitext, 'encoding an internal link target' do
-  it 'should complain if passed nil' do
-    lambda { Wikitext.encode_internal_link_target(nil) }.should raise_error
-  end
-
-  it 'should do nothing on zero-length input' do
-    Wikitext.encode_internal_link_target('').should == ''
-  end
-
-  it 'should convert spaces into "%20"' do
-    Wikitext.encode_internal_link_target('hello world').should == 'hello%20world'
-  end
-
-  it 'should convert reserved symbols into percent escapes' do
-    Wikitext.encode_internal_link_target('http://www.apple.com/q?foo').should == 'http%3a%2f%2fwww.apple.com%2fq%3ffoo'
-  end
-
-  it 'should convert non-ASCII into UTF-8 and then apply percent escapes' do
-    Wikitext.encode_internal_link_target('cañon').should == 'ca%c3%b1on'
-  end
-
-  it 'should get the same answer as URI.escape' do
-    reserved = Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")
-    ['foo bar', 'http://www.google.com/search?q=hello&foo=bar', '€'].each do |string|
-      Wikitext.encode_internal_link_target(string).should == URI.escape(string, reserved).downcase
-    end
-  end
-end
-
diff --git a/spec/link_encoding_spec.rb b/spec/link_encoding_spec.rb
new file mode 100755 (executable)
index 0000000..b7c07b2
--- /dev/null
@@ -0,0 +1,52 @@
+#!/usr/bin/env ruby
+# Copyright 2007-2008 Wincent Colaiuta
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+require File.join(File.dirname(__FILE__), 'spec_helper.rb')
+require 'wikitext'
+require 'uri'
+
+describe Wikitext, 'encoding a link target' do
+  it 'should complain if passed nil' do
+    lambda { Wikitext.encode_link_target(nil) }.should raise_error
+  end
+
+  it 'should do nothing on zero-length input' do
+    Wikitext.encode_link_target('').should == ''
+  end
+
+  it 'should convert spaces into "%20"' do
+    Wikitext.encode_link_target('hello world').should == 'hello%20world'
+  end
+
+  it 'should convert reserved symbols into percent escapes' do
+    Wikitext.encode_link_target('http://www.apple.com/q?foo').should == 'http%3a%2f%2fwww.apple.com%2fq%3ffoo'
+  end
+
+  it 'should convert non-ASCII into UTF-8 and then apply percent escapes' do
+    Wikitext.encode_link_target('cañon').should == 'ca%c3%b1on'
+  end
+
+  it 'should handle mixed scenarios (commas, double-quotes and UTF-8)' do
+    Wikitext.encode_link_target('foo, "bar" & baz €').should == 'foo%2c%20%22bar%22%20%26%20baz%20%e2%82%ac'
+  end
+
+  it 'should get the same answer as URI.escape' do
+    reserved = Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")
+    ['foo bar', 'http://www.google.com/search?q=hello&foo=bar', '€'].each do |string|
+      Wikitext.encode_link_target(string).should == URI.escape(string, reserved).downcase
+    end
+  end
+end
+