bacon 0.9.0 → 1.0.0
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/RDOX +26 -1
- data/README +32 -1
- data/Rakefile +1 -1
- data/bin/bacon +4 -3
- data/lib/autotest/bacon.rb +36 -0
- data/lib/autotest/discover.rb +9 -0
- data/lib/bacon.rb +35 -13
- data/test/spec_bacon.rb +32 -2
- data/test/spec_should.rb +32 -0
- metadata +44 -34
data/RDOX
CHANGED
@@ -32,4 +32,29 @@ shared/behaves_like
|
|
32
32
|
- gets called where it is included
|
33
33
|
- can access data
|
34
34
|
|
35
|
-
|
35
|
+
describe arguments
|
36
|
+
- should work with stringstring
|
37
|
+
|
38
|
+
|
39
|
+
- should work with symbolsbehaviour
|
40
|
+
|
41
|
+
|
42
|
+
- should work with modulesBacon
|
43
|
+
|
44
|
+
|
45
|
+
- should work with namespaced modulesBacon::Context
|
46
|
+
|
47
|
+
|
48
|
+
- should work with multiple argumentsBacon::Context empty
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
#should shortcut for #it('should')
|
53
|
+
- should be called
|
54
|
+
- should save some characters by typing should
|
55
|
+
- should save characters even on failure
|
56
|
+
- should work nested
|
57
|
+
- should add new specifications
|
58
|
+
- should have been called
|
59
|
+
|
60
|
+
39 specifications (359 requirements), 0 failures, 0 errors
|
data/README
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
"Truth will sooner come out from error than from confusion."
|
4
4
|
---Francis Bacon
|
5
5
|
|
6
|
-
Bacon is a small RSpec clone weighing less than
|
6
|
+
Bacon is a small RSpec clone weighing less than 350 LoC but
|
7
7
|
nevertheless providing all essential features.
|
8
8
|
|
9
9
|
== Whirl-wind tour
|
@@ -196,9 +196,40 @@ demonstrations, quick checks and doctest tests.
|
|
196
196
|
=> false
|
197
197
|
|
198
198
|
|
199
|
+
== Bacon with autotest
|
200
|
+
|
201
|
+
Since version 1.0, there is autotest support. You need to tag your
|
202
|
+
test directories (test/ or spec/) by creating an .bacon file there.
|
203
|
+
Autotest then will find it. bin/bacon needs to be in PATH or RUBYPATH.
|
204
|
+
|
205
|
+
|
206
|
+
== Converting specs
|
207
|
+
|
208
|
+
spec-converter is a simple tool to convert test-unit or dust style
|
209
|
+
tests to test/spec specs.
|
210
|
+
|
211
|
+
It can be found at http://opensource.thinkrelevance.com/wiki/spec_converter.
|
212
|
+
|
213
|
+
|
199
214
|
== Thanks to
|
200
215
|
|
201
216
|
* Michael Fellinger, for fixing Bacon for 1.9 and various improvements.
|
217
|
+
* Gabriele Renzi, for implementing Context#should.
|
218
|
+
* James Tucker, for the autotest support
|
219
|
+
* everyone contributing bug fixes.
|
220
|
+
|
221
|
+
|
222
|
+
== History
|
223
|
+
|
224
|
+
* January 7, 2008: First public release 0.9.
|
225
|
+
|
226
|
+
* July 6th, 2008: Second public release 1.0.
|
227
|
+
* Add Context#should as a shortcut for Context#it('should ' + _).
|
228
|
+
* describe now supports multiple arguments for better organization.
|
229
|
+
* Empty specifications are now erroneous.
|
230
|
+
* after-blocks run in the case of exceptions too.
|
231
|
+
* Autotest support.
|
232
|
+
* Bug fixes.
|
202
233
|
|
203
234
|
|
204
235
|
== Contact
|
data/Rakefile
CHANGED
@@ -92,7 +92,7 @@ else
|
|
92
92
|
s.summary = "a small RSpec clone"
|
93
93
|
|
94
94
|
s.description = <<-EOF
|
95
|
-
Bacon is a small RSpec clone weighing less than
|
95
|
+
Bacon is a small RSpec clone weighing less than 350 LoC but
|
96
96
|
nevertheless providing all essential features.
|
97
97
|
|
98
98
|
http://chneukirchen.org/repos/bacon
|
data/bin/bacon
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
# -*- ruby -*-
|
3
3
|
|
4
4
|
require 'optparse'
|
5
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '../lib/')
|
5
6
|
module Bacon; end
|
6
7
|
|
7
8
|
automatic = false
|
@@ -89,9 +90,9 @@ opts = OptionParser.new("", 24, ' ') { |opts|
|
|
89
90
|
files = ARGV
|
90
91
|
|
91
92
|
if automatic
|
92
|
-
files.concat Dir["test
|
93
|
-
files.concat Dir["test
|
94
|
-
files.concat Dir["spec
|
93
|
+
files.concat Dir["test/**/test_*.rb"]
|
94
|
+
files.concat Dir["test/**/spec_*.rb"]
|
95
|
+
files.concat Dir["spec/**/spec_*.rb"]
|
95
96
|
end
|
96
97
|
|
97
98
|
if files.empty?
|
@@ -0,0 +1,36 @@
|
|
1
|
+
Autotest.add_hook :initialize do |att|
|
2
|
+
att.clear_mappings
|
3
|
+
|
4
|
+
att.add_mapping(%r%^(test|spec)/.*\.rb$%) do |filename, _|
|
5
|
+
filename
|
6
|
+
end
|
7
|
+
|
8
|
+
att.add_mapping(%r%^lib/(.*)\.rb$%) do |filename, m|
|
9
|
+
lib_path = m[1]
|
10
|
+
spec = File.basename(lib_path)
|
11
|
+
path = File.dirname(lib_path)
|
12
|
+
[
|
13
|
+
"test/#{path}/test_#{spec}.rb",
|
14
|
+
"test/#{path}/spec_#{spec}.rb",
|
15
|
+
"spec/#{path}/spec_#{spec}.rb",
|
16
|
+
# TODO : decide if the follow 'rspec style' name should be allowed?
|
17
|
+
# "spec/#{path}/#{spec}_spec.rb"
|
18
|
+
]
|
19
|
+
end
|
20
|
+
|
21
|
+
false
|
22
|
+
end
|
23
|
+
|
24
|
+
class Autotest::Bacon < Autotest
|
25
|
+
def initialize
|
26
|
+
super
|
27
|
+
self.libs = %w[. lib test spec].join(File::PATH_SEPARATOR)
|
28
|
+
end
|
29
|
+
|
30
|
+
def make_test_cmd(files_to_test)
|
31
|
+
args = files_to_test.keys.flatten.join(' ')
|
32
|
+
args = '-a' if args.empty?
|
33
|
+
# TODO : make regex to pass to -n using values
|
34
|
+
"#{ruby} -S bacon -o TestUnit #{args}"
|
35
|
+
end
|
36
|
+
end
|
data/lib/bacon.rb
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
# See COPYING or http://www.opensource.org/licenses/mit-license.php.
|
9
9
|
|
10
10
|
module Bacon
|
11
|
-
VERSION = "0
|
11
|
+
VERSION = "1.0"
|
12
12
|
|
13
13
|
Counter = Hash.new(0)
|
14
14
|
ErrorLog = ""
|
@@ -122,17 +122,42 @@ module Bacon
|
|
122
122
|
|
123
123
|
def it(description, &block)
|
124
124
|
return unless description =~ RestrictName
|
125
|
+
block ||= lambda { should.flunk "not implemented" }
|
125
126
|
Counter[:specifications] += 1
|
126
127
|
run_requirement description, block
|
127
128
|
end
|
129
|
+
|
130
|
+
def should(*args, &block)
|
131
|
+
if Counter[:depth]==0
|
132
|
+
it('should '+args.first,&block)
|
133
|
+
else
|
134
|
+
super(*args,&block)
|
135
|
+
end
|
136
|
+
end
|
128
137
|
|
129
138
|
def run_requirement(description, spec)
|
130
139
|
Bacon.handle_requirement description do
|
131
140
|
begin
|
132
141
|
Counter[:depth] += 1
|
133
|
-
|
134
|
-
|
135
|
-
|
142
|
+
rescued = false
|
143
|
+
begin
|
144
|
+
@before.each { |block| instance_eval(&block) }
|
145
|
+
prev_req = Counter[:requirements]
|
146
|
+
instance_eval(&spec)
|
147
|
+
rescue Object => e
|
148
|
+
rescued = true
|
149
|
+
raise e
|
150
|
+
ensure
|
151
|
+
if Counter[:requirements] == prev_req and not rescued
|
152
|
+
raise Error.new(:missing,
|
153
|
+
"empty specification: #{@name} #{description}")
|
154
|
+
end
|
155
|
+
begin
|
156
|
+
@after.each { |block| instance_eval(&block) }
|
157
|
+
rescue Object => e
|
158
|
+
raise e unless rescued
|
159
|
+
end
|
160
|
+
end
|
136
161
|
rescue Object => e
|
137
162
|
ErrorLog << "#{e.class}: #{e.message}\n"
|
138
163
|
e.backtrace.find_all { |line| line !~ /bin\/bacon|\/bacon\.rb:\d+/ }.
|
@@ -178,7 +203,7 @@ end
|
|
178
203
|
|
179
204
|
class Proc
|
180
205
|
def raise?(*exceptions)
|
181
|
-
exceptions
|
206
|
+
exceptions = [RuntimeError] if exceptions.empty?
|
182
207
|
call
|
183
208
|
|
184
209
|
# Only to work in 1.9.0, rescue with splat doesn't work there right now
|
@@ -217,23 +242,20 @@ end
|
|
217
242
|
|
218
243
|
|
219
244
|
class Object
|
220
|
-
def should(*args, &block)
|
245
|
+
def should(*args, &block) Should.new(self).be(*args, &block) end
|
221
246
|
end
|
222
247
|
|
223
248
|
module Kernel
|
224
249
|
private
|
225
|
-
|
226
|
-
def
|
227
|
-
def shared(name, &block) Bacon::Shared[name] = block end
|
250
|
+
def describe(*args, &block) Bacon::Context.new(args.join(' '), &block) end
|
251
|
+
def shared(name, &block) Bacon::Shared[name] = block end
|
228
252
|
end
|
229
253
|
|
230
254
|
|
231
255
|
class Should
|
232
256
|
# Kills ==, ===, =~, eql?, equal?, frozen?, instance_of?, is_a?,
|
233
257
|
# kind_of?, nil?, respond_to?, tainted?
|
234
|
-
instance_methods.each { |
|
235
|
-
undef_method method if method =~ /\?|^\W+$/
|
236
|
-
}
|
258
|
+
instance_methods.each { |name| undef_method name if name =~ /\?|^\W+$/ }
|
237
259
|
|
238
260
|
def initialize(object)
|
239
261
|
@object = object
|
@@ -271,8 +293,8 @@ class Should
|
|
271
293
|
|
272
294
|
r = yield(@object, *args)
|
273
295
|
if Bacon::Counter[:depth] > 0
|
274
|
-
raise Bacon::Error.new(:failed, description) unless @negated ^ r
|
275
296
|
Bacon::Counter[:requirements] += 1
|
297
|
+
raise Bacon::Error.new(:failed, description) unless @negated ^ r
|
276
298
|
end
|
277
299
|
@negated ^ r ? r : false
|
278
300
|
end
|
data/test/spec_bacon.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
|
2
|
-
require 'bacon'
|
1
|
+
$-w,w = nil, $-w
|
2
|
+
require File.join(File.dirname(__FILE__), '../lib/bacon')
|
3
|
+
$-w = w
|
3
4
|
|
4
5
|
# Hooray for meta-testing.
|
5
6
|
module MetaTests
|
@@ -308,3 +309,32 @@ describe "shared/behaves_like" do
|
|
308
309
|
}
|
309
310
|
behaves_like "another shared context"
|
310
311
|
end
|
312
|
+
|
313
|
+
describe 'describe arguments' do
|
314
|
+
|
315
|
+
def check(ctx,name)
|
316
|
+
ctx.should.be.an.instance_of Bacon::Context
|
317
|
+
ctx.instance_variable_get('@name').should == name
|
318
|
+
end
|
319
|
+
|
320
|
+
it 'should work with string' do
|
321
|
+
check(describe('string') {},'string')
|
322
|
+
end
|
323
|
+
|
324
|
+
it 'should work with symbols' do
|
325
|
+
check(describe(:behaviour) {},'behaviour')
|
326
|
+
end
|
327
|
+
|
328
|
+
it 'should work with modules' do
|
329
|
+
check(describe(Bacon) {},'Bacon')
|
330
|
+
end
|
331
|
+
|
332
|
+
it 'should work with namespaced modules' do
|
333
|
+
check(describe(Bacon::Context) {},'Bacon::Context')
|
334
|
+
end
|
335
|
+
|
336
|
+
it 'should work with multiple arguments' do
|
337
|
+
check(describe(Bacon::Context, :empty) {},'Bacon::Context empty')
|
338
|
+
end
|
339
|
+
|
340
|
+
end
|
data/test/spec_should.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../lib/bacon')
|
2
|
+
|
3
|
+
describe "#should shortcut for #it('should')" do
|
4
|
+
|
5
|
+
should "be called" do
|
6
|
+
@called = true
|
7
|
+
@called.should.be == true
|
8
|
+
end
|
9
|
+
|
10
|
+
should "save some characters by typing should" do
|
11
|
+
lambda { should.satisfy { 1 == 1 } }.should.not.raise
|
12
|
+
end
|
13
|
+
|
14
|
+
should "save characters even on failure" do
|
15
|
+
lambda { should.satisfy { 1 == 2 } }.should.raise Bacon::Error
|
16
|
+
end
|
17
|
+
|
18
|
+
should "work nested" do
|
19
|
+
should.satisfy {1==1}
|
20
|
+
end
|
21
|
+
|
22
|
+
count = Bacon::Counter[:specifications]
|
23
|
+
should "add new specifications" do
|
24
|
+
# XXX this should +=1 but it's +=2
|
25
|
+
(count+1).should == Bacon::Counter[:specifications]
|
26
|
+
end
|
27
|
+
|
28
|
+
should "have been called" do
|
29
|
+
@called.should.be == true
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
metadata
CHANGED
@@ -1,53 +1,63 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: bacon
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2008-01-07 00:00:00 +01:00
|
8
|
-
summary: a small RSpec clone
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: chneukirchen@gmail.com
|
12
|
-
homepage: http://chneukirchen.org/repos/bacon
|
13
|
-
rubyforge_project:
|
14
|
-
description: Bacon is a small RSpec clone weighing less than 300 LoC but nevertheless providing all essential features. http://chneukirchen.org/repos/bacon
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 1.0.0
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Christian Neukirchen
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-07-06 00:00:00 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Bacon is a small RSpec clone weighing less than 350 LoC but nevertheless providing all essential features. http://chneukirchen.org/repos/bacon
|
17
|
+
email: chneukirchen@gmail.com
|
18
|
+
executables:
|
19
|
+
- bacon
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
- RDOX
|
31
25
|
files:
|
32
26
|
- bin/bacon
|
33
27
|
- COPYING
|
28
|
+
- lib/autotest/bacon.rb
|
29
|
+
- lib/autotest/discover.rb
|
34
30
|
- lib/bacon.rb
|
35
31
|
- Rakefile
|
36
32
|
- README
|
37
33
|
- test/spec_bacon.rb
|
34
|
+
- test/spec_should.rb
|
38
35
|
- RDOX
|
39
|
-
|
40
|
-
|
36
|
+
has_rdoc: true
|
37
|
+
homepage: http://chneukirchen.org/repos/bacon
|
38
|
+
post_install_message:
|
41
39
|
rdoc_options: []
|
42
40
|
|
43
|
-
|
44
|
-
-
|
45
|
-
|
46
|
-
|
47
|
-
-
|
48
|
-
|
49
|
-
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: "0"
|
48
|
+
version:
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
version:
|
50
55
|
requirements: []
|
51
56
|
|
52
|
-
|
57
|
+
rubyforge_project:
|
58
|
+
rubygems_version: 1.0.1
|
59
|
+
signing_key:
|
60
|
+
specification_version: 2
|
61
|
+
summary: a small RSpec clone
|
62
|
+
test_files: []
|
53
63
|
|