probatio_diabolica 0.4.0 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/pr_d/version.rb +1 -1
- data/lib/pr_d.rb +57 -5
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 86e99563f7268abd22cb2aefb8bf9b932ffc22b54564a99e231c1eb9d0282aee
|
|
4
|
+
data.tar.gz: 3a7cf8e9a34e830df9999976bfcc2c0298e76d7aef8494038bdc9ca369318761
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cf9e2016027998b4ae11312b17bfc94b55f540acbff985de714d5aff433855b72bbd5845c1bab2ba531dd3c661cb2656d65046dcd7d7807abb09af3b278742fc
|
|
7
|
+
data.tar.gz: 87be48c549b49ac867e86e90b7b38a0b83211d40359aa30c59f0eec2ea288884e4879a69346535a722d3d6671d81c15c6fbe1ba03e796951c09a4c7fed261b1b
|
data/lib/pr_d/version.rb
CHANGED
data/lib/pr_d.rb
CHANGED
|
@@ -105,6 +105,8 @@ module PrD
|
|
|
105
105
|
@subject_definition_stack << @subject_definition_stack.last
|
|
106
106
|
|
|
107
107
|
instance_eval(&block)
|
|
108
|
+
rescue StandardError => e
|
|
109
|
+
report_context_execution_error(e, description:)
|
|
108
110
|
ensure
|
|
109
111
|
@subject_definition_stack.pop
|
|
110
112
|
@hook_scopes.pop
|
|
@@ -119,7 +121,7 @@ module PrD
|
|
|
119
121
|
after_hooks = collect_after_hooks
|
|
120
122
|
|
|
121
123
|
begin
|
|
122
|
-
description ||=
|
|
124
|
+
description ||= infer_example_description(block)
|
|
123
125
|
@models_stack.push(model) if model
|
|
124
126
|
@formatter.it(description, &block) if @verbose
|
|
125
127
|
@formatter.increment_level
|
|
@@ -155,19 +157,36 @@ module PrD
|
|
|
155
157
|
end
|
|
156
158
|
|
|
157
159
|
def let(name, &block)
|
|
158
|
-
block_result =
|
|
160
|
+
block_result = nil
|
|
161
|
+
let_error = nil
|
|
162
|
+
|
|
163
|
+
begin
|
|
164
|
+
block_result = block.call
|
|
165
|
+
rescue StandardError => e
|
|
166
|
+
let_error = e
|
|
167
|
+
end
|
|
159
168
|
|
|
160
169
|
if @verbose
|
|
170
|
+
rendered_value =
|
|
171
|
+
if let_error
|
|
172
|
+
"Error while evaluating let(:#{name}): #{let_error.class}: #{let_error.message}"
|
|
173
|
+
else
|
|
174
|
+
block_result
|
|
175
|
+
end
|
|
161
176
|
formatter_let_arity = @formatter.method(:let).arity
|
|
162
177
|
if formatter_let_arity == 1
|
|
163
|
-
@formatter.let(
|
|
178
|
+
@formatter.let(rendered_value)
|
|
164
179
|
else
|
|
165
|
-
@formatter.let(name,
|
|
180
|
+
@formatter.let(name, rendered_value)
|
|
166
181
|
end
|
|
167
182
|
end
|
|
168
183
|
|
|
169
184
|
instance_variable_set("@#{name}", block_result)
|
|
170
185
|
define_singleton_method(name) do
|
|
186
|
+
if let_error
|
|
187
|
+
raise let_error.class, let_error.message, let_error.backtrace
|
|
188
|
+
end
|
|
189
|
+
|
|
171
190
|
record_let_access(name, block_result, callsite: caller_locations(1, 1).first)
|
|
172
191
|
block_result
|
|
173
192
|
end
|
|
@@ -268,7 +287,14 @@ module PrD
|
|
|
268
287
|
raise ArgumentError, 'No tests found. Provide at least one spec content to run.' if tests.nil? || tests.empty?
|
|
269
288
|
|
|
270
289
|
@tests = tests
|
|
271
|
-
@tests.
|
|
290
|
+
@tests.each_with_index do |test_source, index|
|
|
291
|
+
@current_test_source = test_source
|
|
292
|
+
instance_eval(test_source)
|
|
293
|
+
rescue StandardError => e
|
|
294
|
+
report_spec_source_execution_error(e, source_index: index + 1)
|
|
295
|
+
ensure
|
|
296
|
+
@current_test_source = nil
|
|
297
|
+
end
|
|
272
298
|
rescue StandardError => e
|
|
273
299
|
$stderr.puts "An error occurred while running tests: #{e.message}"
|
|
274
300
|
$stderr.puts e.backtrace.join("\n")
|
|
@@ -377,6 +403,18 @@ module PrD
|
|
|
377
403
|
@hook_scopes.last
|
|
378
404
|
end
|
|
379
405
|
|
|
406
|
+
def infer_example_description(block)
|
|
407
|
+
return nil if block.nil?
|
|
408
|
+
return nil if @current_test_source.nil?
|
|
409
|
+
|
|
410
|
+
line_number = block.source_location&.last
|
|
411
|
+
return nil if line_number.nil?
|
|
412
|
+
|
|
413
|
+
@current_test_source.lines[line_number - 1]&.strip
|
|
414
|
+
rescue StandardError
|
|
415
|
+
nil
|
|
416
|
+
end
|
|
417
|
+
|
|
380
418
|
def collect_before_hooks
|
|
381
419
|
@hook_scopes.flat_map { |scope| scope[:before] }
|
|
382
420
|
end
|
|
@@ -404,6 +442,20 @@ module PrD
|
|
|
404
442
|
@failed_count += 1
|
|
405
443
|
end
|
|
406
444
|
|
|
445
|
+
def report_context_execution_error(error, description:)
|
|
446
|
+
$stderr.puts "An error occurred while executing context '#{description}': #{error.message}"
|
|
447
|
+
$stderr.puts error.backtrace.join("\n")
|
|
448
|
+
@formatter.failure_result("Context '#{description}' failed at #{formatted_time} with error message: #{error.message}")
|
|
449
|
+
@failed_count += 1
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
def report_spec_source_execution_error(error, source_index:)
|
|
453
|
+
$stderr.puts "An error occurred while loading spec source ##{source_index}: #{error.message}"
|
|
454
|
+
$stderr.puts error.backtrace.join("\n")
|
|
455
|
+
@formatter.failure_result("Spec source ##{source_index} failed at #{formatted_time} with error message: #{error.message}")
|
|
456
|
+
@failed_count += 1
|
|
457
|
+
end
|
|
458
|
+
|
|
407
459
|
def process_test_result(result)
|
|
408
460
|
unless result.respond_to?(:pass)
|
|
409
461
|
raise NoMethodError, 'Test example must return a matcher result. Use expect(...).to(...) or expect(...).not_to(...).'
|