diff options
Diffstat (limited to 'test/strscan/test_stringscanner.rb')
-rw-r--r-- | test/strscan/test_stringscanner.rb | 48 |
1 files changed, 46 insertions, 2 deletions
diff --git a/test/strscan/test_stringscanner.rb b/test/strscan/test_stringscanner.rb index b7ffac816d..143cf7197d 100644 --- a/test/strscan/test_stringscanner.rb +++ b/test/strscan/test_stringscanner.rb @@ -8,6 +8,31 @@ require 'strscan' require 'test/unit' module StringScannerTests + def test_peek_byte + omit("not implemented on TruffleRuby") if RUBY_ENGINE == "truffleruby" + s = create_string_scanner('ab') + assert_equal 97, s.peek_byte + assert_equal 97, s.scan_byte + assert_equal 98, s.peek_byte + assert_equal 98, s.scan_byte + assert_nil s.peek_byte + assert_nil s.scan_byte + end + + def test_scan_byte + omit("not implemented on TruffleRuby") if RUBY_ENGINE == "truffleruby" + s = create_string_scanner('ab') + assert_equal 97, s.scan_byte + assert_equal 98, s.scan_byte + assert_nil s.scan_byte + + str = "\244\242".dup.force_encoding("euc-jp") + s = StringScanner.new(str) + assert_equal str.getbyte(s.pos), s.scan_byte + assert_equal str.getbyte(s.pos), s.scan_byte + assert_nil s.scan_byte + end + def test_s_new s = create_string_scanner('test string') assert_instance_of StringScanner, s @@ -558,6 +583,16 @@ module StringScannerTests assert_nil s.matched_size end + def test_empty_encoding_utf8 + ss = create_string_scanner('') + assert_equal(Encoding::UTF_8, ss.rest.encoding) + end + + def test_empty_encoding_ascii_8bit + ss = create_string_scanner(''.dup.force_encoding("ASCII-8BIT")) + assert_equal(Encoding::ASCII_8BIT, ss.rest.encoding) + end + def test_encoding ss = create_string_scanner("\xA1\xA2".dup.force_encoding("euc-jp")) assert_equal(Encoding::EUC_JP, ss.scan(/./e).encoding) @@ -737,8 +772,8 @@ module StringScannerTests def test_captures s = create_string_scanner("Timestamp: Fri Dec 12 1975 14:39") s.scan("Timestamp: ") - s.scan(/(\w+) (\w+) (\d+) /) - assert_equal(["Fri", "Dec", "12"], s.captures) + s.scan(/(\w+) (\w+) (\d+) (1980)?/) + assert_equal(["Fri", "Dec", "12", nil], s.captures) s.scan(/(\w+) (\w+) (\d+) /) assert_nil(s.captures) end @@ -775,6 +810,7 @@ module StringScannerTests def test_named_captures omit("not implemented on TruffleRuby") if ["truffleruby"].include?(RUBY_ENGINE) scan = StringScanner.new("foobarbaz") + assert_equal({}, scan.named_captures) assert_equal(9, scan.match?(/(?<f>foo)(?<r>bar)(?<z>baz)/)) assert_equal({"f" => "foo", "r" => "bar", "z" => "baz"}, scan.named_captures) end @@ -830,4 +866,12 @@ class TestStringScannerFixedAnchor < Test::Unit::TestCase assert_equal 1, s.skip(/a/) assert_nil s.skip(/^b/) end + + # ruby/strscan#86 + def test_scan_shared_string + s = "hellohello"[5..-1] + ss = StringScanner.new(s).scan(/hello/) + + assert_equal "hello", ss + end end |