maxitest 0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3894f7f1af83137bcce04d41e4e49133c65a36db
4
+ data.tar.gz: 86757fd5bfc626049bc9f0c620f741ad0d796dd4
5
+ SHA512:
6
+ metadata.gz: 7e268f0581b2674d88b8c0e3f7aa57c8c3880c50255d57273e9b44a9406cd541c3509e5064ac1e72d592fde4bffd1e4eae754c96ffa651768066578fd5967461
7
+ data.tar.gz: 5f659851669f5dac806b43f323d70c504d5ecabf391ceaaab12557a88042541cfad48d094614cf08ec9941ea384340df701b85863da7fbc56d5c9087b06e8ff4
@@ -0,0 +1,20 @@
1
+ Copyright (C) 2013 Michael Grosser <michael@grosser.it>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ require 'optparse'
3
+
4
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
5
+ require 'maxitest/vendor/testrbl'
6
+
7
+ class << Maxitest::Testrbl
8
+ def line_pattern_option(file, line)
9
+ [file, "-l", line]
10
+ end
11
+ end
12
+ Maxitest::Testrbl.run_from_cli(ARGV)
@@ -0,0 +1,2 @@
1
+ module Maxitest
2
+ end
@@ -0,0 +1,21 @@
1
+ require "minitest"
2
+
3
+ if $stdout.tty?
4
+ require "maxitest/vendor/rg"
5
+ Minitest.extensions << "rg"
6
+ Minitest::RG.rg!
7
+ end
8
+
9
+ require "maxitest/vendor/line"
10
+ Minitest.extensions << "line"
11
+
12
+ require "minitest/autorun"
13
+ require "maxitest/vendor/around"
14
+ require "maxitest/trap"
15
+ require "maxitest/let_bang"
16
+
17
+ Minitest::Spec::DSL.send(:alias_method, :context, :describe)
18
+
19
+ class << Minitest::Test
20
+ alias_method :order_dependent!, :i_suck_and_my_tests_are_order_dependent!
21
+ end
@@ -0,0 +1,6 @@
1
+ Minitest::Spec::DSL.class_eval do
2
+ def let!(name, &block)
3
+ let(name, &block)
4
+ before { send(name) }
5
+ end
6
+ end
@@ -0,0 +1,25 @@
1
+ Minitest::Test.class_eval do
2
+ alias_method :run_without_stop, :run
3
+ def run
4
+ if Maxitest.interrupted
5
+ self.failures = [Minitest::Skip.new("Maxitest::Interrupted")]
6
+ else
7
+ run_without_stop
8
+ end
9
+ self
10
+ end
11
+ end
12
+
13
+ module Maxitest
14
+ Interrupted = Class.new(StandardError)
15
+ class << self
16
+ attr_accessor :interrupted
17
+
18
+ def interrupt
19
+ Maxitest.interrupted = true
20
+ raise Maxitest::Interrupted, "Execution interrupted by user"
21
+ end
22
+ end
23
+ end
24
+
25
+ Signal.trap(:SIGINT) { Maxitest.interrupt }
@@ -0,0 +1,84 @@
1
+ # https://raw.githubusercontent.com/splattael/minitest-around/master/LICENSE
2
+ # BEGIN generated by rake update, do not modify
3
+ =begin
4
+ Copyright (c) 2012 Peter Suschlik
5
+
6
+ MIT License
7
+
8
+ Permission is hereby granted, free of charge, to any person obtaining
9
+ a copy of this software and associated documentation files (the
10
+ "Software"), to deal in the Software without restriction, including
11
+ without limitation the rights to use, copy, modify, merge, publish,
12
+ distribute, sublicense, and/or sell copies of the Software, and to
13
+ permit persons to whom the Software is furnished to do so, subject to
14
+ the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be
17
+ included in all copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
+ =end
27
+ #END generated by rake update, do not modify
28
+
29
+ # https://raw.githubusercontent.com/splattael/minitest-around/master/lib/minitest/around/version.rb
30
+ # BEGIN generated by rake update, do not modify
31
+ module Minitest
32
+ module Around
33
+ VERSION = '0.2.0'
34
+ end
35
+ end
36
+ #END generated by rake update, do not modify
37
+
38
+ # https://raw.githubusercontent.com/splattael/minitest-around/master/lib/minitest/around/unit.rb
39
+ # BEGIN generated by rake update, do not modify
40
+ Minitest::Test.class_eval do
41
+ alias_method :run_without_around, :run
42
+ def run(*args)
43
+ if defined?(around)
44
+ around { run_without_around(*args) }
45
+ else
46
+ run_without_around(*args)
47
+ end
48
+ self
49
+ end
50
+ end
51
+ #END generated by rake update, do not modify
52
+
53
+ # https://raw.githubusercontent.com/splattael/minitest-around/master/lib/minitest/around/spec.rb
54
+ # BEGIN generated by rake update, do not modify
55
+ Minitest::Spec::DSL.class_eval do
56
+ # - resume to call first part
57
+ # - execute test
58
+ # - resume fiber to execute last part
59
+ def around(&block)
60
+ fib = nil
61
+ before do
62
+ fib = Fiber.new do |context, resume|
63
+ begin
64
+ context.instance_exec(resume, &block)
65
+ rescue Object
66
+ fib = :failed
67
+ raise
68
+ end
69
+ end
70
+ fib.resume(self, lambda { Fiber.yield })
71
+ end
72
+ after { fib.resume unless fib == :failed }
73
+ end
74
+
75
+ # Minitest does not support multiple before/after blocks
76
+ def before(type=nil, &block)
77
+ include Module.new { define_method(:setup) { super(); instance_exec(&block) } }
78
+ end
79
+
80
+ def after(type=nil, &block)
81
+ include Module.new { define_method(:teardown) { instance_exec(&block); super() } }
82
+ end
83
+ end
84
+ #END generated by rake update, do not modify
@@ -0,0 +1,101 @@
1
+ =begin
2
+ Copyright (c) 2014 Magnus Holm
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ =end
23
+
24
+ require 'pathname'
25
+
26
+ # https://raw.githubusercontent.com/judofyr/minitest-line/master/lib/minitest/line_plugin.rb
27
+ # BEGIN generated by rake update, do not modify
28
+ module Minitest
29
+ def self.plugin_line_options(opts, options)
30
+ opts.on '-l', '--line N', Integer, "Run test at line number" do |lineno|
31
+ options[:line] = lineno
32
+ end
33
+ end
34
+
35
+ def self.plugin_line_init(options)
36
+ exp_line = options[:line]
37
+ if !exp_line
38
+ reporter.reporters << LineReporter.new
39
+ return
40
+ end
41
+
42
+ methods = Runnable.runnables.flat_map do |runnable|
43
+ runnable.runnable_methods.map do |name|
44
+ [name, runnable.instance_method(name)]
45
+ end
46
+ end.uniq
47
+
48
+ current_filename = nil
49
+ tests = {}
50
+
51
+ methods.each do |name, meth|
52
+ next unless loc = meth.source_location
53
+ current_filename ||= loc[0]
54
+ next unless current_filename == loc[0]
55
+ tests[loc[1]] = name
56
+ end
57
+
58
+ _, main_test = tests.sort_by { |k, v| -k }.detect do |line, name|
59
+ exp_line >= line
60
+ end
61
+
62
+ raise "Could not find test method after line #{exp_line}" unless main_test
63
+
64
+ options[:filter] = main_test
65
+ end
66
+
67
+ class LineReporter < Reporter
68
+ def initialize(*)
69
+ super
70
+ @failures = []
71
+ end
72
+
73
+ def record(result)
74
+ if !result.skipped? && !result.passed?
75
+ @failures << result
76
+ end
77
+ end
78
+
79
+ def report
80
+ return unless @failures.any?
81
+ io.puts
82
+ io.puts "Focus on failing tests:"
83
+ pwd = Pathname.new(Dir.pwd)
84
+ @failures.each do |res|
85
+ meth = res.method(res.name)
86
+ file, line = meth.source_location
87
+ if file
88
+ file = Pathname.new(file)
89
+ file = file.relative_path_from(pwd) if file.absolute?
90
+ output = "ruby #{file} -l #{line}"
91
+ output = "\e[31m#{output}\e[0m" if $stdout.tty?
92
+ io.puts output
93
+ end
94
+ end
95
+ end
96
+ end
97
+
98
+ def self.plugin_line_inject_reporter
99
+ end
100
+ end
101
+ #END generated by rake update, do not modify
@@ -0,0 +1,92 @@
1
+ # https://raw.githubusercontent.com/blowmage/minitest-rg/master/LICENSE
2
+ # BEGIN generated by rake update, do not modify
3
+ =begin
4
+ Copyright (c) 2012 Mike Moore
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ "Software"), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
+ =end
25
+ #END generated by rake update, do not modify
26
+
27
+ # https://raw.githubusercontent.com/blowmage/minitest-rg/master/lib/minitest/rg_plugin.rb
28
+ # BEGIN generated by rake update, do not modify
29
+ module MiniTest
30
+
31
+ def self.plugin_rg_options opts, options # :nodoc:
32
+ end
33
+
34
+ def self.plugin_rg_init options # :nodoc:
35
+ if RG.rg?
36
+ io = RG.new options[:io]
37
+
38
+ self.reporter.reporters.grep(Minitest::Reporter).each do |rep|
39
+ rep.io = io
40
+ end
41
+ end
42
+ end
43
+
44
+ class RG
45
+ VERSION = "5.1.0"
46
+
47
+ COLORS = {
48
+ '.' => "\e[32m.\e[0m",
49
+ 'E' => "\e[33mE\e[0m",
50
+ 'F' => "\e[31mF\e[0m",
51
+ 'S' => "\e[36mS\e[0m",
52
+ }
53
+
54
+ attr_reader :io, :colors
55
+
56
+ def self.rg!
57
+ @rg = true
58
+ end
59
+
60
+ def self.rg?
61
+ @rg ||= false
62
+ end
63
+
64
+ def initialize io, colors = COLORS
65
+ @io = io
66
+ @colors = colors
67
+ end
68
+
69
+ def print o
70
+ io.print(colors[o] || o)
71
+ end
72
+
73
+ def puts o=nil
74
+ return io.puts if o.nil?
75
+ if o =~ /(\d+) failures, (\d+) errors/
76
+ if $1 != '0' || $2 != '0'
77
+ io.puts "\e[31m#{o}\e[0m"
78
+ else
79
+ io.puts "\e[32m#{o}\e[0m"
80
+ end
81
+ else
82
+ io.puts o
83
+ end
84
+ end
85
+
86
+ def method_missing msg, *args
87
+ return super unless io.respond_to? msg
88
+ io.send(msg, *args)
89
+ end
90
+ end
91
+ end
92
+ #END generated by rake update, do not modify
@@ -0,0 +1,172 @@
1
+ # Copyright 2014 Michael Grosser under MIT License
2
+
3
+ # https://raw.githubusercontent.com/grosser/testrbl/master/lib/testrbl.rb
4
+ # BEGIN generated by rake update, do not modify
5
+ module Maxitest
6
+ module Testrbl
7
+ PATTERNS = [
8
+ /^(\s+)(should|test|it)\s+['"](.*)['"]\s+do\s*(?:#.*)?$/,
9
+ /^(\s+)(context|describe)\s+['"]?(.*?)['"]?\s+do\s*(?:#.*)?$/,
10
+ /^(\s+)def\s+(test_)([a-z_\d]+)\s*(?:#.*)?$/
11
+ ]
12
+
13
+ OPTION_WITH_ARGUMENT = ["-I", "-r", "-n", "-e"]
14
+ INTERPOLATION = /\\\#\\\{.*?\\\}/
15
+
16
+ def self.run_from_cli(argv)
17
+ files, options = partition_argv(argv)
18
+ files.concat(changed_files) if options.delete("--changed")
19
+ files = files.map { |f| localize(f) }
20
+ load_options, options = partition_options(options)
21
+
22
+ if files.size == 1 and files.first =~ /^(\S+):(\d+)$/
23
+ file = $1
24
+ line = $2
25
+ run(ruby + load_options + line_pattern_option(file, line) + options)
26
+ else
27
+ if files.size == 1 and File.file?(files.first)
28
+ run(ruby + load_options + files + options)
29
+ elsif options.none? { |arg| arg =~ /^-n/ }
30
+ files = files.map { |f| File.directory?(f) ? all_test_files_in(f) : f }.flatten
31
+ run(ruby + load_options + files.map { |f| "-r#{f}" } + options + ["-e", ""])
32
+ else # pass though
33
+ # no bundle exec: projects with mini and unit-test do not run well via bundle exec testrb
34
+ run ["testrb"] + argv
35
+ end
36
+ end
37
+ end
38
+
39
+ # overwritten by maxitest to just return line
40
+ def self.line_pattern_option(file, line)
41
+ [file, "-n", "/#{pattern_from_file(File.readlines(file), line)}/"]
42
+ end
43
+
44
+ # usable via external tools like zeus
45
+ def self.pattern_from_file(lines, line)
46
+ possible_lines = lines[0..(line.to_i-1)].reverse
47
+
48
+ found = possible_lines.map { |line| test_pattern_from_line(line) || block_start_from_line(line) }.compact
49
+
50
+ # pattern and the groups it is nested under (like describe - describe - it)
51
+ last_spaces = " " * 100
52
+ patterns = found.select do |spaces, name|
53
+ last_spaces = spaces if spaces.size < last_spaces.size
54
+ end.map(&:last).compact
55
+
56
+ return filter_duplicate_final(patterns).reverse.join(".*") if found.size > 0
57
+
58
+ raise "no test found before line #{line}"
59
+ end
60
+
61
+ # only keep 1 pattern that stops matching via $
62
+ def self.filter_duplicate_final(patterns)
63
+ found_final = 0
64
+ patterns.reject { |p| p.end_with?("$") and (found_final += 1) > 1 }
65
+ end
66
+
67
+ private
68
+
69
+ def self.all_test_files_in(folder)
70
+ Dir[File.join(folder, "{**/,}*_{test,spec}.rb")].uniq
71
+ end
72
+
73
+ def self.partition_options(options)
74
+ next_is_before = false
75
+ options.partition do |option|
76
+ if next_is_before
77
+ next_is_before = false
78
+ true
79
+ else
80
+ if option =~ /^-(r|I)/
81
+ next_is_before = (option.size == 2)
82
+ true
83
+ else
84
+ false
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ # fix 1.9 not being able to load local files
91
+ def self.localize(file)
92
+ file =~ /^[-a-z\d_]/ ? "./#{file}" : file
93
+ end
94
+
95
+ def self.partition_argv(argv)
96
+ next_is_option = false
97
+ argv.partition do |arg|
98
+ if next_is_option
99
+ next_is_option = false
100
+ else
101
+ if arg =~ /^-.$/ or arg =~ /^--/ # single letter option followed by argument like -I test or long options like --verbose
102
+ next_is_option = true if OPTION_WITH_ARGUMENT.include?(arg)
103
+ false
104
+ elsif arg =~ /^-/ # multi letter option like -Itest
105
+ false
106
+ else
107
+ true
108
+ end
109
+ end
110
+ end
111
+ end
112
+
113
+ def self.changed_files
114
+ changed_files = `git status -s`.split("\n").map { |l| l.strip.split(/\s+/, 2)[1] }
115
+ raise "Failed: #{changed_files}" unless $?.success?
116
+ changed_files.select { |f| f =~ /_(test|spec)\.rb$/ && File.exist?(f) }
117
+ end
118
+
119
+ def self.ruby
120
+ if File.file?("Gemfile")
121
+ ["ruby", "-rbundler/setup"] # faster then bundle exec ruby
122
+ else
123
+ ["ruby"]
124
+ end
125
+ end
126
+
127
+ def self.run(command)
128
+ puts command.join(" ")
129
+ STDOUT.flush # if exec fails horribly we at least see some output
130
+ Kernel.exec *command
131
+ end
132
+
133
+ def self.block_start_from_line(line)
134
+ if line =~ /^(\s*).* do( \|.*\|)?$/
135
+ [$1, nil]
136
+ end
137
+ end
138
+
139
+ def self.test_pattern_from_line(line)
140
+ PATTERNS.each do |r|
141
+ next unless line =~ r
142
+ whitespace, method, test_name = $1, $2, $3
143
+ return [whitespace, test_pattern_from_match(method, test_name)]
144
+ end
145
+ nil
146
+ end
147
+
148
+ def self.test_pattern_from_match(method, test_name)
149
+ regex = Regexp.escape(test_name).gsub("\\ "," ").gsub(INTERPOLATION, ".*")
150
+
151
+ regex = case method
152
+ when "should"
153
+ optional_test_name = "(?:\(.*\))?"
154
+ "#{method} #{regex}\. #{optional_test_name}$"
155
+ when "describe"
156
+ "#{test_name}(::)?"
157
+ when "test"
158
+ # test "xxx -_ yyy"
159
+ # test-unit: "test: xxx -_ yyy"
160
+ # activesupport: "test_xxx_-__yyy"
161
+ "^test(: |_)#{regex.gsub(" ", ".")}$"
162
+ when "it"
163
+ "#test_\\d+_#{test_name}$"
164
+ else
165
+ regex
166
+ end
167
+
168
+ regex.gsub("'", ".")
169
+ end
170
+ end
171
+ end
172
+ #END generated by rake update, do not modify
@@ -0,0 +1,3 @@
1
+ module Maxitest
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: maxitest
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Michael Grosser
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 5.4.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 5.4.2
27
+ description:
28
+ email: michael@grosser.it
29
+ executables:
30
+ - mtest
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - MIT-LICENSE
35
+ - bin/mtest
36
+ - lib/maxitest.rb
37
+ - lib/maxitest/autorun.rb
38
+ - lib/maxitest/let_bang.rb
39
+ - lib/maxitest/trap.rb
40
+ - lib/maxitest/vendor/around.rb
41
+ - lib/maxitest/vendor/line.rb
42
+ - lib/maxitest/vendor/rg.rb
43
+ - lib/maxitest/vendor/testrbl.rb
44
+ - lib/maxitest/version.rb
45
+ homepage: https://github.com/grosser/maxitest
46
+ licenses:
47
+ - MIT
48
+ metadata: {}
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project:
65
+ rubygems_version: 2.2.2
66
+ signing_key:
67
+ specification_version: 4
68
+ summary: Full featured Minitest
69
+ test_files: []