summaryrefslogtreecommitdiff
path: root/test/prism/static_literals_test.rb
diff options
context:
space:
mode:
authorKevin Newton <kddnewton@gmail.com>2024-02-23 10:36:59 -0500
committerKevin Newton <kddnewton@gmail.com>2024-02-23 13:25:31 -0500
commitd1ce989829927a4215952983babadfd1df1b505f (patch)
tree83020fb1034046d58493328a235e5d77e8aa9e4a /test/prism/static_literals_test.rb
parent73dd3ce03e3a0a58a157607385418d7a3724752c (diff)
[ruby/prism] Duplicated hash keys
https://github.com/ruby/prism/commit/3e10c46c14
Diffstat (limited to 'test/prism/static_literals_test.rb')
-rw-r--r--test/prism/static_literals_test.rb68
1 files changed, 68 insertions, 0 deletions
diff --git a/test/prism/static_literals_test.rb b/test/prism/static_literals_test.rb
new file mode 100644
index 0000000000..a35bb1cd49
--- /dev/null
+++ b/test/prism/static_literals_test.rb
@@ -0,0 +1,68 @@
+# frozen_string_literal: true
+
+require_relative "test_helper"
+
+module Prism
+ class StaticLiteralsTest < TestCase
+ def test_static_literals
+ assert_warning("1")
+ assert_warning("0xA", "10")
+ assert_warning("0o10", "8")
+ assert_warning("0b10", "2")
+ assert_warning("1_000")
+ assert_warning((2**32).to_s(10), "0x#{(2**32).to_s(16)}")
+ assert_warning((2**64).to_s(10), "0x#{(2**64).to_s(16)}")
+
+ assert_warning("__LINE__", "2")
+ assert_warning("3", "__LINE__")
+
+ assert_warning("1.0")
+ assert_warning("1e2", "100.0")
+
+ assert_warning("1r")
+ assert_warning("1.0r")
+
+ assert_warning("1i")
+ assert_warning("1.0i")
+
+ assert_warning("1ri")
+ assert_warning("1.0ri")
+
+ assert_warning("\"#{__FILE__}\"")
+ assert_warning("\"foo\"")
+ assert_warning("\"#{__FILE__}\"", "__FILE__")
+
+ assert_warning("/foo/")
+ refute_warning("/foo/", "/foo/i")
+
+ assert_warning(":foo")
+ assert_warning("%s[foo]")
+
+ assert_warning("true")
+ assert_warning("false")
+ assert_warning("nil")
+ assert_warning("__ENCODING__")
+ end
+
+ private
+
+ def parse_warning(left, right)
+ source = <<~RUBY
+ {
+ #{left} => 1,
+ #{right} => 2
+ }
+ RUBY
+
+ Prism.parse(source, filepath: __FILE__).warnings.first
+ end
+
+ def assert_warning(left, right = left)
+ assert_match %r{key #{Regexp.escape(left)} .+ line 3}, parse_warning(left, right)&.message
+ end
+
+ def refute_warning(left, right)
+ assert_nil parse_warning(left, right)
+ end
+ end
+end