Forum: Ruby Bacon 1.2, a small RSpec clone

9e290885398ed577d8b534a25135e816?d=identicon&s=25 Christian Neukirchen (Guest)
on 2012-12-21 12:25
(Received via mailing list)
Hello,

Today, after over 4 years, I'm proud to release Bacon 1.2.


* December 21th, 2012: Fourth public release 1.2.0.
  * #satisfy will not pass arguments anymore to the block, use lexical
scope.
  * Fixed Context#change?.
  * Add support for finding specs named like spec/**/*_spec.rb.
  * Contexts nest properly.
  * Timer in TestUnitOutput.
  * Nested output for SpecDoxOutput.
  * Small cleanups and more tests.


= 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 http://chneukirchen.org/repos/taptap/)

As of Bacon 1.1, it also supports Knock:

    $ bacon -k whirlwind.rb
    ok - should be empty
    ok - should have zero size
    ok - should raise on trying fetch any index
    ok - should have an object identity
    ok - should be a palindrome
    not ok - 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

    $ bacon -k whirlwind.rb | kn-sum
    6 tests, 1 failed (83.3333% succeeded)

(knock is available from http://github.com/chneukirchen/knock/)

== 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 ...]

== Where can I get it?

You can download Bacon 1.2 at

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

Alternatively, you can checkout from the development repository at:

                 http://github.com/chneukirchen/bacon

(Patches rebased on HEAD 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 Fellinger, for fixing Bacon for 1.9 and various improvements.
* Gabriele Renzi, for implementing Context#should.
* James Tucker, for the autotest support.
* Yossef Mendelssohn, for nested contexts.
* Gabriel Horner, for many patches.
* everyone contributing bug fixes.

== History

* January 7, 2008: First public release 0.9.

* July 6th, 2008: Second public release 1.0.
  * Add Context#should as a shortcut for Context#it('should ' + _).
  * describe now supports multiple arguments for better organization.
  * Empty specifications are now erroneous.
  * after-blocks run in the case of exceptions too.
  * Autotest support.
  * Bug fixes.

* November 30th, 2008: Third public release 1.1.
  * Nested before/after.
  * Add -Q/--no-backtraces to not show details about failed
specifications.
  * Add Knock output.
  * Bug fixes.

* December 21th, 2012: Fourth public release 1.2.0.
  * #satisfy will not pass arguments anymore to the block, use lexical
scope.
  * Fixed Context#change?.
  * Add support for finding specs named like spec/**/*_spec.rb.
  * Contexts nest properly.
  * Timer in TestUnitOutput.
  * Nested output for SpecDoxOutput.
  * Small cleanups and more tests.

== Contact

Please mail bugs, suggestions and patches to
<mailto:chneukirchen@gmail.com>.

Git repository (patches rebased on HEAD are most welcome):
http://github.com/chneukirchen/bacon
git://github.com/chneukirchen/bacon.git

== Copying

Copyright (C) 2007, 2008, 2012 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
5a837592409354297424994e8d62f722?d=identicon&s=25 Ryan Davis (Guest)
on 2012-12-21 22:16
(Received via mailing list)
On Dec 21, 2012, at 03:24 , Christian Neukirchen
<chris+ruby-talk@vuxu.org> wrote:

> Hello,
>
> Today, after over 4 years, I'm proud to release Bacon 1.2.

Congratulations!

> * December 21th, 2012: Fourth public release 1.2.0.
>  * #satisfy will not pass arguments anymore to the block, use lexical scope.
>  * Fixed Context#change?.
>  * Add support for finding specs named like spec/**/*_spec.rb.
>  * Contexts nest properly.
>  * Timer in TestUnitOutput.
>  * Nested output for SpecDoxOutput.
>  * Small cleanups and more tests.


This looks fantastic.

Damnit... and I was just about to announce minitest/bacon... I've almost
passed all your tests. :P
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.