spec 5.0.14

Sign up to get free protection for your applications and to get access to all the features.
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