aboutsummaryrefslogtreecommitdiffstats
path: root/test/prism/encoding_test.rb
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2023-09-27 12:22:36 -0400
committerKevin Newton <kddnewton@gmail.com>2023-09-27 13:57:38 -0400
commit8ab56869a64fdccc094f4a83c6367fb23b72d38b (patch)
tree46ef2bd5c51d5b7f923eda6a60edefc7a08200db /test/prism/encoding_test.rb
parent7e0971eb5d679bb6219abb0ec238139aa6502c5a (diff)
downloadruby-8ab56869a64fdccc094f4a83c6367fb23b72d38b.tar.gz
Rename YARP filepaths to prism filepaths
Diffstat (limited to 'test/prism/encoding_test.rb')
-rw-r--r--test/prism/encoding_test.rb106
1 files changed, 106 insertions, 0 deletions
diff --git a/test/prism/encoding_test.rb b/test/prism/encoding_test.rb
new file mode 100644
index 0000000000..8427bddcbe
--- /dev/null
+++ b/test/prism/encoding_test.rb
@@ -0,0 +1,106 @@
+# frozen_string_literal: true
+
+require_relative "test_helper"
+
+module YARP
+ class EncodingTest < TestCase
+ %w[
+ ascii
+ ascii-8bit
+ big5
+ binary
+ euc-jp
+ gbk
+ iso-8859-1
+ iso-8859-2
+ iso-8859-3
+ iso-8859-4
+ iso-8859-5
+ iso-8859-6
+ iso-8859-7
+ iso-8859-8
+ iso-8859-9
+ iso-8859-10
+ iso-8859-11
+ iso-8859-13
+ iso-8859-14
+ iso-8859-15
+ iso-8859-16
+ koi8-r
+ shift_jis
+ sjis
+ us-ascii
+ utf-8
+ utf8-mac
+ windows-31j
+ windows-1251
+ windows-1252
+ CP1251
+ CP1252
+ ].each do |encoding|
+ define_method "test_encoding_#{encoding}" do
+ result = YARP.parse("# encoding: #{encoding}\nident")
+ actual = result.value.statements.body.first.name.encoding
+ assert_equal Encoding.find(encoding), actual
+ end
+ end
+
+ def test_coding
+ result = YARP.parse("# coding: utf-8\nident")
+ actual = result.value.statements.body.first.name.encoding
+ assert_equal Encoding.find("utf-8"), actual
+ end
+
+ def test_coding_with_whitespace
+ result = YARP.parse("# coding \t \r \v : \t \v \r ascii-8bit \nident")
+ actual = result.value.statements.body.first.name.encoding
+ assert_equal Encoding.find("ascii-8bit"), actual
+ end
+
+
+ def test_emacs_style
+ result = YARP.parse("# -*- coding: utf-8 -*-\nident")
+ actual = result.value.statements.body.first.name.encoding
+ assert_equal Encoding.find("utf-8"), actual
+ end
+
+ # This test may be a little confusing. Basically when we use our strpbrk, it
+ # takes into account the encoding of the file.
+ def test_strpbrk_multibyte
+ result = YARP.parse(<<~RUBY)
+ # encoding: Shift_JIS
+ %w[\x81\x5c]
+ RUBY
+
+ assert(result.errors.empty?)
+ assert_equal(
+ (+"\x81\x5c").force_encoding(Encoding::Shift_JIS),
+ result.value.statements.body.first.elements.first.unescaped
+ )
+ end
+
+ def test_utf_8_variations
+ %w[
+ utf-8-unix
+ utf-8-dos
+ utf-8-mac
+ utf-8-*
+ ].each do |encoding|
+ result = YARP.parse("# coding: #{encoding}\nident")
+ actual = result.value.statements.body.first.name.encoding
+ assert_equal Encoding.find("utf-8"), actual
+ end
+ end
+
+ def test_first_lexed_token
+ encoding = YARP.lex("# encoding: ascii-8bit").value[0][0].value.encoding
+ assert_equal Encoding.find("ascii-8bit"), encoding
+ end
+
+ def test_slice_encoding
+ slice = YARP.parse("# encoding: Shift_JIS\nア").value.slice
+ assert_equal (+"ア").force_encoding(Encoding::SHIFT_JIS), slice
+ assert_equal Encoding::SHIFT_JIS, slice.encoding
+ end
+ end
+end