summaryrefslogtreecommitdiff
path: root/test/strscan/test_stringscanner.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/strscan/test_stringscanner.rb')
-rw-r--r--test/strscan/test_stringscanner.rb48
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