@@ -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