spec 5.0.14

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.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.autotest +34 -0
  3. data/.gitignore +3 -0
  4. data/History.txt +911 -0
  5. data/Manifest.txt +26 -0
  6. data/README.txt +497 -0
  7. data/Rakefile +214 -0
  8. data/design_rationale.rb +52 -0
  9. data/lib/hoe/minitest.rb +26 -0
  10. data/lib/minitest/assertions.rb +649 -0
  11. data/lib/minitest/autorun.rb +12 -0
  12. data/lib/minitest/benchmark.rb +423 -0
  13. data/lib/minitest/expectations.rb +268 -0
  14. data/lib/minitest/hell.rb +11 -0
  15. data/lib/minitest/mock.rb +220 -0
  16. data/lib/minitest/parallel_each.rb +120 -0
  17. data/lib/minitest/pride.rb +4 -0
  18. data/lib/minitest/pride_plugin.rb +143 -0
  19. data/lib/minitest/spec.rb +292 -0
  20. data/lib/minitest/test.rb +272 -0
  21. data/lib/minitest/unit.rb +45 -0
  22. data/lib/minitest.rb +839 -0
  23. data/lib/spec.rb +3 -0
  24. data/readme.md +7 -0
  25. data/release_notes.md +49 -0
  26. data/spec.gemspec +36 -0
  27. data/test/manual/appium.rb +14 -0
  28. data/test/manual/appium_after_last.rb +24 -0
  29. data/test/manual/appium_before_first.rb +23 -0
  30. data/test/manual/assert.rb +61 -0
  31. data/test/manual/before_first_0.rb +27 -0
  32. data/test/manual/before_first_1.rb +29 -0
  33. data/test/manual/debug.rb +37 -0
  34. data/test/manual/do_end.rb +31 -0
  35. data/test/manual/raise.rb +61 -0
  36. data/test/manual/run2.rb +74 -0
  37. data/test/manual/run3.rb +91 -0
  38. data/test/manual/setup.rb +13 -0
  39. data/test/manual/simple.rb +19 -0
  40. data/test/manual/simple2.rb +20 -0
  41. data/test/manual/t.rb +11 -0
  42. data/test/manual/trace.rb +19 -0
  43. data/test/manual/trace2.rb +15 -0
  44. data/test/minitest/metametameta.rb +78 -0
  45. data/test/minitest/test_helper.rb +20 -0
  46. data/test/minitest/test_minitest_benchmark.rb +131 -0
  47. data/test/minitest/test_minitest_mock.rb +490 -0
  48. data/test/minitest/test_minitest_reporter.rb +270 -0
  49. data/test/minitest/test_minitest_spec.rb +794 -0
  50. data/test/minitest/test_minitest_unit.rb +1846 -0
  51. metadata +147 -0
