@@ -124,6 +124,36 @@ def foo; end
124124 refute skip_method? ( original , method_node , :foo )
125125 end
126126
127+ def test_apply_all_raises_when_signature_cannot_be_instrumented
128+ test_class = Class . new do
129+ extend T ::Sig
130+
131+ def self . foo ( value ) ; end
132+ end
133+ Support . const_set ( :SigApplicatorApplyAllTest , test_class )
134+
135+ tree = RBI ::Parser . parse_string ( <<~RBI )
136+ class Support::SigApplicatorApplyAllTest
137+ sig { params(other: String).void }
138+ def self.foo(value); end
139+ end
140+ RBI
141+
142+ parser = RBI ::Parser . singleton_class
143+ original_parse_file = RBI ::Parser . method ( :parse_file )
144+ parser . send ( :define_method , :parse_file ) { |_path | tree }
145+
146+ Object . send ( :remove_const , :ZZZSigApplicatorTest ) if Object . const_defined? ( :ZZZSigApplicatorTest )
147+
148+ error = assert_raises ( RuntimeError ) { SigApplicator . apply_all! }
149+ assert_includes error . message , 'SigApplicator: 1 methods could not be instrumented:'
150+ assert_includes error . message , 'Support::SigApplicatorApplyAllTest.foo:'
151+ ensure
152+ parser . send ( :define_method , :parse_file , original_parse_file )
153+ Support . send ( :remove_const , :SigApplicatorApplyAllTest ) if Support . const_defined? ( :SigApplicatorApplyAllTest , false )
154+ Object . send ( :remove_const , :ZZZSigApplicatorTest ) if Object . const_defined? ( :ZZZSigApplicatorTest )
155+ end
156+
127157 private
128158
129159 def parse_method ( source )
0 commit comments