summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorBenoit Daloze <eregontp@gmail.com>2025-12-15 10:46:24 +0100
committergit <svn-admin@ruby-lang.org>2026-01-19 12:03:33 +0000
commit859920dfd272bc22670d779129a04cdf07632192 (patch)
tree791b5fa3e21a8e788d3930aa651a0a95b526e28e /test
parentae5efb55d1bd52e3a08c9ffb6ab4e0cef74cef12 (diff)
[ruby/prism] Add Prism::Source#line_to_byte_offset and replace direct accesses to offsetsHEADmaster
https://github.com/ruby/prism/commit/ff81a29ba5
Diffstat (limited to 'test')
-rw-r--r--test/prism/ruby/source_test.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/test/prism/ruby/source_test.rb b/test/prism/ruby/source_test.rb
new file mode 100644
index 0000000000..afd2825765
--- /dev/null
+++ b/test/prism/ruby/source_test.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+require_relative "../test_helper"
+
+module Prism
+ class SourceTest < TestCase
+ def test_line_to_byte_offset
+ parse_result = Prism.parse(<<~SRC)
+ abcd
+ efgh
+ ijkl
+ SRC
+ source = parse_result.source
+
+ assert_equal 0, source.line_to_byte_offset(1)
+ assert_equal 5, source.line_to_byte_offset(2)
+ assert_equal 10, source.line_to_byte_offset(3)
+ assert_equal 15, source.line_to_byte_offset(4)
+ e = assert_raise(ArgumentError) { source.line_to_byte_offset(5) }
+ assert_equal "line 5 is out of range", e.message
+ e = assert_raise(ArgumentError) { source.line_to_byte_offset(0) }
+ assert_equal "line 0 is out of range", e.message
+ e = assert_raise(ArgumentError) { source.line_to_byte_offset(-1) }
+ assert_equal "line -1 is out of range", e.message
+ end
+
+ def test_line_to_byte_offset_with_start_line
+ parse_result = Prism.parse(<<~SRC, line: 11)
+ abcd
+ efgh
+ ijkl
+ SRC
+ source = parse_result.source
+
+ assert_equal 0, source.line_to_byte_offset(11)
+ assert_equal 5, source.line_to_byte_offset(12)
+ assert_equal 10, source.line_to_byte_offset(13)
+ assert_equal 15, source.line_to_byte_offset(14)
+ e = assert_raise(ArgumentError) { source.line_to_byte_offset(15) }
+ assert_equal "line 15 is out of range", e.message
+ e = assert_raise(ArgumentError) { source.line_to_byte_offset(10) }
+ assert_equal "line 10 is out of range", e.message
+ e = assert_raise(ArgumentError) { source.line_to_byte_offset(9) }
+ assert_equal "line 9 is out of range", e.message
+ end
+ end
+end