test-more 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.
- data/.gemspec +18 -0
- data/LICENSE +21 -0
- data/Rakefile +67 -0
- data/lib/test/more.rb +223 -0
- data/readme.rdoc +33 -0
- data/test/basic.t +13 -0
- metadata +53 -0
data/.gemspec
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
GemSpec = Gem::Specification.new do |gem|
|
|
4
|
+
gem.name = 'test-more'
|
|
5
|
+
gem.version = '0.0.1'
|
|
6
|
+
gem.license = 'MIT'
|
|
7
|
+
gem.required_ruby_version = '>= 1.9.1'
|
|
8
|
+
|
|
9
|
+
gem.authors << 'Ingy döt Net'
|
|
10
|
+
gem.email = 'ingy@ingy.net'
|
|
11
|
+
gem.summary = "Port of Perl's Test::More TAP test framework"
|
|
12
|
+
gem.description = <<-'.'
|
|
13
|
+
Port of Perl's Test::More TAP test framework.
|
|
14
|
+
.
|
|
15
|
+
gem.homepage = 'http://acmeism.org'
|
|
16
|
+
|
|
17
|
+
gem.files = `git ls-files`.lines.map{|l|l.chomp}
|
|
18
|
+
end
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
(The MIT License)
|
|
2
|
+
|
|
3
|
+
Copyright © 2013 Ingy döt Net
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
6
|
+
this software and associated documentation files (the ‘Software’), to deal in
|
|
7
|
+
the Software without restriction, including without limitation the rights to
|
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
9
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
|
10
|
+
so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Load Gem constants from the gemspec
|
|
2
|
+
GemSpecFile = '.gemspec'
|
|
3
|
+
load GemSpecFile
|
|
4
|
+
GemName = GemSpec.name
|
|
5
|
+
GemVersion = GemSpec.version
|
|
6
|
+
GemDir = "#{GemName}-#{GemVersion}"
|
|
7
|
+
GemFile = "#{GemDir}.gem"
|
|
8
|
+
DevNull = '2>/dev/null'
|
|
9
|
+
|
|
10
|
+
# Require the Rake libraries
|
|
11
|
+
require 'rake'
|
|
12
|
+
require 'rake/testtask'
|
|
13
|
+
require 'rake/clean'
|
|
14
|
+
if File.exists? 'test/testml.yaml'
|
|
15
|
+
if File.exists? 'lib/rake/testml.rb'
|
|
16
|
+
$:.unshift "#{Dir.getwd}/lib"
|
|
17
|
+
end
|
|
18
|
+
require 'rake/testml'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
task :default => 'help'
|
|
22
|
+
|
|
23
|
+
CLEAN.include GemDir, GemFile, 'data.tar.gz', 'metadata.gz'
|
|
24
|
+
|
|
25
|
+
desc 'Run the tests'
|
|
26
|
+
task :test do
|
|
27
|
+
system 'prove test/'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
desc 'Build the gem'
|
|
31
|
+
task :build => [:clean, :test] do
|
|
32
|
+
sh "gem build #{GemSpecFile}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
desc 'Install the gem'
|
|
36
|
+
task :install => [:build] do
|
|
37
|
+
sh "gem install #{GemFile}"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
desc 'Build, unpack and inspect the gem'
|
|
41
|
+
task :distdir => [:build] do
|
|
42
|
+
sh "tar xf #{GemFile} #{DevNull}"
|
|
43
|
+
Dir.mkdir GemDir
|
|
44
|
+
Dir.chdir GemDir
|
|
45
|
+
sh "tar xzf ../data.tar.gz #{DevNull}"
|
|
46
|
+
puts "\n>>> Entering sub-shell for #{GemDir}..."
|
|
47
|
+
system ENV['SHELL']
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
desc 'Build and push the gem'
|
|
51
|
+
task :release => [:build] do
|
|
52
|
+
sh "gem push #{GemFile}"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
desc 'Print a description of the gem'
|
|
56
|
+
task :desc do
|
|
57
|
+
puts "Gem: '#{GemName}' (version #{GemVersion})"
|
|
58
|
+
puts
|
|
59
|
+
puts GemSpec.description.gsub /^/, ' '
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
desc 'List the Rakefile tasks'
|
|
63
|
+
task :help do
|
|
64
|
+
puts 'The following rake tasks are available:'
|
|
65
|
+
puts
|
|
66
|
+
puts `rake -T`.gsub /^/, ' '
|
|
67
|
+
end
|
data/lib/test/more.rb
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
module Test
|
|
2
|
+
module More
|
|
3
|
+
def ok got, label
|
|
4
|
+
if got
|
|
5
|
+
pass label
|
|
6
|
+
else
|
|
7
|
+
failed label
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def use_ok library, label
|
|
12
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def require_ok library, label
|
|
16
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def is got, want, label
|
|
20
|
+
if got.to_s == want.to_s
|
|
21
|
+
pass label
|
|
22
|
+
else
|
|
23
|
+
failed label
|
|
24
|
+
diag "\
|
|
25
|
+
got: '#{got}'
|
|
26
|
+
expected: '#{want}'"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def isnt got, dont, label
|
|
31
|
+
if got.to_s != want.to_s
|
|
32
|
+
pass label
|
|
33
|
+
else
|
|
34
|
+
failed label
|
|
35
|
+
diag "\
|
|
36
|
+
got: '#{got}'
|
|
37
|
+
expected: anything else"
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def like got, regex, label
|
|
42
|
+
if got =~ regex
|
|
43
|
+
pass label
|
|
44
|
+
else
|
|
45
|
+
failed label
|
|
46
|
+
diag "Got: '#{got}'"
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def unlike got, regex, label
|
|
51
|
+
if got !~ regex
|
|
52
|
+
pass label
|
|
53
|
+
else
|
|
54
|
+
failed label
|
|
55
|
+
diag "Got: '#{got}'"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def is_deeply got, want, label
|
|
60
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def cmp_ok got, want, label
|
|
64
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def skip reason
|
|
68
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def todo label
|
|
72
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def todo_skip got, want, label
|
|
76
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def pass label
|
|
80
|
+
$test_more.run_incr
|
|
81
|
+
if ! label.empty?
|
|
82
|
+
puts "ok #{$test_more.run} - #{label}"
|
|
83
|
+
$stderr.flush
|
|
84
|
+
else
|
|
85
|
+
puts "ok #{$test_more.run}"
|
|
86
|
+
end
|
|
87
|
+
$stdout.flush
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def failed label
|
|
91
|
+
$test_more.run_incr
|
|
92
|
+
$test_more.failed_incr
|
|
93
|
+
if ! label.empty?
|
|
94
|
+
puts "not ok #{$test_more.run} - #{label}"
|
|
95
|
+
else
|
|
96
|
+
puts "not ok #{$test_more.run}"
|
|
97
|
+
end
|
|
98
|
+
$stdout.flush
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def eq_array got, label
|
|
102
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def eq_hash got, label
|
|
106
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def eq_set got, label
|
|
110
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def plan cmd, arg
|
|
114
|
+
fail 'Usage: plan tests <number>' unless cmd and arg
|
|
115
|
+
if cmd == 'tests'
|
|
116
|
+
fail 'Plan must be a number' unless arg.to_s =~ /^-?[0-9]+$/
|
|
117
|
+
fail 'Plan must greater then 0' unless arg > 0
|
|
118
|
+
$test_more.plan = arg
|
|
119
|
+
puts "1..#{$test_more.plan}"
|
|
120
|
+
elsif cmd == 'skip_all'
|
|
121
|
+
puts "1..0 # SKIP #{arg}"
|
|
122
|
+
exit 0
|
|
123
|
+
else
|
|
124
|
+
fail 'Usage: plan tests <number>'
|
|
125
|
+
end
|
|
126
|
+
$stdout.flush
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def done_testing count=nil
|
|
130
|
+
count ||= $test_more.run
|
|
131
|
+
puts "1..#{count}"
|
|
132
|
+
$stdout.flush
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def can_ok method, label
|
|
136
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def isa_ok class_, label
|
|
140
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def new_ok class_, label
|
|
144
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def diag msg
|
|
148
|
+
fail unless msg
|
|
149
|
+
msg.gsub! /\n/, "\n# "
|
|
150
|
+
$stderr.puts "# #{msg}"
|
|
151
|
+
$stderr.flush
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def note msg
|
|
155
|
+
fail unless msg
|
|
156
|
+
msg.gsub! /\n/, "\n# "
|
|
157
|
+
puts "# #{msg}"
|
|
158
|
+
$stdout.flush
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def explain msg
|
|
162
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def subtest label, callback
|
|
166
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def BAIL_OUT reason
|
|
170
|
+
fail "Test::More##{__method__.to_s} not yet implemented"
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
class Test::Tap
|
|
175
|
+
attr_accessor :plan
|
|
176
|
+
attr_accessor :run
|
|
177
|
+
attr_accessor :failed
|
|
178
|
+
|
|
179
|
+
def initialize
|
|
180
|
+
@plan = 0
|
|
181
|
+
@run = 0
|
|
182
|
+
@failed = 0
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def run_incr
|
|
186
|
+
@run += 1
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def failed_incr
|
|
190
|
+
@failed += 1
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
$test_more = Test::Tap.new
|
|
197
|
+
|
|
198
|
+
def at_exit
|
|
199
|
+
t = $test_more
|
|
200
|
+
if t.plan == 0
|
|
201
|
+
if t.run > 0
|
|
202
|
+
$stderr.puts "# Tests were run but no plan was declared."
|
|
203
|
+
end
|
|
204
|
+
else
|
|
205
|
+
if t.run == 0
|
|
206
|
+
$stderr.puts "# No tests run!"
|
|
207
|
+
elsif t.run != t.plan
|
|
208
|
+
msg = "# Looks like you planned #{t.plan} tests but ran #{t.run}."
|
|
209
|
+
msg.gsub! /tests/, 'test' if t.plan == 1
|
|
210
|
+
$stderr.puts msg
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
exit_code = 0
|
|
214
|
+
if t.failed > 0
|
|
215
|
+
exit_code = t.failed
|
|
216
|
+
exit_code = 254 if exit_code > 254
|
|
217
|
+
local msg = "# Looks like you failed #{t.failed tests} of #{t.run} run."
|
|
218
|
+
msg.gsub! /tests/, 'test' if t.failed == 1
|
|
219
|
+
$stderr.puts msg
|
|
220
|
+
end
|
|
221
|
+
$stderr.flush
|
|
222
|
+
exit exit_code
|
|
223
|
+
end
|
data/readme.rdoc
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
= test-more - Test::More for Ruby
|
|
2
|
+
|
|
3
|
+
A port of Perl's ubiquitous Test::More TAP testing framework.
|
|
4
|
+
|
|
5
|
+
= Synopsis
|
|
6
|
+
|
|
7
|
+
Write files ending with +.t+ under +test/+, like +test/test1.t+:
|
|
8
|
+
|
|
9
|
+
#!/usr/bin/env ruby
|
|
10
|
+
|
|
11
|
+
$:.unshift "#{Dir.getwd}/lib"
|
|
12
|
+
require 'test/more'
|
|
13
|
+
include Test::More
|
|
14
|
+
|
|
15
|
+
# plan 'tests', 3
|
|
16
|
+
|
|
17
|
+
pass 'Yessss'
|
|
18
|
+
ok true, 'yup'
|
|
19
|
+
is 1, '1', 'one'
|
|
20
|
+
|
|
21
|
+
done_testing 3
|
|
22
|
+
|
|
23
|
+
Then run the tests with the +prove+ utility like this:
|
|
24
|
+
|
|
25
|
+
prove -v test/
|
|
26
|
+
|
|
27
|
+
You can test this gem with:
|
|
28
|
+
|
|
29
|
+
rake test
|
|
30
|
+
|
|
31
|
+
= Copyright
|
|
32
|
+
|
|
33
|
+
Copyright (c) 2013 Ingy döt Net. See LICENSE for further details.
|
data/test/basic.t
ADDED
metadata
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: test-more
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Ingy döt Net
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2013-10-27 00:00:00.000000000 Z
|
|
13
|
+
dependencies: []
|
|
14
|
+
description: ! 'Port of Perl''s Test::More TAP test framework.
|
|
15
|
+
|
|
16
|
+
'
|
|
17
|
+
email: ingy@ingy.net
|
|
18
|
+
executables: []
|
|
19
|
+
extensions: []
|
|
20
|
+
extra_rdoc_files: []
|
|
21
|
+
files:
|
|
22
|
+
- .gemspec
|
|
23
|
+
- LICENSE
|
|
24
|
+
- Rakefile
|
|
25
|
+
- lib/test/more.rb
|
|
26
|
+
- readme.rdoc
|
|
27
|
+
- test/basic.t
|
|
28
|
+
homepage: http://acmeism.org
|
|
29
|
+
licenses:
|
|
30
|
+
- MIT
|
|
31
|
+
post_install_message:
|
|
32
|
+
rdoc_options: []
|
|
33
|
+
require_paths:
|
|
34
|
+
- lib
|
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
36
|
+
none: false
|
|
37
|
+
requirements:
|
|
38
|
+
- - ! '>='
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 1.9.1
|
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
42
|
+
none: false
|
|
43
|
+
requirements:
|
|
44
|
+
- - ! '>='
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
requirements: []
|
|
48
|
+
rubyforge_project:
|
|
49
|
+
rubygems_version: 1.8.23
|
|
50
|
+
signing_key:
|
|
51
|
+
specification_version: 3
|
|
52
|
+
summary: Port of Perl's Test::More TAP test framework
|
|
53
|
+
test_files: []
|