diff options
Diffstat (limited to 'test/strscan/test_stringscanner.rb')
| -rw-r--r-- | test/strscan/test_stringscanner.rb | 73 |
1 files changed, 54 insertions, 19 deletions
diff --git a/test/strscan/test_stringscanner.rb b/test/strscan/test_stringscanner.rb index 085a911313..96a1badb1f 100644 --- a/test/strscan/test_stringscanner.rb +++ b/test/strscan/test_stringscanner.rb @@ -45,19 +45,6 @@ module StringScannerTests assert_same(str, s.string) end - UNINIT_ERROR = ArgumentError - - def test_s_allocate - s = StringScanner.allocate - assert_equal('#<StringScanner (uninitialized)>', s.inspect.sub(/StringScanner_C/, 'StringScanner')) - assert_raise(UNINIT_ERROR) { s.eos? } - assert_raise(UNINIT_ERROR) { s.scan(/a/) } - s.string = 'test' - assert_equal('#<StringScanner 0/4 @ "test">', s.inspect.sub(/StringScanner_C/, 'StringScanner')) - assert_nothing_raised(UNINIT_ERROR) { s.eos? } - assert_equal(false, s.eos?) - end - def test_s_mustc assert_nothing_raised(NotImplementedError) { StringScanner.must_C_version @@ -107,11 +94,6 @@ module StringScannerTests assert_equal(true, StringScanner::Version.frozen?) end - def test_const_Id - assert_instance_of(String, StringScanner::Id) - assert_equal(true, StringScanner::Id.frozen?) - end - def test_inspect str = 'test string'.dup s = create_string_scanner(str, false) @@ -543,6 +525,59 @@ module StringScannerTests end end + def assert_integer_at(s, specifier, *to_i_args) + assert_equal(s[specifier]&.to_i(*to_i_args), + s.integer_at(specifier, *to_i_args)) + end + + def test_integer_at + s = create_string_scanner("before 20260514 after") + s.skip_until(" ") + assert_equal("20260514", s.scan(/(\d{4})(\d{2})(\d{2})/)) + assert_integer_at(s, 0) # 20260514 + assert_integer_at(s, 1) # 2026 + assert_integer_at(s, 2) # 5 + assert_integer_at(s, 3) # 14 + assert_integer_at(s, 4) # nil + assert_integer_at(s, -1) # 14 + assert_integer_at(s, -2) # 5 + assert_integer_at(s, -3) # 2026 + assert_integer_at(s, -4) # 20260514 + assert_integer_at(s, -5) # nil + end + + def test_integer_at_name_string + s = create_string_scanner("before 20260514 after") + s.skip_until(" ") + assert_equal("20260514", s.scan(/(?<y>\d{4})(?<m>\d{2})(?<d>\d{2})/)) + assert_integer_at(s, "y") + assert_integer_at(s, "m") + assert_integer_at(s, "d") + end + + def test_integer_at_name_symbol + s = create_string_scanner("before 20260514 after") + s.skip_until(" ") + assert_equal("20260514", s.scan(/(?<y>\d{4})(?<m>\d{2})(?<d>\d{2})/)) + assert_integer_at(s, :y) + assert_integer_at(s, :m) + assert_integer_at(s, :d) + end + + def test_integer_at_base + s = create_string_scanner("before 111 after") + s.skip_until(" ") + assert_equal("111", s.scan(/\d+/)) + assert_integer_at(s, 0, 2) + end + + def test_integer_at_base_auto + s = create_string_scanner("before 0xa_f after") + s.skip_until(" ") + assert_equal("0xa_f", s.scan(/0x[\h_]+/)) + assert_integer_at(s, 0, 0) # 0xaf + end + def test_pre_match s = create_string_scanner('a b c d e') s.scan(/\w/) @@ -875,7 +910,7 @@ module StringScannerTests assert_equal({}, s.named_captures) assert_equal("te", s.scan(/../)) assert_equal(nil, s.scan(/\d/)) - assert_raise(ScanError) { s.unscan } + assert_raise(StringScanner::Error) { s.unscan } end def test_rest |
