Hello,
Today I'm proud to release Bacon 0.9.
= Bacon -- a small RSpec clone.
"Truth will sooner come out from error than from confusion."
---Francis Bacon
Bacon is a small RSpec clone weighing less than 300 LoC but
nevertheless providing all essential features.
== Whirl-wind tour
require 'bacon'
describe 'A new array' do
before do
@ary = Array.new
end
it 'should be empty' do
@ary.should.be.empty
@ary.should.not.include 1
end
it 'should have zero size' do
@ary.size.should.equal 0
@ary.size.should.be.close 0.1, 0.5
end
it 'should raise on trying fetch any index' do
lambda { @ary.fetch 0 }.
should.raise(IndexError).
message.should.match(/out of array/)
# Alternatively:
should.raise(IndexError) { @ary.fetch 0 }
end
it 'should have an object identity' do
@ary.should.not.be.same_as Array.new
end
# Custom assertions are trivial to do, they are lambdas returning
a
# boolean vale:
palindrome = lambda { |obj| obj == obj.reverse }
it 'should be a palindrome' do
@ary.should.be.a palindrome
end
it 'should have super powers' do
should.flunk "no super powers found"
end
end
Now run it:
$ bacon whirlwind.rb
A new array
- should be empty
- should have zero size
- should raise on trying fetch any index
- should have an object identity
- should be a palindrome
- should have super powers [FAILED]
Bacon::Error: no super powers found
./whirlwind.rb:39: A new array - should have super powers
./whirlwind.rb:38
./whirlwind.rb:3
6 specifications (9 requirements), 1 failures, 0 errors
If you want shorter output, use the Test::Unit format:
$ bacon -q whirlwind.rb
.....F
Bacon::Error: no super powers found
./whirlwind.rb:39: A new array - should have super powers
./whirlwind.rb:38
./whirlwind.rb:3
6 tests, 9 assertions, 1 failures, 0 errors
It also supports TAP:
$ bacon -p whirlwind.rb
ok 1 - should be empty
ok 2 - should have zero size
ok 3 - should raise on trying fetch any index
ok 4 - should have an object identity
ok 5 - should be a palindrome
not ok 6 - should have super powers: FAILED
# Bacon::Error: no super powers found
# ./whirlwind.rb:39: A new array - should have super powers
# ./whirlwind.rb:38
# ./whirlwind.rb:3
1..6
# 6 tests, 9 assertions, 1 failures, 0 errors
$ bacon -p whirlwind.rb | taptap -q
Tests took 0.00 seconds.
FAILED tests 6
6) should have super powers: FAILED
Failed 1/6 tests, 83.33% okay.
(taptap is available from http://chneukirchen.org/repos/taptap/)
== Implemented assertions
* should.<predicate> and should.be.<predicate>
* should.equal
* should.match
* should.be.identical_to / should.be.same_as
* should.raise(*exceptions) { }
* should.change { }
* should.throw(symbol) { }
* should.satisfy { |object| }
== Added core predicates
* Object#true?
* Object#false?
* Proc#change?
* Proc#raise?
* Proc#throw?
* Numeric#close?
[... for more documentation see README ...]
== Object#should
You can use Object#should outside of contexts, where the result of
assertion will be returned as a boolean. This is nice for
demonstrations, quick checks and doctest tests.
>> require 'bacon'
>> (1 + 1).should.equal 2
=> true
>> (6*9).should.equal 42
=> false
== Where can I get it?
You can download Bacon 0.2 at
http://chneukirchen.org/releases/bacon-0.9.0.tar.gz
http://rubyforge.org/projects/testspec
Alternatively, you can checkout from the development repository with:
darcs get http://chneukirchen.org/repos/bacon
(Patches using "darcs send" are most welcome.)
== Installing with RubyGems
A Gem of Bacon is available. You can install it with:
gem install bacon
I also provide a local mirror of the gems (and development snapshots)
at my site:
gem install bacon --source http://chneukirchen.org/releases/gems
== Contact
Please mail bugs, suggestions and patches to
<mailto:chneukirchen@gmail.com>.
Darcs repository ("darcs send" is welcome for patches):
http://chneukirchen.org/repos/bacon
== Copying
Copyright (C) 2007, 2008 Christian Neukirchen
<purl.org/net/chneukirchen>
Bacon is freely distributable under the terms of an MIT-style license.
See COPYING or http://www.opensource.org/licenses/mit-license.php.
== Links
Behavior-Driven Development:: <http://behaviour-driven.org/>
RSpec:: <http://rspec.rubyforge.org/>
test/spec:: <http://test-spec.rubyforge.org/>
Christian Neukirchen:: <http://chneukirchen.org/>
Happy hacking and have a nice day,
Christian Neukirchen
on 07.01.2008 20:50
on 07.01.2008 20:59
Hi Chris, On Jan 8, 2008 1:20 AM, Christian Neukirchen <chneukirchen@gmail.com> wrote: > nevertheless providing all essential features. > it 'should be empty' do > lambda { @ary.fetch 0 }. > > end > - should have super powers [FAILED] > $ bacon -q whirlwind.rb > $ bacon -p whirlwind.rb > 1..6 > > > > => false > darcs get http://chneukirchen.org/repos/bacon > at my site: > > gem install bacon --source http://chneukirchen.org/releases/gems > Is it compatible with Test::Unit like Test/Spec ? -- Let them talk of their oriental summer climes of everlasting conservatories; give me the privilege of making my own summer with my own coals. http://gnufied.org
on 07.01.2008 21:24
On Jan 7, 2008 2:50 PM, Christian Neukirchen <chneukirchen@gmail.com> wrote: > nevertheless providing all essential features. > it 'should be empty' do > lambda { @ary.fetch 0 }. > > end > - should have super powers [FAILED] > $ bacon -q whirlwind.rb > $ bacon -p whirlwind.rb > 1..6 > > > > => false > darcs get http://chneukirchen.org/repos/bacon > at my site: > > RSpec:: <http://rspec.rubyforge.org/> > test/spec:: <http://test-spec.rubyforge.org/> > > Christian Neukirchen:: <http://chneukirchen.org/> > Is this a replacement for test/spec, or is test/spec bacon's big brother? - rob
on 07.01.2008 21:50
On 2008-01-07, Rob Sanheim <rsanheim@gmail.com> wrote: >> Today I'm proud to release Bacon 0.9. >> >> = Bacon -- a small RSpec clone. >> >> Bacon is a small RSpec clone weighing less than 300 LoC but >> nevertheless providing all essential features. > > Is this a replacement for test/spec, or is test/spec bacon's big brother? It is not a replacement for test/spec, but a reimplementation of the ideas behind it in a compact way. It does not use Test::Unit. It is not completely compatible to test/spec or RSpec, but suites are reasonably easy to port.
on 07.01.2008 22:01
It's unfortunate you didn't name contexts strips and examples bits. You really could've played up this bacon thing. :) I like the way this looks. It plays nice with some specs I was working on. --Jeremy On Jan 7, 2008 3:50 PM, Christian Neukirchen <chneukirchen@gmail.com> wrote: > It is not a replacement for test/spec, but a reimplementation of the > ideas behind it in a compact way. > > It does not use Test::Unit. > > It is not completely compatible to test/spec or RSpec, but suites are > reasonably easy to port. > > > - rob > > -- http://www.jeremymcanally.com/ My books: Ruby in Practice http://www.manning.com/mcanally/ My free Ruby e-book http://www.humblelittlerubybook.com/ My blogs: http://www.mrneighborly.com/ http://www.rubyinpractice.com/
on 07.01.2008 22:16
On 2008-01-07, Jeremy McAnally <jeremymcanally@gmail.com> wrote: > It's unfortunate you didn't name contexts strips and examples bits. > You really could've played up this bacon thing. :) :D Lovely idea. > I like the way this looks. It plays nice with some specs I was working on. Thank you.
on 07.01.2008 22:46
Christian Neukirchen wrote: > On 2008-01-07, Jeremy McAnally <jeremymcanally@gmail.com> wrote: >> It's unfortunate you didn't name contexts strips and examples bits. >> You really could've played up this bacon thing. :) > > :D > Lovely idea. mmmm, chunky!
on 07.01.2008 22:51
Thanks for finally gemming it up! I just started writing the specs for Halcyon and was really distraught over using RSpec or Bacon. Very cool and very good timing. Also, again, I think this is a very cool name considering its inspiration. Cheers, Matt
on 07.01.2008 23:16
On 2008-01-07, Matt Todd <chiology@gmail.com> wrote: > Thanks for finally gemming it up! I just started writing the specs for > Halcyon and was really distraught over using RSpec or Bacon. Very cool > and very good timing. > > Also, again, I think this is a very cool name considering its inspiration. Okay, time to admit that quote was not *really* the inspiration... :-) Bacon in German is Speck, which is written and sounds like spec.
on 07.01.2008 23:23
On Jan 7, 2008 3:50 PM, Christian Neukirchen <chneukirchen@gmail.com> wrote: > It is not a replacement for test/spec, but a reimplementation of the > ideas behind it in a compact way. > > It does not use Test::Unit. > > It is not completely compatible to test/spec or RSpec, but suites are > reasonably easy to port. > > > - rob Neat...I checked out the code and it looks very nice and slim. My only concern is converting our many thousands of lines of specs written in test/spec if bacon is where all the goodness is going to be happening =). - Rob http://robsanheim.com http://thinkrelevance.com
on 08.01.2008 00:25
> Okay, time to admit that quote was not *really* the inspiration... :-) > > Bacon in German is Speck, which is written and sounds like spec. That makes it even better! :D
on 08.01.2008 11:37
On 2008-01-07, Rob Sanheim <rsanheim@gmail.com> wrote: > Neat...I checked out the code and it looks very nice and slim. > > My only concern is converting our many thousands of lines of specs > written in test/spec if bacon is where all the goodness is going to be > happening =). test/spec has a bigger userbase already, and I try to keep bacon rather small. (Still, it has everything you need, really.) IMO, a stable spec API is more useful than a featureful, but always moving one. I'll make test/spec bacon compatible in the long term, not the other way round. (That is, bacon-the-API will be really stable, so you can run your specs with test/spec, bacon or taptap (to be released).)
on 08.01.2008 11:56
On Jan 8, 2008 4:50 AM, Christian Neukirchen <chneukirchen@gmail.com>
wrote:
[snip]
> Happy hacking and have a nice day,
Thanks a lot, bacon rocks!
^ manveru