Skip to content

Commit de80282

Browse files
committed
+ Add metadata lazy accessor to Runnable / Result. (matteeyah)
[git-p4: depot-paths = "//src/minitest/dev/": change = 13875]
1 parent 4795997 commit de80282

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

lib/minitest.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,31 @@ def initialize name # :nodoc:
446446
self.name = name
447447
self.failures = []
448448
self.assertions = 0
449+
# lazy initializer for metadata
450+
end
451+
452+
##
453+
# Metadata you attach to the test results that get sent to the reporter.
454+
#
455+
# Lazily initializes to a hash, to keep memory down.
456+
#
457+
# NOTE: this data *must* be plain (read: marshal-able) data!
458+
# Hashes! Arrays! Strings!
459+
460+
def metadata
461+
@metadata ||= {}
462+
end
463+
464+
##
465+
# Sets metadata, mainly used for +Result.from+.
466+
467+
attr_writer :metadata
468+
469+
##
470+
# Returns true if metadata exists.
471+
472+
def metadata?
473+
defined? @metadata
449474
end
450475

451476
##
@@ -566,6 +591,7 @@ def self.from runnable
566591
r.assertions = o.assertions
567592
r.failures = o.failures.dup
568593
r.time = o.time
594+
r.metadata = o.metadata if o.metadata?
569595

570596
r.source_location = o.method(o.name).source_location rescue ["unknown", -1]
571597

test/minitest/test_minitest_reporter.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@ def passing_test
6565
@pt ||= Minitest::Result.from Minitest::Test.new(:woot)
6666
end
6767

68+
def passing_test_with_metadata
69+
test = Minitest::Test.new(:woot)
70+
test.metadata[:meta] = :data
71+
@pt ||= Minitest::Result.from test
72+
end
73+
6874
def skip_test
6975
unless defined? @st then
7076
@st = Minitest::Test.new(:woot)
@@ -166,6 +172,29 @@ def test_record_pass
166172
assert_equal 0, r.assertions
167173
end
168174

175+
def test_record_pass_with_metadata
176+
reporter = self.r
177+
178+
def reporter.metadata
179+
@metadata
180+
end
181+
182+
def reporter.record result
183+
super
184+
@metadata = result.metadata if result.metadata?
185+
end
186+
187+
r.record passing_test_with_metadata
188+
189+
exp = { :meta => :data }
190+
assert_equal exp, reporter.metadata
191+
192+
assert_equal ".", io.string
193+
assert_empty r.results
194+
assert_equal 1, r.count
195+
assert_equal 0, r.assertions
196+
end
197+
169198
def test_record_fail
170199
fail_test = self.fail_test
171200
r.record fail_test

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy