Skip to content

Commit 3f29a2d

Browse files
fail on uninstrumented methods
1 parent ea6ae84 commit 3f29a2d

2 files changed

Lines changed: 39 additions & 4 deletions

File tree

temporalio/test/support/sig_applicator.rb

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,7 @@ def apply_all!
6565

6666
warn "SigApplicator: applied #{applied} runtime type signatures (#{skipped} skipped)"
6767

68-
return if errors.empty?
69-
70-
warn "SigApplicator: #{errors.size} methods could not be instrumented:"
71-
errors.each { |e| warn " #{e}" }
68+
raise_instrumentation_errors!(errors)
7269
end
7370

7471
def record_type_error(message)
@@ -142,6 +139,14 @@ def register_summary_hook!
142139
Object.const_set(:ZZZSigApplicatorTest, klass)
143140
end
144141

142+
def raise_instrumentation_errors!(errors)
143+
return if errors.empty?
144+
145+
summary = +"SigApplicator: #{errors.size} methods could not be instrumented:\n"
146+
errors.each { |error| summary << " #{error}\n" }
147+
raise summary.chomp
148+
end
149+
145150
def apply_scope(node, errors)
146151
return [0, 0] unless node.respond_to?(:nodes)
147152

temporalio/test/support/sig_applicator_test.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)