diff options
Diffstat (limited to 'test/prism/encoding/string_encoding_test.rb')
| -rw-r--r-- | test/prism/encoding/string_encoding_test.rb | 136 |
1 files changed, 0 insertions, 136 deletions
diff --git a/test/prism/encoding/string_encoding_test.rb b/test/prism/encoding/string_encoding_test.rb deleted file mode 100644 index 6f9d86df3b..0000000000 --- a/test/prism/encoding/string_encoding_test.rb +++ /dev/null @@ -1,136 +0,0 @@ -# frozen_string_literal: true - -require_relative "../test_helper" - -module Prism - class StringEncodingTest < TestCase - each_encoding do |encoding, _| - define_method(:"test_#{encoding.name}") do - assert_encoding(encoding) - end - end - - def test_coding - actual = Prism.parse_statement("# coding: utf-8\n'string'").unescaped.encoding - assert_equal Encoding::UTF_8, actual - end - - def test_coding_with_whitespace - actual = Prism.parse_statement("# coding \t \r \v : \t \v \r ascii-8bit \n'string'").unescaped.encoding - assert_equal Encoding::ASCII_8BIT, actual - end - - def test_emacs_style - actual = Prism.parse_statement("# -*- coding: utf-8 -*-\n'string'").unescaped.encoding - assert_equal Encoding::UTF_8, actual - end - - def test_utf_8_unix - actual = Prism.parse_statement("# coding: utf-8-unix\n'string'").unescaped.encoding - assert_equal Encoding::UTF_8, actual - end - - def test_utf_8_dos - actual = Prism.parse_statement("# coding: utf-8-dos\n'string'").unescaped.encoding - assert_equal Encoding::UTF_8, actual - end - - def test_utf_8_mac - actual = Prism.parse_statement("# coding: utf-8-mac\n'string'").unescaped.encoding - assert_equal Encoding::UTF_8, actual - end - - def test_utf_8_star - actual = Prism.parse_statement("# coding: utf-8-*\n'string'").unescaped.encoding - assert_equal Encoding::UTF_8, actual - end - - def test_first_lexed_token - encoding = Prism.lex("# encoding: ascii-8bit").value[0][0].value.encoding - assert_equal Encoding::ASCII_8BIT, encoding - end - - if !ENV["PRISM_BUILD_MINIMAL"] - # 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 = Prism.parse(<<~RUBY) - # encoding: Shift_JIS - %w[\x81\x5c] - RUBY - - assert(result.errors.empty?) - assert_equal( - (+"\x81\x5c").force_encoding(Encoding::Shift_JIS), - result.statement.elements.first.unescaped - ) - end - - def test_slice_encoding - slice = Prism.parse("# encoding: Shift_JIS\nア").value.slice - assert_equal (+"ア").force_encoding(Encoding::SHIFT_JIS), slice - assert_equal Encoding::SHIFT_JIS, slice.encoding - end - - def test_multibyte_escapes - [ - ["'", "'"], - ["\"", "\""], - ["`", "`"], - ["/", "/"], - ["<<'HERE'\n", "\nHERE"], - ["<<-HERE\n", "\nHERE"] - ].each do |opening, closing| - assert Prism.parse_success?("# encoding: shift_jis\n'\\\x82\xA0'\n") - end - end - end - - private - - def assert_encoding(encoding) - escapes = ["\\x00", "\\x7F", "\\x80", "\\xFF", "\\u{00}", "\\u{7F}", "\\u{80}", "\\M-\\C-?"] - escapes = escapes.concat(escapes.product(escapes).map(&:join)) - - escapes.each do |escaped| - source = "# encoding: #{encoding.name}\n\"#{escaped}\"" - - expected = - begin - eval(source).encoding - rescue SyntaxError => error - if error.message.include?("UTF-8 mixed within") - error.message[/UTF-8 mixed within .+? source/] - else - raise - end - end - - actual = - Prism.parse(source).then do |result| - if result.success? - string = result.statement - - if string.forced_utf8_encoding? - Encoding::UTF_8 - elsif string.forced_binary_encoding? - Encoding::ASCII_8BIT - else - encoding - end - else - error = result.errors.first - - if error.message.include?("mixed") - error.message - else - raise error.message - end - end - end - - assert_equal expected, actual - end - end - end -end |
