Skip to content

Commit 135f66e

Browse files
committed
Add parse_type_params tests
Signed-off-by: Alexandre Terrasa <alexandre.terrasa@shopify.com>
1 parent b0df446 commit 135f66e

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

test/rbs/parser_test.rb

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -820,6 +820,60 @@ def test_proc__untyped_function
820820
end
821821
end
822822

823+
def test_parse_type_params
824+
RBS::Parser.parse_type_params(buffer("[T]")).tap do |params|
825+
assert_equal 1, params.size
826+
assert_equal :T, params[0].name
827+
assert_nil params[0].upper_bound
828+
end
829+
830+
RBS::Parser.parse_type_params(buffer("[T < Integer, U = String]")).tap do |params|
831+
assert_equal 2, params.size
832+
assert_equal :T, params[0].name
833+
assert_equal "Integer", params[0].upper_bound.to_s
834+
assert_equal :U, params[1].name
835+
assert_equal "String", params[1].default_type.to_s
836+
end
837+
838+
RBS::Parser.parse_type_params(buffer("[T, in U, out V]")).tap do |params|
839+
assert_equal 3, params.size
840+
assert_equal :T, params[0].name
841+
assert_equal "invariant", params[0].variance.to_s
842+
assert_equal :U, params[1].name
843+
assert_equal "contravariant", params[1].variance.to_s
844+
assert_equal :V, params[2].name
845+
assert_equal "covariant", params[2].variance.to_s
846+
end
847+
848+
RBS::Parser.parse_type_params(buffer("[T, unchecked U, unchecked out V = Integer]")).tap do |params|
849+
assert_equal 3, params.size
850+
assert_equal :T, params[0].name
851+
refute params[0].unchecked?
852+
assert_equal :U, params[1].name
853+
assert params[1].unchecked?
854+
assert_equal :V, params[2].name
855+
assert params[2].unchecked?
856+
assert_equal "covariant", params[2].variance.to_s
857+
assert_equal "Integer", params[2].default_type.to_s
858+
end
859+
860+
assert_raises RBS::ParsingError do
861+
RBS::Parser.parse_type_params(buffer("[]"))
862+
end
863+
864+
assert_raises RBS::ParsingError do
865+
RBS::Parser.parse_type_params(buffer("[T]A"))
866+
end
867+
868+
assert_raises RBS::ParsingError do
869+
RBS::Parser.parse_type_params(buffer("[in T]"), module_type_params: false)
870+
end
871+
872+
assert_raises RBS::ParsingError do
873+
RBS::Parser.parse_type_params(buffer("[unchecked T]"), module_type_params: false)
874+
end
875+
end
876+
823877
def test__lex
824878
content = <<~RBS
825879
# LineComment

0 commit comments

Comments
 (0)