megatest 0.8.0 → 0.9.0
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/CHANGELOG.md +9 -0
- data/lib/megatest/assertions.rb +55 -15
- data/lib/megatest/runner.rb +6 -3
- data/lib/megatest/runtime.rb +3 -3
- data/lib/megatest/selector.rb +2 -0
- data/lib/megatest/state.rb +3 -3
- data/lib/megatest/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ea30c8e8593fdaa884c4ec33c19f4d5341ccaabb28d0d81fad546b8afc3feb70
|
|
4
|
+
data.tar.gz: e72756df6996fd7acf921c3e474ac5c64124bdcddec97bb0c670062680a6db22
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0d2ecdd55e90bcc208cc64f9d79930ae43639d7e37b982bd3e67835dd72b26e704f4d32205d6f9af26a2dff477310cdf70abf267afab9d178bec55802c384d30
|
|
7
|
+
data.tar.gz: 39cb4c8fb0befc06117d48ed82001909bf41fe128f4878b03d095708028456537a6a9ad3c33c1970f2567e32671d8e7a422437195d9b4ad086db600491da9623
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [0.9.0] - 2026-05-09
|
|
4
|
+
|
|
5
|
+
- Implement `capture_subprocess_io`.
|
|
6
|
+
- Change setup/teadown callbacks order to be more consistent with `ActiveSupport::TestCase`.
|
|
7
|
+
- Don't consider skips as failure when running with `--fail-fast`.
|
|
8
|
+
- `assert_equal` now use `==` instead of `!=` to compare objects
|
|
9
|
+
- `assert_operator` now calls `assert_predicate` if there no third argument (mimick Minitest).
|
|
10
|
+
- Support `assert_difference("expr" => 1)` like `ActiveSupport::TestCase`
|
|
11
|
+
|
|
3
12
|
## [0.8.0] - 2026-05-08
|
|
4
13
|
|
|
5
14
|
- Improve rendering of retried failures so they're actionable.
|
data/lib/megatest/assertions.rb
CHANGED
|
@@ -23,8 +23,13 @@ module Megatest
|
|
|
23
23
|
class UnexpectedError < Assertion
|
|
24
24
|
attr_reader :cause
|
|
25
25
|
|
|
26
|
-
def initialize(cause)
|
|
27
|
-
|
|
26
|
+
def initialize(cause, method = nil)
|
|
27
|
+
if method
|
|
28
|
+
super("Unexpected exception in #{method} block")
|
|
29
|
+
else
|
|
30
|
+
super("Unexpected exception")
|
|
31
|
+
end
|
|
32
|
+
@method = method
|
|
28
33
|
@cause = cause
|
|
29
34
|
end
|
|
30
35
|
|
|
@@ -95,7 +100,7 @@ module Megatest
|
|
|
95
100
|
@__m.fail(nil, "Use assert_nil if expecting nil, or pass `allow_nil: true`")
|
|
96
101
|
end
|
|
97
102
|
|
|
98
|
-
|
|
103
|
+
unless expected == actual
|
|
99
104
|
@__m.fail(
|
|
100
105
|
message,
|
|
101
106
|
@__m.diff(expected, actual) ||
|
|
@@ -355,13 +360,9 @@ module Megatest
|
|
|
355
360
|
end
|
|
356
361
|
alias :assert_raise :assert_raises
|
|
357
362
|
|
|
358
|
-
def assert_nothing_raised
|
|
363
|
+
def assert_nothing_raised(&block)
|
|
359
364
|
@__m.assert do
|
|
360
|
-
|
|
361
|
-
rescue ::Megatest::Assertion, *::Megatest::IGNORED_ERRORS
|
|
362
|
-
raise # Pass through
|
|
363
|
-
rescue Exception => unexepected_exception
|
|
364
|
-
raise ::Megatest::UnexpectedError, unexepected_exception
|
|
365
|
+
@__m.safe_yield(__callee__, &block)
|
|
365
366
|
end
|
|
366
367
|
end
|
|
367
368
|
|
|
@@ -386,8 +387,13 @@ module Megatest
|
|
|
386
387
|
end
|
|
387
388
|
end
|
|
388
389
|
|
|
389
|
-
def assert_operator(left, operator, right, msg = nil, message: nil)
|
|
390
|
+
def assert_operator(left, operator, right = @__m.unset, msg = nil, message: nil)
|
|
390
391
|
message = @__m.msg(msg, message)
|
|
392
|
+
|
|
393
|
+
unless @__m.set?(right)
|
|
394
|
+
return assert_predicate(left, operator, message: message)
|
|
395
|
+
end
|
|
396
|
+
|
|
391
397
|
@__m.assert do
|
|
392
398
|
unless left.__send__(operator, right)
|
|
393
399
|
@__m.fail(message, "Expected", @__m.pp(left), "to be #{operator}", @__m.pp(right))
|
|
@@ -395,8 +401,13 @@ module Megatest
|
|
|
395
401
|
end
|
|
396
402
|
end
|
|
397
403
|
|
|
398
|
-
def refute_operator(left, operator, right, msg = nil, message: nil)
|
|
404
|
+
def refute_operator(left, operator, right = @__m.unset, msg = nil, message: nil)
|
|
399
405
|
message = @__m.msg(msg, message)
|
|
406
|
+
|
|
407
|
+
unless @__m.set?(right)
|
|
408
|
+
return refute_predicate(left, operator, message: message)
|
|
409
|
+
end
|
|
410
|
+
|
|
400
411
|
@__m.assert do
|
|
401
412
|
if left.__send__(operator, right)
|
|
402
413
|
@__m.fail(message, "Expected", @__m.pp(left), "to not be #{operator}", @__m.pp(right))
|
|
@@ -405,7 +416,11 @@ module Megatest
|
|
|
405
416
|
end
|
|
406
417
|
alias_method :assert_not_operator, :refute_operator
|
|
407
418
|
|
|
408
|
-
def assert_difference(expression, difference = @__m.unset, message: nil, &block)
|
|
419
|
+
def assert_difference(expression = @__m.unset, difference = @__m.unset, message: nil, **kwargs, &block)
|
|
420
|
+
if !@__m.set?(expression) && !kwargs.empty?
|
|
421
|
+
expression = kwargs
|
|
422
|
+
end
|
|
423
|
+
|
|
409
424
|
expressions = if @__m.set?(difference)
|
|
410
425
|
Array(expression).to_h { |e| [e, difference] }
|
|
411
426
|
elsif Hash === expression
|
|
@@ -419,7 +434,7 @@ module Megatest
|
|
|
419
434
|
@__m.assert do
|
|
420
435
|
before = exps.map(&:call)
|
|
421
436
|
|
|
422
|
-
retval = @__m.safe_yield(&block)
|
|
437
|
+
retval = @__m.safe_yield(__callee__, &block)
|
|
423
438
|
|
|
424
439
|
expressions.zip(exps, before) do |(code, diff), exp, before_value|
|
|
425
440
|
actual = exp.call
|
|
@@ -434,13 +449,13 @@ module Megatest
|
|
|
434
449
|
end
|
|
435
450
|
end
|
|
436
451
|
|
|
437
|
-
def refute_difference(expressions, message: nil, &block)
|
|
452
|
+
def refute_difference(expressions = @__m.unset, message: nil, &block)
|
|
438
453
|
exps = Array(expressions).map { |e| @__m.expression(e, block) }
|
|
439
454
|
|
|
440
455
|
@__m.assert do
|
|
441
456
|
before = exps.map(&:call)
|
|
442
457
|
|
|
443
|
-
retval = @__m.safe_yield(&block)
|
|
458
|
+
retval = @__m.safe_yield(__callee__, &block)
|
|
444
459
|
|
|
445
460
|
exps.zip(before) do |exp, before_value|
|
|
446
461
|
actual = exp.call
|
|
@@ -616,5 +631,30 @@ module Megatest
|
|
|
616
631
|
$stderr = orig_stderr
|
|
617
632
|
end
|
|
618
633
|
end
|
|
634
|
+
|
|
635
|
+
def capture_subprocess_io
|
|
636
|
+
require "tempfile" unless defined?(::Tempfile)
|
|
637
|
+
|
|
638
|
+
captured_stdout, captured_stderr = Tempfile.new("out"), Tempfile.new("err")
|
|
639
|
+
|
|
640
|
+
orig_stdout, orig_stderr = $stdout.dup, $stderr.dup
|
|
641
|
+
$stdout.reopen captured_stdout
|
|
642
|
+
$stderr.reopen captured_stderr
|
|
643
|
+
|
|
644
|
+
yield
|
|
645
|
+
|
|
646
|
+
$stdout.rewind
|
|
647
|
+
$stderr.rewind
|
|
648
|
+
|
|
649
|
+
[captured_stdout.read, captured_stderr.read]
|
|
650
|
+
ensure
|
|
651
|
+
$stdout.reopen orig_stdout
|
|
652
|
+
$stderr.reopen orig_stderr
|
|
653
|
+
|
|
654
|
+
orig_stdout.close
|
|
655
|
+
orig_stderr.close
|
|
656
|
+
captured_stdout.close!
|
|
657
|
+
captured_stderr.close!
|
|
658
|
+
end
|
|
619
659
|
end
|
|
620
660
|
end
|
data/lib/megatest/runner.rb
CHANGED
|
@@ -91,14 +91,17 @@ module Megatest
|
|
|
91
91
|
runtime.record_failures do
|
|
92
92
|
instance.before_teardown
|
|
93
93
|
end
|
|
94
|
+
|
|
95
|
+
runtime.record_failures do
|
|
96
|
+
instance.teardown
|
|
97
|
+
end
|
|
98
|
+
|
|
94
99
|
test_case.each_teardown_callback do |callback|
|
|
95
100
|
runtime.record_failures(downlevel: 2) do
|
|
96
101
|
instance.instance_exec(&callback)
|
|
97
102
|
end
|
|
98
103
|
end
|
|
99
|
-
|
|
100
|
-
instance.teardown
|
|
101
|
-
end
|
|
104
|
+
|
|
102
105
|
runtime.record_failures do
|
|
103
106
|
instance.after_teardown
|
|
104
107
|
end
|
data/lib/megatest/runtime.rb
CHANGED
|
@@ -139,12 +139,12 @@ module Megatest
|
|
|
139
139
|
end
|
|
140
140
|
end
|
|
141
141
|
|
|
142
|
-
def safe_yield
|
|
142
|
+
def safe_yield(method)
|
|
143
143
|
yield
|
|
144
144
|
rescue Assertion, *IGNORED_ERRORS
|
|
145
145
|
raise
|
|
146
|
-
rescue ::Exception =>
|
|
147
|
-
raise UnexpectedError,
|
|
146
|
+
rescue ::Exception => unexpected_exception
|
|
147
|
+
raise UnexpectedError.new(unexpected_exception, method)
|
|
148
148
|
end
|
|
149
149
|
|
|
150
150
|
UNSET = BasicObject.new
|
data/lib/megatest/selector.rb
CHANGED
data/lib/megatest/state.rb
CHANGED
|
@@ -89,7 +89,7 @@ module Megatest
|
|
|
89
89
|
def on_setup(block)
|
|
90
90
|
raise Error, "setup blocks can't be defined in context blocks" if @current_context
|
|
91
91
|
|
|
92
|
-
@setup_callbacks
|
|
92
|
+
@setup_callbacks << block
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
def on_around(block)
|
|
@@ -377,7 +377,7 @@ module Megatest
|
|
|
377
377
|
|
|
378
378
|
def each_teardown_callback(&block)
|
|
379
379
|
@test_suite.ancestors.each do |test_suite|
|
|
380
|
-
test_suite.teardown_callbacks.
|
|
380
|
+
test_suite.teardown_callbacks.reverse_each(&block)
|
|
381
381
|
end
|
|
382
382
|
end
|
|
383
383
|
|
|
@@ -627,7 +627,7 @@ module Megatest
|
|
|
627
627
|
end
|
|
628
628
|
|
|
629
629
|
def bad?
|
|
630
|
-
!@retried && !@failures.empty?
|
|
630
|
+
!@retried && !skipped? && !@failures.empty?
|
|
631
631
|
end
|
|
632
632
|
|
|
633
633
|
def status
|
data/lib/megatest/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: megatest
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.9.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jean Boussier
|
|
@@ -75,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
75
75
|
- !ruby/object:Gem::Version
|
|
76
76
|
version: '0'
|
|
77
77
|
requirements: []
|
|
78
|
-
rubygems_version: 4.0.
|
|
78
|
+
rubygems_version: 4.0.11
|
|
79
79
|
specification_version: 4
|
|
80
80
|
summary: Modern test-unit style test framework
|
|
81
81
|
test_files: []
|