data/Rakefile ADDED
@@ -0,0 +1,214 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+
6
+ Hoe.plugin :seattlerb
7
+
8
+ Hoe.spec 'minitest' do
9
+ developer 'Ryan Davis', 'ryand-ruby@zenspider.com'
10
+
11
+ self.rubyforge_name = "bfts"
12
+ self.testlib = :minitest
13
+ self.licenses = [ 'MIT' ]
14
+ end
15
+
16
+ desc "Find missing expectations"
17
+ task :specs do
18
+ $:.unshift "lib"
19
+ require "minitest/unit"
20
+ require "minitest/spec"
21
+
22
+ pos_prefix, neg_prefix = "must", "wont"
23
+ skip_re = /^(must|wont)$|wont_(throw)|must_(block|not?_|nothing|raise$)/x
24
+ dont_flip_re = /(must|wont)_(include|respond_to)/
25
+
26
+ map = {
27
+ /(must_throw)s/ => '\1',
28
+ /(?!not)_same/ => '_be_same_as',
29
+ /_in_/ => '_be_within_',
30
+ /_operator/ => '_be',
31
+ /_includes/ => '_include',
32
+ /(must|wont)_(.*_of|nil|silent|empty)/ => '\1_be_\2',
33
+ /must_raises/ => 'must_raise',
34
+ }
35
+
36
+ expectations = Minitest::Expectations.public_instance_methods.map(&:to_s)
37
+ assertions = Minitest::Assertions.public_instance_methods.map(&:to_s)
38
+
39
+ assertions.sort.each do |assertion|
40
+ expectation = case assertion
41
+ when /^assert/ then
42
+ assertion.sub(/^assert/, pos_prefix.to_s)
43
+ when /^refute/ then
44
+ assertion.sub(/^refute/, neg_prefix.to_s)
45
+ end
46
+
47
+ next unless expectation
48
+ next if expectation =~ skip_re
49
+
50
+ regexp, replacement = map.find { |re, _| expectation =~ re }
51
+ expectation.sub! regexp, replacement if replacement
52
+
53
+ next if expectations.include? expectation
54
+
55
+ args = [assertion, expectation].map(&:to_sym).map(&:inspect)
56
+ args << :reverse if expectation =~ dont_flip_re
57
+
58
+ puts
59
+ puts "##"
60
+ puts "# :method: #{expectation}"
61
+ puts "# See Minitest::Assertions##{assertion}"
62
+ puts
63
+ puts "infect_an_assertion #{args.join ", "}"
64
+ end
65
+ end
66
+
67
+ # vim: syntax=Ruby
68
+
69
+ # from https://github.com/bootstraponline/gem_template
70
+ # todo: publish gem_template as a gem
71
+
72
+ # encoding: utf-8
73
+ require 'rubygems'
74
+ require 'rake'
75
+ require 'date'
76
+
77
+ # Defines gem name.
78
+ def repo_name; 'spec' end # rubygems.org name
79
+ def gh_name; "bootstraponline/#{repo_name}" end # username/reponame as used on github.com
80
+ def version_file; "lib/minitest.rb" end
81
+ def version_rgx; /VERSION = '([^']+)'/m end
82
+
83
+ def version
84
+ @version = @version || File.read(version_file).match(version_rgx)[1]
85
+ end
86
+
87
+ def bump
88
+ data = File.read version_file
89
+
90
+ v_line = data.match version_rgx
91
+ d_line = data.match /DATE = '([^']+)'/m
92
+
93
+ old_v = v_line[0]
94
+ old_d = d_line[0]
95
+
96
+ old_num = v_line[1]
97
+ new_num = old_num.split('.')
98
+ new_num[-1] = new_num[-1].to_i + 1
99
+ new_num = new_num.join '.'
100
+
101
+ new_v = old_v.sub old_num, new_num
102
+ puts "#{old_num} -> #{new_num}"
103
+
104
+ old_date = d_line[1]
105
+ new_date = Date.today.to_s
106
+ new_d = old_d.sub old_date, new_date
107
+ puts "#{old_date} -> #{new_date}" unless old_date == new_date
108
+
109
+ data.sub! old_v, new_v
110
+ data.sub! old_d, new_d
111
+
112
+ File.write version_file, data
113
+ end
114
+
115
+ desc 'Bump the version number and update the date.'
116
+ task :bump do
117
+ bump
118
+ end
119
+
120
+ desc 'Install gems required for release task'
121
+ task :dev do
122
+ sh 'gem install --no-rdoc --no-ri yard'
123
+ sh 'gem install --no-rdoc --no-ri redcarpet'
124
+ end
125
+
126
+ desc 'Install gem'
127
+ task :install => [ :b_gem, :uninstall ] do
128
+ sh "gem install --no-rdoc --no-ri --local #{repo_name}-#{version}.gem"
129
+ end
130
+
131
+ desc 'Build a new gem'
132
+ task :b_gem do
133
+ `chmod 0600 ~/.gem/credentials`
134
+ sh "gem build #{repo_name}.gemspec"
135
+ end
136
+
137
+ # Inspired by Gollum's Rakefile
138
+ desc 'Build and release a new gem to rubygems.org'
139
+ task :rel => :b_gem do
140
+ unless `git branch`.include? '* master'
141
+ puts 'Master branch required to release.'
142
+ exit!
143
+ end
144
+
145
+ # Commit then pull before pushing.
146
+ sh "git commit --allow-empty -am 'Release #{version}'"
147
+ sh 'git pull'
148
+ sh "git tag v#{version}"
149
+ # update notes now that there's a new tag
150
+ Rake::Task['notes'].execute
151
+ sh "git commit --allow-empty -am 'Update release notes'"
152
+ sh 'git push origin master'
153
+ sh "git push origin v#{version}"
154
+ sh "gem push #{repo_name}-#{version}.gem"
155
+ end
156
+
157
+ desc 'Uninstall gem'
158
+ task :uninstall do
159
+ cmd = "gem uninstall -aIx #{repo_name}"
160
+ puts cmd
161
+ # rescue on gem not installed error.
162
+ begin; `cmd`; rescue; end
163
+ end
164
+
165
+ desc 'Update release notes'
166
+ task :notes do
167
+ tag_sort = ->(tag1,tag2) do
168
+ tag1_numbers = tag1.match(/\.?v(\d+\.\d+\.\d+)$/)[1].split('.').map! { |n| n.to_i }
169
+ tag2_numbers = tag2.match(/\.?v(\d+\.\d+\.\d+)$/)[1].split('.').map! { |n| n.to_i }
170
+ tag1_numbers <=> tag2_numbers
171
+ end
172
+
173
+ tags = `git tag`.split "\n"
174
+ tags.sort! &tag_sort
175
+ pairs = []
176
+ tags.each_index { |a| pairs.push tags[a] + '...' + tags[a+1] unless tags[a+1].nil? }
177
+
178
+ notes = ''
179
+
180
+ dates = `git log --tags --simplify-by-decoration --pretty="format:%d %ad" --date=short`.split "\n"
181
+
182
+ pairs.sort! &tag_sort
183
+ pairs.reverse! # pairs are in reverse order.
184
+
185
+ tag_date = []
186
+ pairs.each do |pair|
187
+ tag = pair.split('...').last
188
+ dates.each do |line|
189
+ # regular tag, or tag on master.
190
+ if line.include?(tag + ')') || line.include?(tag + ',')
191
+ tag_date.push tag + ' ' + line.match(/\d{4}-\d{2}-\d{2}/)[0]
192
+ break
193
+ end
194
+ end
195
+ end
196
+
197
+ pairs.each_index do |a|
198
+ data =`git log --pretty=oneline #{pairs[a]}`
199
+ new_data = ''
200
+ data.split("\n").each do |line|
201
+ hex = line.match(/[a-zA-Z0-9]+/)[0]
202
+ # use first 7 chars to match GitHub
203
+ comment = line.gsub(hex, '').strip
204
+ next if comment == 'Update release notes'
205
+ new_data += "- [#{hex[0...7]}](https://github.com/#{gh_name}/commit/#{hex}) #{comment}\n"
206
+ end
207
+ data = new_data + "\n"
208
+
209
+ # last pair is the released version.
210
+ notes += "#### #{tag_date[a]}\n\n" + data + "\n"
211
+ end
212
+
213
+ File.open('release_notes.md', 'w') { |f| f.write notes.to_s.strip }
214
+ end
@@ -0,0 +1,52 @@
1
+ # Specs: # Equivalent Unit Tests:
2
+ ###############################################################################
3
+ describe Thingy do # class TestThingy < Minitest::Test
4
+ before do # def setup
5
+ do_some_setup # super
6
+ end # do_some_setup
7
+ # end
8
+ it "should do the first thing" do #
9
+ 1.must_equal 1 # def test_first_thing
10
+ end # assert_equal 1, 1
11
+ # end
12
+ describe SubThingy do # end
13
+ before do #
14
+ do_more_setup # class TestSubThingy < TestThingy
15
+ end # def setup
16
+ # super
17
+ it "should do the second thing" do # do_more_setup
18
+ 2.must_equal 2 # end
19
+ end #
20
+ end # def test_second_thing
21
+ end # assert_equal 2, 2
22
+ # end
23
+ # end
24
+ ###############################################################################
25
+ # runs 2 specs # runs 3 tests
26
+ ###############################################################################
27
+ # The specs generate:
28
+
29
+ class ThingySpec < Minitest::Spec
30
+ def setup
31
+ super
32
+ do_some_setup
33
+ end
34
+
35
+ def test_should_do_the_first_thing
36
+ assert_equal 1, 1
37
+ end
38
+ end
39
+
40
+ class SubThingySpec < ThingySpec
41
+ def setup
42
+ super
43
+ do_more_setup
44
+ end
45
+
46
+ # because only setup/teardown is inherited, not specs
47
+ remove_method :test_should_do_the_first_thing
48
+
49
+ def test_should_do_the_second_thing
50
+ assert_equal 2, 2
51
+ end
52
+ end
@@ -0,0 +1,26 @@
1
+ # :stopdoc:
2
+
3
+ class Hoe
4
+ end
5
+
6
+ module Hoe::Minitest
7
+ def initialize_minitest
8
+ dir = "../../minitest/dev/lib"
9
+ Hoe.add_include_dirs dir if File.directory? dir
10
+
11
+ gem "minitest"
12
+ require "minitest"
13
+ version = Minitest::VERSION.split(/\./).first(2).join(".")
14
+
15
+ dependency "minitest", "~> #{version}", :development unless
16
+ self.name == "minitest" or ENV["MT_NO_ISOLATE"]
17
+ end
18
+
19
+ def define_minitest_tasks
20
+ self.testlib = :minitest
21
+
22
+ # make sure we use the gemmed minitest on 1.9
23
+ self.test_prelude = 'gem "minitest"' unless
24
+ self.name == "minitest" or ENV["MT_NO_ISOLATE"]
25
+ end
26
+ end