rubysl-test-unit 1.0.1 → 2.0.1
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/.travis.yml +3 -2
- data/lib/rubysl/test/unit/unit.rb +863 -267
- data/lib/rubysl/test/unit/version.rb +1 -1
- data/lib/test/unit/assertions.rb +281 -531
- data/lib/test/unit/parallel.rb +184 -0
- data/lib/test/unit/testcase.rb +17 -143
- data/rubysl-test-unit.gemspec +3 -1
- metadata +22 -39
- data/lib/test/unit/assertionfailederror.rb +0 -14
- data/lib/test/unit/autorunner.rb +0 -220
- data/lib/test/unit/collector.rb +0 -43
- data/lib/test/unit/collector/dir.rb +0 -107
- data/lib/test/unit/collector/objectspace.rb +0 -34
- data/lib/test/unit/error.rb +0 -56
- data/lib/test/unit/failure.rb +0 -51
- data/lib/test/unit/testresult.rb +0 -80
- data/lib/test/unit/testsuite.rb +0 -76
- data/lib/test/unit/ui/console/testrunner.rb +0 -127
- data/lib/test/unit/ui/fox/testrunner.rb +0 -268
- data/lib/test/unit/ui/gtk/testrunner.rb +0 -416
- data/lib/test/unit/ui/gtk2/testrunner.rb +0 -465
- data/lib/test/unit/ui/testrunnermediator.rb +0 -68
- data/lib/test/unit/ui/testrunnerutilities.rb +0 -46
- data/lib/test/unit/ui/tk/testrunner.rb +0 -260
- data/lib/test/unit/util/backtracefilter.rb +0 -40
- data/lib/test/unit/util/observable.rb +0 -90
- data/lib/test/unit/util/procwrapper.rb +0 -48
@@ -0,0 +1,184 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
module Test
|
4
|
+
module Unit
|
5
|
+
class Worker < Runner # :nodoc:
|
6
|
+
class << self
|
7
|
+
undef autorun
|
8
|
+
end
|
9
|
+
|
10
|
+
alias orig_run_suite mini_run_suite
|
11
|
+
undef _run_suite
|
12
|
+
undef _run_suites
|
13
|
+
undef run
|
14
|
+
|
15
|
+
def increment_io(orig) # :nodoc:
|
16
|
+
*rest, io = 32.times.inject([orig.dup]){|ios, | ios << ios.last.dup }
|
17
|
+
rest.each(&:close)
|
18
|
+
io
|
19
|
+
end
|
20
|
+
|
21
|
+
def _run_suites(suites, type) # :nodoc:
|
22
|
+
suites.map do |suite|
|
23
|
+
_run_suite(suite, type)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def _run_suite(suite, type) # :nodoc:
|
28
|
+
@partial_report = []
|
29
|
+
orig_testout = MiniTest::Unit.output
|
30
|
+
i,o = IO.pipe
|
31
|
+
|
32
|
+
MiniTest::Unit.output = o
|
33
|
+
orig_stdin, orig_stdout = $stdin, $stdout
|
34
|
+
|
35
|
+
th = Thread.new do
|
36
|
+
begin
|
37
|
+
while buf = (self.verbose ? i.gets : i.read(5))
|
38
|
+
_report "p", buf
|
39
|
+
end
|
40
|
+
rescue IOError
|
41
|
+
rescue Errno::EPIPE
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
e, f, s = @errors, @failures, @skips
|
46
|
+
|
47
|
+
begin
|
48
|
+
result = orig_run_suite(suite, type)
|
49
|
+
rescue Interrupt
|
50
|
+
@need_exit = true
|
51
|
+
result = [nil,nil]
|
52
|
+
end
|
53
|
+
|
54
|
+
MiniTest::Unit.output = orig_testout
|
55
|
+
$stdin = orig_stdin
|
56
|
+
$stdout = orig_stdout
|
57
|
+
|
58
|
+
o.close
|
59
|
+
begin
|
60
|
+
th.join
|
61
|
+
rescue IOError
|
62
|
+
raise unless ["stream closed","closed stream"].include? $!.message
|
63
|
+
end
|
64
|
+
i.close
|
65
|
+
|
66
|
+
result << @partial_report
|
67
|
+
@partial_report = nil
|
68
|
+
result << [@errors-e,@failures-f,@skips-s]
|
69
|
+
result << ($: - @old_loadpath)
|
70
|
+
result << suite.name
|
71
|
+
|
72
|
+
begin
|
73
|
+
_report "done", Marshal.dump(result)
|
74
|
+
rescue Errno::EPIPE; end
|
75
|
+
return result
|
76
|
+
ensure
|
77
|
+
MiniTest::Unit.output = orig_stdout
|
78
|
+
$stdin = orig_stdin
|
79
|
+
$stdout = orig_stdout
|
80
|
+
o.close if o && !o.closed?
|
81
|
+
i.close if i && !i.closed?
|
82
|
+
end
|
83
|
+
|
84
|
+
def run(args = []) # :nodoc:
|
85
|
+
process_args args
|
86
|
+
@@stop_auto_run = true
|
87
|
+
@opts = @options.dup
|
88
|
+
@need_exit = false
|
89
|
+
|
90
|
+
@old_loadpath = []
|
91
|
+
begin
|
92
|
+
begin
|
93
|
+
@stdout = increment_io(STDOUT)
|
94
|
+
@stdin = increment_io(STDIN)
|
95
|
+
rescue
|
96
|
+
exit 2
|
97
|
+
end
|
98
|
+
exit 2 unless @stdout && @stdin
|
99
|
+
|
100
|
+
@stdout.sync = true
|
101
|
+
_report "ready!"
|
102
|
+
while buf = @stdin.gets
|
103
|
+
case buf.chomp
|
104
|
+
when /^loadpath (.+?)$/
|
105
|
+
@old_loadpath = $:.dup
|
106
|
+
$:.push(*Marshal.load($1.unpack("m")[0].force_encoding("ASCII-8BIT"))).uniq!
|
107
|
+
when /^run (.+?) (.+?)$/
|
108
|
+
_report "okay"
|
109
|
+
|
110
|
+
@options = @opts.dup
|
111
|
+
suites = MiniTest::Unit::TestCase.test_suites
|
112
|
+
|
113
|
+
begin
|
114
|
+
require $1
|
115
|
+
rescue LoadError
|
116
|
+
_report "after", Marshal.dump([$1, ProxyError.new($!)])
|
117
|
+
_report "ready"
|
118
|
+
next
|
119
|
+
end
|
120
|
+
_run_suites MiniTest::Unit::TestCase.test_suites-suites, $2.to_sym
|
121
|
+
|
122
|
+
if @need_exit
|
123
|
+
begin
|
124
|
+
_report "bye"
|
125
|
+
rescue Errno::EPIPE; end
|
126
|
+
exit
|
127
|
+
else
|
128
|
+
_report "ready"
|
129
|
+
end
|
130
|
+
when /^quit$/
|
131
|
+
begin
|
132
|
+
_report "bye"
|
133
|
+
rescue Errno::EPIPE; end
|
134
|
+
exit
|
135
|
+
end
|
136
|
+
end
|
137
|
+
rescue Errno::EPIPE
|
138
|
+
rescue Exception => e
|
139
|
+
begin
|
140
|
+
trace = e.backtrace
|
141
|
+
err = ["#{trace.shift}: #{e.message} (#{e.class})"] + trace.map{|t| t.prepend("\t") }
|
142
|
+
|
143
|
+
_report "bye", Marshal.dump(err.join("\n"))
|
144
|
+
rescue Errno::EPIPE;end
|
145
|
+
exit
|
146
|
+
ensure
|
147
|
+
@stdin.close if @stdin
|
148
|
+
@stdout.close if @stdout
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def _report(res, *args) # :nodoc:
|
153
|
+
res = "#{res} #{args.pack("m0")}" unless args.empty?
|
154
|
+
@stdout.puts(res)
|
155
|
+
end
|
156
|
+
|
157
|
+
def puke(klass, meth, e) # :nodoc:
|
158
|
+
@partial_report << [klass.name, meth, e.is_a?(MiniTest::Assertion) ? e : ProxyError.new(e)]
|
159
|
+
super
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
if $0 == __FILE__
|
166
|
+
module Test
|
167
|
+
module Unit
|
168
|
+
class TestCase < MiniTest::Unit::TestCase # :nodoc: all
|
169
|
+
undef on_parallel_worker?
|
170
|
+
def on_parallel_worker?
|
171
|
+
true
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
176
|
+
require 'rubygems'
|
177
|
+
module Gem # :nodoc:
|
178
|
+
end
|
179
|
+
class Gem::TestCase < MiniTest::Unit::TestCase # :nodoc:
|
180
|
+
@@project_dir = File.expand_path('../../../..', __FILE__)
|
181
|
+
end
|
182
|
+
|
183
|
+
Test::Unit::Worker.new.run(ARGV)
|
184
|
+
end
|
data/lib/test/unit/testcase.rb
CHANGED
@@ -1,159 +1,33 @@
|
|
1
|
-
#--
|
2
|
-
#
|
3
|
-
# Author:: Nathaniel Talbott.
|
4
|
-
# Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
|
5
|
-
# License:: Ruby license.
|
6
|
-
|
7
1
|
require 'test/unit/assertions'
|
8
|
-
require 'test/unit/failure'
|
9
|
-
require 'test/unit/error'
|
10
|
-
require 'test/unit/testsuite'
|
11
|
-
require 'test/unit/assertionfailederror'
|
12
|
-
require 'test/unit/util/backtracefilter'
|
13
2
|
|
14
3
|
module Test
|
15
4
|
module Unit
|
5
|
+
# remove silly TestCase class
|
6
|
+
remove_const(:TestCase) if defined?(self::TestCase)
|
16
7
|
|
17
|
-
|
18
|
-
# test methods, it takes care of making them into tests and
|
19
|
-
# wrapping those tests into a suite. It also does the
|
20
|
-
# nitty-gritty of actually running an individual test and
|
21
|
-
# collecting its results into a Test::Unit::TestResult object.
|
22
|
-
class TestCase
|
8
|
+
class TestCase < MiniTest::Unit::TestCase # :nodoc: all
|
23
9
|
include Assertions
|
24
|
-
include Util::BacktraceFilter
|
25
|
-
|
26
|
-
attr_reader :method_name
|
27
|
-
|
28
|
-
STARTED = name + "::STARTED"
|
29
|
-
FINISHED = name + "::FINISHED"
|
30
|
-
|
31
|
-
##
|
32
|
-
# These exceptions are not caught by #run.
|
33
|
-
|
34
|
-
PASSTHROUGH_EXCEPTIONS = [NoMemoryError, SignalException, Interrupt,
|
35
|
-
SystemExit]
|
36
|
-
|
37
|
-
# Creates a new instance of the fixture for running the
|
38
|
-
# test represented by test_method_name.
|
39
|
-
def initialize(test_method_name)
|
40
|
-
unless(respond_to?(test_method_name) and
|
41
|
-
(method(test_method_name).arity == 0 ||
|
42
|
-
method(test_method_name).arity == -1))
|
43
|
-
throw :invalid_test
|
44
|
-
end
|
45
|
-
@method_name = test_method_name
|
46
|
-
@test_passed = true
|
47
|
-
end
|
48
|
-
|
49
|
-
# Rolls up all of the test* methods in the fixture into
|
50
|
-
# one suite, creating a new instance of the fixture for
|
51
|
-
# each method.
|
52
|
-
def self.suite
|
53
|
-
method_names = public_instance_methods(true)
|
54
|
-
tests = method_names.delete_if {|method_name| method_name !~ /^test./}
|
55
|
-
suite = TestSuite.new(name)
|
56
|
-
tests.sort.each do
|
57
|
-
|test|
|
58
|
-
catch(:invalid_test) do
|
59
|
-
suite << new(test)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
if (suite.empty?)
|
63
|
-
catch(:invalid_test) do
|
64
|
-
suite << new("default_test")
|
65
|
-
end
|
66
|
-
end
|
67
|
-
return suite
|
68
|
-
end
|
69
|
-
|
70
|
-
# Runs the individual test method represented by this
|
71
|
-
# instance of the fixture, collecting statistics, failures
|
72
|
-
# and errors in result.
|
73
|
-
def run(result)
|
74
|
-
yield(STARTED, name)
|
75
|
-
@_result = result
|
76
|
-
begin
|
77
|
-
setup
|
78
|
-
__send__(@method_name)
|
79
|
-
rescue AssertionFailedError => e
|
80
|
-
add_failure(e.message, e.backtrace)
|
81
|
-
rescue Exception
|
82
|
-
raise if PASSTHROUGH_EXCEPTIONS.include? $!.class
|
83
|
-
add_error($!)
|
84
|
-
ensure
|
85
|
-
begin
|
86
|
-
teardown
|
87
|
-
rescue AssertionFailedError => e
|
88
|
-
add_failure(e.message, e.backtrace)
|
89
|
-
rescue Exception
|
90
|
-
raise if PASSTHROUGH_EXCEPTIONS.include? $!.class
|
91
|
-
add_error($!)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
result.add_run
|
95
|
-
yield(FINISHED, name)
|
96
|
-
end
|
97
10
|
|
98
|
-
|
99
|
-
|
100
|
-
def setup
|
11
|
+
def on_parallel_worker?
|
12
|
+
false
|
101
13
|
end
|
102
14
|
|
103
|
-
|
104
|
-
|
105
|
-
|
15
|
+
def run runner
|
16
|
+
@options = runner.options
|
17
|
+
super runner
|
106
18
|
end
|
107
|
-
|
108
|
-
def default_test
|
109
|
-
flunk("No tests were specified")
|
110
|
-
end
|
111
|
-
|
112
|
-
# Returns whether this individual test passed or
|
113
|
-
# not. Primarily for use in teardown so that artifacts
|
114
|
-
# can be left behind if the test fails.
|
115
|
-
def passed?
|
116
|
-
return @test_passed
|
117
|
-
end
|
118
|
-
private :passed?
|
119
|
-
|
120
|
-
def size
|
121
|
-
1
|
122
|
-
end
|
123
|
-
|
124
|
-
def add_assertion
|
125
|
-
@_result.add_assertion
|
126
|
-
end
|
127
|
-
private :add_assertion
|
128
19
|
|
129
|
-
def
|
130
|
-
|
131
|
-
@_result.add_failure(Failure.new(name, filter_backtrace(all_locations), message))
|
20
|
+
def self.test_order
|
21
|
+
:sorted
|
132
22
|
end
|
133
|
-
private :add_failure
|
134
23
|
|
135
|
-
def
|
136
|
-
|
137
|
-
@
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
# this instance of TestCase represents.
|
143
|
-
def name
|
144
|
-
"#{@method_name}(#{self.class.name})"
|
145
|
-
end
|
146
|
-
|
147
|
-
# Overridden to return #name.
|
148
|
-
def to_s
|
149
|
-
name
|
150
|
-
end
|
151
|
-
|
152
|
-
# It's handy to be able to compare TestCase instances.
|
153
|
-
def ==(other)
|
154
|
-
return false unless(other.kind_of?(self.class))
|
155
|
-
return false unless(@method_name == other.method_name)
|
156
|
-
self.class == other.class
|
24
|
+
def self.method_added(name)
|
25
|
+
return unless name.to_s.start_with?("test_")
|
26
|
+
@test_methods ||= {}
|
27
|
+
if @test_methods[name]
|
28
|
+
warn "test/unit warning: method #{ self }##{ name } is redefined"
|
29
|
+
end
|
30
|
+
@test_methods[name] = true
|
157
31
|
end
|
158
32
|
end
|
159
33
|
end
|
data/rubysl-test-unit.gemspec
CHANGED
@@ -16,10 +16,12 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
17
|
spec.require_paths = ["lib"]
|
18
18
|
|
19
|
+
spec.required_ruby_version = "~> 2.0"
|
20
|
+
|
19
21
|
spec.add_runtime_dependency "minitest", "~> 4.7"
|
20
22
|
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
25
|
spec.add_development_dependency "mspec", "~> 1.5"
|
24
|
-
spec.add_development_dependency "rubysl-prettyprint", "~>
|
26
|
+
spec.add_development_dependency "rubysl-prettyprint", "~> 2.0"
|
25
27
|
end
|
metadata
CHANGED
@@ -1,85 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubysl-test-unit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Shirai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2013-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '4.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '10.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '10.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: mspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '1.5'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.5'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rubysl-prettyprint
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '2.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '2.0'
|
83
83
|
description: Ruby standard library unit.
|
84
84
|
email:
|
85
85
|
- brixen@gmail.com
|
@@ -87,8 +87,8 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
-
-
|
91
|
-
-
|
90
|
+
- .gitignore
|
91
|
+
- .travis.yml
|
92
92
|
- Gemfile
|
93
93
|
- LICENSE
|
94
94
|
- README.md
|
@@ -97,27 +97,9 @@ files:
|
|
97
97
|
- lib/rubysl/test/unit/unit.rb
|
98
98
|
- lib/rubysl/test/unit/version.rb
|
99
99
|
- lib/test/unit.rb
|
100
|
-
- lib/test/unit/assertionfailederror.rb
|
101
100
|
- lib/test/unit/assertions.rb
|
102
|
-
- lib/test/unit/
|
103
|
-
- lib/test/unit/collector.rb
|
104
|
-
- lib/test/unit/collector/dir.rb
|
105
|
-
- lib/test/unit/collector/objectspace.rb
|
106
|
-
- lib/test/unit/error.rb
|
107
|
-
- lib/test/unit/failure.rb
|
101
|
+
- lib/test/unit/parallel.rb
|
108
102
|
- lib/test/unit/testcase.rb
|
109
|
-
- lib/test/unit/testresult.rb
|
110
|
-
- lib/test/unit/testsuite.rb
|
111
|
-
- lib/test/unit/ui/console/testrunner.rb
|
112
|
-
- lib/test/unit/ui/fox/testrunner.rb
|
113
|
-
- lib/test/unit/ui/gtk/testrunner.rb
|
114
|
-
- lib/test/unit/ui/gtk2/testrunner.rb
|
115
|
-
- lib/test/unit/ui/testrunnermediator.rb
|
116
|
-
- lib/test/unit/ui/testrunnerutilities.rb
|
117
|
-
- lib/test/unit/ui/tk/testrunner.rb
|
118
|
-
- lib/test/unit/util/backtracefilter.rb
|
119
|
-
- lib/test/unit/util/observable.rb
|
120
|
-
- lib/test/unit/util/procwrapper.rb
|
121
103
|
- rubysl-test-unit.gemspec
|
122
104
|
homepage: https://github.com/rubysl/rubysl-test-unit
|
123
105
|
licenses:
|
@@ -129,18 +111,19 @@ require_paths:
|
|
129
111
|
- lib
|
130
112
|
required_ruby_version: !ruby/object:Gem::Requirement
|
131
113
|
requirements:
|
132
|
-
- -
|
114
|
+
- - ~>
|
133
115
|
- !ruby/object:Gem::Version
|
134
|
-
version: '0'
|
116
|
+
version: '2.0'
|
135
117
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
118
|
requirements:
|
137
|
-
- -
|
119
|
+
- - '>='
|
138
120
|
- !ruby/object:Gem::Version
|
139
121
|
version: '0'
|
140
122
|
requirements: []
|
141
123
|
rubyforge_project:
|
142
|
-
rubygems_version: 2.
|
124
|
+
rubygems_version: 2.0.7
|
143
125
|
signing_key:
|
144
126
|
specification_version: 4
|
145
127
|
summary: Ruby standard library unit.
|
146
128
|
test_files: []
|
129
|
+
has_rdoc:
|