@@ -11,14 +11,14 @@ def test_type_inspect
1111 nil_type = ReplTypeCompletor ::Types ::NIL
1212 string_type = ReplTypeCompletor ::Types ::STRING
1313 true_or_false = ReplTypeCompletor ::Types ::UnionType [ true_type , false_type ]
14- array_type = ReplTypeCompletor ::Types ::InstanceType . new Array , { Elem : true_or_false }
14+ array_type = ReplTypeCompletor ::Types ::InstanceType . array_with_params ( true_or_false )
1515 assert_equal 'nil' , nil_type . inspect
1616 assert_equal 'true' , true_type . inspect
1717 assert_equal 'false' , false_type . inspect
1818 assert_equal 'String' , string_type . inspect
1919 assert_equal 'Array' , ReplTypeCompletor ::Types ::InstanceType . new ( Array ) . inspect
2020 assert_equal 'false | true' , true_or_false . inspect
21- assert_equal ' Array[Elem: false | true]' , array_type . inspect
21+ assert_equal " Array[#{ ReplTypeCompletor :: Types . array_elem_type_param } : false | true]" , array_type . inspect
2222 assert_equal 'Array' , array_type . inspect_without_params
2323 assert_equal 'Proc' , ReplTypeCompletor ::Types ::PROC . inspect
2424 assert_equal 'Array.itself' , ReplTypeCompletor ::Types ::SingletonType . new ( Array ) . inspect
@@ -51,14 +51,14 @@ def bo.hash; 42; end # Needed to use this object as a hash key
5151 assert_equal Hash , hash_type . klass
5252 assert_equal Hash , bo_key_hash_type . klass
5353 assert_equal Hash , bo_value_hash_type . klass
54- assert_equal BasicObject , bo_arr_type . params [ :Elem ] . klass
55- assert_equal BasicObject , bo_key_hash_type . params [ :K ] . klass
56- assert_equal BasicObject , bo_value_hash_type . params [ :V ] . klass
54+ assert_equal BasicObject , bo_arr_type . params [ ReplTypeCompletor :: Types . array_elem_type_param ] . klass
55+ assert_equal BasicObject , bo_key_hash_type . params [ ReplTypeCompletor :: Types . hash_key_type_param ] . klass
56+ assert_equal BasicObject , bo_value_hash_type . params [ ReplTypeCompletor :: Types . hash_value_type_param ] . klass
5757 assert_equal 'Object' , obj_type . inspect
5858 assert_equal 'Array[unresolved]' , arr_type . inspect
59- assert_equal ' Array[Elem: Integer | String]' , arr_type . tap ( &:params ) . inspect
59+ assert_equal " Array[#{ ReplTypeCompletor :: Types . array_elem_type_param } : Integer | String]" , arr_type . tap ( &:params ) . inspect
6060 assert_equal 'Hash[unresolved]' , hash_type . inspect
61- assert_equal ' Hash[K: String, V: Symbol]' , hash_type . tap ( &:params ) . inspect
61+ assert_equal " Hash[#{ ReplTypeCompletor :: Types . hash_key_type_param } : String, #{ ReplTypeCompletor :: Types . hash_value_type_param } : Symbol]" , hash_type . tap ( &:params ) . inspect
6262 assert_equal 'Array.itself' , ReplTypeCompletor ::Types . type_from_object ( Array ) . inspect
6363 assert_equal 'ReplTypeCompletor.itself' , ReplTypeCompletor ::Types . type_from_object ( ReplTypeCompletor ) . inspect
6464 end
@@ -109,22 +109,45 @@ def test_params_lazily_expanded_on_recursive_type
109109 type = ReplTypeCompletor ::Types . type_from_object a
110110 assert_equal Array , type . klass
111111 10 . times do |i |
112- elem_type = type . params [ :Elem ]
112+ elem_type = type . params [ ReplTypeCompletor :: Types . array_elem_type_param ]
113113 expected = i . even? ? [ Array , String ] : [ Array , Symbol ]
114114 assert_equal expected , elem_type . types . map ( &:klass ) . sort_by ( &:name )
115115 type = elem_type . types . find { _1 . klass == Array }
116116 end
117- hash_type = type . params [ :Elem ] . types . find { _1 . klass == Hash }
117+ hash_type = type . params [ ReplTypeCompletor :: Types . array_elem_type_param ] . types . find { _1 . klass == Hash }
118118 assert_equal 'Hash[unresolved]' , hash_type . inspect
119- assert_equal ' Hash[K: Integer, V: Float]' , hash_type . tap ( &:params ) . inspect
119+ assert_equal " Hash[#{ ReplTypeCompletor :: Types . hash_key_type_param } : Integer, #{ ReplTypeCompletor :: Types . hash_value_type_param } : Float]" , hash_type . tap ( &:params ) . inspect
120120 end
121121
122122 def test_infinite_nested_type_inspect
123123 a = [ ]
124124 a << a
125125 type = ReplTypeCompletor ::Types . type_from_object a
126126 assert_equal 'Array[unresolved]' , type . inspect
127- assert_equal 'Array[Elem: Array[unresolved]]' , type . tap ( &:params ) . inspect
127+ assert_equal "Array[#{ ReplTypeCompletor ::Types . array_elem_type_param } : Array[unresolved]]" , type . tap ( &:params ) . inspect
128+ end
129+
130+ def test_array_hash_type_params_fallback
131+ rbs_builder = ReplTypeCompletor ::Types . instance_variable_get ( :@rbs_builder )
132+ assert_include [ :E , :Elem ] , ReplTypeCompletor ::Types . array_elem_type_param
133+ assert_equal :K , ReplTypeCompletor ::Types . hash_key_type_param
134+ assert_equal :V , ReplTypeCompletor ::Types . hash_value_type_param
135+
136+ ReplTypeCompletor ::Types . instance_variable_set ( :@rbs_builder , nil )
137+ type_param_cach_ivars = %i[ @array_elem_type_param @hash_type_params ]
138+ type_param_cach_ivars . each do |ivar |
139+ assert ReplTypeCompletor ::Types . instance_variable_get ( ivar )
140+ ReplTypeCompletor ::Types . instance_variable_set ( ivar , nil )
141+ end
142+
143+ assert_equal :E , ReplTypeCompletor ::Types . array_elem_type_param
144+ assert_equal :K , ReplTypeCompletor ::Types . hash_key_type_param
145+ assert_equal :V , ReplTypeCompletor ::Types . hash_value_type_param
146+ type_param_cach_ivars . each do |ivar |
147+ refute ReplTypeCompletor ::Types . instance_variable_get ( ivar )
148+ end
149+ ensure
150+ ReplTypeCompletor ::Types . instance_variable_set ( :@rbs_builder , rbs_builder ) if rbs_builder
128151 end
129152 end
130153end
0 commit comments