1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
# frozen_string_literal: true
return if RUBY_VERSION < "3.2"
require_relative "../test_helper"
module Prism
class ParametersSignatureTest < TestCase
def test_req
assert_parameters([[:req, :a]], "a")
end
def test_req_destructure
assert_parameters([[:req]], "(a, b)")
end
def test_opt
assert_parameters([[:opt, :a]], "a = 1")
end
def test_rest
assert_parameters([[:rest, :a]], "*a")
end
def test_rest_anonymous
assert_parameters([[:rest, :*]], "*")
end
def test_post
assert_parameters([[:rest, :a], [:req, :b]], "*a, b")
end
def test_post_destructure
assert_parameters([[:rest, :a], [:req]], "*a, (b, c)")
end
def test_keyreq
assert_parameters([[:keyreq, :a]], "a:")
end
def test_key
assert_parameters([[:key, :a]], "a: 1")
end
def test_keyrest
assert_parameters([[:keyrest, :a]], "**a")
end
def test_nokey
assert_parameters([[:nokey]], "**nil")
end
def test_keyrest_anonymous
assert_parameters([[:keyrest, :**]], "**")
end
def test_key_ordering
omit("TruffleRuby returns keys in order they were declared") if RUBY_ENGINE == "truffleruby"
assert_parameters([[:keyreq, :a], [:keyreq, :b], [:key, :c], [:key, :d]], "a:, c: 1, b:, d: 2")
end
def test_block
assert_parameters([[:block, :a]], "&a")
end
def test_block_anonymous
assert_parameters([[:block, :&]], "&")
end
def test_forwarding
assert_parameters([[:rest, :*], [:keyrest, :**], [:block, :&]], "...")
end
private
def assert_parameters(expected, source)
# Compare against our expectation.
assert_equal(expected, signature(source))
# Compare against Ruby's expectation.
object = Object.new
eval("def object.m(#{source}); end")
assert_equal(expected, object.method(:m).parameters)
end
def signature(source)
program = Prism.parse("def m(#{source}); end").value
program.statements.body.first.parameters.signature
end
end
end
|