# Bacon 1.0, a small RSpec clone

**URL:** <https://www.ruby-forum.com/t/bacon-1-0-a-small-rspec-clone/142317>\
**Category:** Ruby\
**Created:** [July 6, 2008, 6:25pm UTC](https://www.ruby-forum.com/t/bacon-1-0-a-small-rspec-clone/142317 "2008-07-06T18:25:50Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [July 6, 2008, 6:25pm UTC](https://www.ruby-forum.com/t/bacon-1-0-a-small-rspec-clone/142317/1 "2008-07-06T18:25:50Z")

</div>

Hello,

Today I’m proud to release Bacon 1.0.

= Bacon – small RSpec clone.

“Truth will sooner come out from error than from confusion.”  
—Francis Bacon

Bacon is a small RSpec clone weighing less than 350 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 [Index of /repos/taptap/](http://chneukirchen.org/repos/taptap/))

== Implemented assertions

- should. and should.be.
- 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 …]

== Where can I get it?

You can download Bacon 1.0 at

```
    http://chneukirchen.org/releases/bacon-1.0.0.tar.gz
            http://rubyforge.org/projects/test-spec

```

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

```

== Thanks to

- Michael F., for fixing Bacon for 1.9 and various improvements.
- Gabriele Renzi, for implementing Context#should.
- James T., for the autotest support
- everyone contributing bug fixes.

== History

- January 7, 2008: First public release 0.9.

- July 6th, 2008: Second public release 1.0.

== Contact

Please mail bugs, suggestions and patches to  
[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid).

Darcs repository (“darcs send” is welcome for patches):  
[http://chneukirchen.org/repos/bacon](http://chneukirchen.org/repos/bacon)

== Copying

Copyright (C) 2007, 2008 Christian N.  
\<[InfoPage of Leah Neukirchen -- leah2](http://purl.org/net/chneukirchen)\>

Bacon is freely distributable under the terms of an MIT-style license.  
See COPYING or [The MIT License – Open Source Initiative](http://www.opensource.org/licenses/mit-license.php).

== Links

Behavior-Driven Development:: [http://behaviour-driven.org/](http://behaviour-driven.org/)  
RSpec:: [http://rspec.rubyforge.org/](http://rspec.rubyforge.org/)  
test/spec:: [http://test-spec.rubyforge.org/](http://test-spec.rubyforge.org/)

Christian N.:: [http://chneukirchen.org/](http://chneukirchen.org/)

Happy hacking and have a nice day,  
Christian N.

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [July 6, 2008, 6:59pm UTC](https://www.ruby-forum.com/t/bacon-1-0-a-small-rspec-clone/142317/2 "2008-07-06T18:59:47Z")

</div>

Christian N. wrote:

> Hello,
> 
> Today I’m proud to release Bacon 1.0.

Sweet. Well done!

–  
James B.

[www.happycamperstudios.com](http://www.happycamperstudios.com) - Wicked Cool Coding  
[www.jamesbritt.com](http://www.jamesbritt.com) - Playing with Better Toys  
[www.ruby-doc.org](http://www.ruby-doc.org) - Ruby Help & Documentation  
[www.rubystuff.com](http://www.rubystuff.com) - The Ruby Store for Ruby Stuff
