= RSpec Changelog

== Version 0.7.3 (In SVN)

Almost normal bug fix/new feature release.

A couple of things you need to change in your rails specs:
# spec_helper.rb is a little different (see http://rspec.rubyforge.org/upgrade.html)
# use controller.should_render before OR after the action (controller.should_have_rendered is deprecated)

* Applied [#6577] messy mock backtrace when frozen to edge rails (patch from Jay Levitt)
* Fixed [#6674] rspec_on_rails fails on @session deprecation warning
* Fixed [#6780] routing() was failing...fix included - works for 1.1.6 and edge (1.2)
* Fixed [#6835] bad message with arbitrary predicate
* Added [#6731] Partial templates rendered
* Fixed [#6713] helper methods not rendered in view tests?
* Fixed [#6707] cannot run controller / helper tests via rails_spec or spec only works with rake
* Applied [#6417] lambda {...}.should_change(receiver, :message) (patch from Wilson Bilkovich)
* Eliminated dependency on ZenTest
* Fixed [#6650] Reserved characters in the TextMate bundle break svn on Win32
* Fixed [#6643] script/generate rspec_controller: invalid symbol generation for 'controller_name' for *modularized* controllers
* The script/rails_spec command has been moved to bin/drbspec in RSpec core (installed by the gem)

== Version 0.7.2

This release introduces a brand new RSpec bundle for TextMate, plus some small bugfixes.

* Packaged RSpec.tmbundle.tgz as part of the distro
* Fixed [#6593] Add moving progress bar to HtmlFormatter using Javascript
* Applied [#6265] should_raise should accept an Exception object
* Fixed [#6616] Can't run Rails specs with RSpec.tmbundle
* Fixed [#6411] Can't run Rails specs with ruby
* Added [#6589] New -l --line option. This is useful for IDE/editor runners/extensions.
* Fixed [#6615] controller.should_render_rjs should support :partial => 'path/to/template'

== Version 0.7.1

Bug fixes and a couple o' new features.

* Fixed [#6575] Parse error in aliasing the partial mock original method (patch by Brian Takita)
* Fixed [#6277] debris left by stubbing (trunk) [submitted by dastels] (fixed by fix to [#6575])
* Fixed [#6575] Parse error in aliasing the partial mock original method
* Fixed [#6555] should_have_tag does not match documentation
* Fixed [#6567] SyntaxError should not stop entire run
* Fixed [#6558] integrated views look for template even when redirected
* Fixed [#6547] response.should_be_redirect broken in 0.7.0
* Applied [#6471] Easy way to spec routes
* Applied [#6587] Rspec on Rails displays "Spec::Rails::ContextFactory" as context name
* Applied [#6514] Document has trivial typos.
* Added [#6560] controller.session should be available before the action
* Added support for should_have_rjs :visual_effect
* Different printing and colours for unmet expectations (red) and other exceptions (magenta)
* Simplified method_missing on mock_methods to make it less invasive on partial mocks. 

== Version 0.7.0

This is the "Grow up and eat your own dog food release". RSpec is now used on itself and
we're no longer using Test::Unit to test it. Although, we are still extending Test::Unit
for the rails plugin (indirectly - through ZenTest)

IMPORTANT NOTE: THIS RELEASE IS NOT 100% BACKWARDS COMPATIBLE TO 0.6.x

There are a few changes that will require that you change your existing specs.

RSpec now handles equality exactly like ruby does:

# actual.should_equal(expected) will pass if actual.equal?(expected) returns true
# actual.should_eql(expected) will pass if actual.eql?(expected) returns true
# actual.should == expected will pass if actual == expected) returns true

At the high level, eql? implies equivalence, while equal? implies object identity. For more
information on how ruby deals w/ equality, you should do this:

ri equal?

or look at this:

http://www.ruby-doc.org/core/classes/Object.html#M001057

Also, we left in should_be as a synonym for should_equal, so the only specs that should break are the
ones using should_equal (which used to use <code>==</code> instead of <code>.equal?</code>).

Lastly, should_be used to handle true and false differently from any other values. We've removed
this special handling, so now actual.should_be true will fail for any value other than true (it
used to pass for any non-nil, non-false value), and actual.should_be false will fail for any
value other than false (it used to pass for nil or false).

Here's what you'll need to do to update your specs:
# search for "should_equal" and replace with "should_eql"
# run specs

If any specs still fail, they are probably related to should_be(true) or should_be(false) using
non-boolean values. Those you'll just have to inspect manually and adjust appropriately (sorry!).

--------------------------------------------------
Specifying multiple return values in mocks now works like this:

mock.should_receive(:message).and_return(1,2,3)

It used to work like this:

mock.should_receive(:message).and_return([1,2,3])

but we decided that was counter intuitive and otherwise lame.

Here's what you'll need to do to update your specs:
# search for "and_return(["
# get rid of the "[" and "]"

--------------------------------------------------
RSpec on Rails now supports the following (thanks to ZenTest upon which it is built):

# Separate specs for models, views, controllers and helpers
# Controller specs are completely decoupled from the views by default (though you can tell them to couple themselves if you prefer)
# View specs are completely decoupled from app-specific controllers

See http://rspec.rubyforge.org/documentation/rails/index.html for more information
--------------------------------------------------
As usual, there are also other new features and bug fixes:

* Added lots of documentation on mocks/stubs and the rails plugin.
* Added support for assigns[key] syntax for controller specs (to align w/ pre-existing syntax for view specs)
* Added support for controller.should_redirect_to
* RSpec on Rails automatically checks whether it's compatible with the installed RSpec
* Applied [#6393] rspec_on_rails uses deprecated '@response' instead of the accessor
* RSpec now has 100% spec coverage(!)
* Added support for stubbing and partial mocking
* Progress (....F..F.) is now coloured. Tweaked patch from KAKUTANI Shintaro.
* Backtrace now excludes the rcov runner (/usr/local/bin/rcov)
* Fixed [#5539] predicates do not work w/ rails
* Added [#6091] support for Regexp matching messages sent to should_raise
* Added [#6333] support for Regexp matching in mock arguments
* Applied [#6283] refactoring of diff support to allow selectable formats and custom differs
* Fixed [#5564] "ruby spec_file.rb" doesn't work the same way as "spec spec_file.rb"
* Fixed [#6056] Multiple output of failing-spec notice
* Fixed [#6233] Colours in specdoc
* Applied [#6207] Allows --diff option to diff target and expected's #inspect output (Patch by Lachie Cox)
* Fixed [#6203] Failure messages are misleading - consider using inspect.
* Added [#6334] subject.should_have_xyz will try to call subject.has_xyz? - use this for hash.should_have_key(key)
* Fixed [#6017] Rake task should ignore empty or non-existent spec-dirs

== Version 0.6.4

In addition to a number of bug fixes and patches, this release begins to formalize the support for
RSpec on Rails.

* Added Christopher Petrilli's TextMate bundle to vendor/textmate/RSpec.tmbundle
* Fixed [#5909], once again supporting multi_word_predicates
* Applied [#5873] - response.should_have_rjs (initial patch from Jake Howerton, based on ARTS by Kevin Clark)
* Added generation of view specs for rspec_on_rails
* Applied [#5815] active_record_subclass.should_have(3).records
* Added support in "rake stats" for view specs (in spec/views)
* Applied [#5801] QuickRef.pdf should say RSpec, not rSpec
* Applied [#5728] rails_spec_runner fails on Windows (Patch from Lindsay Evans).
* Applied [#5708] RSpec Rails plugin rspec_controller generator makes specs that do not parse.
* Cleaned up RSpec on Rails so it doesn't pollute as much during bootstrapping.
* Added support for response.should_have_tag and response.should_not_have_tag (works just like assert_tag in rails)
* Added new -c, --colour, --color option for colourful (red/green) output. Inspired from Pat Eyler's Redgreen gem.
* Added examples for Watir and Selenium under the gem's vendor directory.
* Renamed rails_spec_runner to rails_spec_server (as referred to in the docs)
* Added support for trying a plural for arbitrary predicates.  E.g. Album.should_exist(:name => "Hey Jude") will call Album.exists?(:name => "Hey Jude")
* Added support for should_have to work with methods taking args returning a collection.  E.g. @dave.should_have(3).albums_i_have_that_this_guy_doesnt(@aslak)
* Added [#5570] should_not_receive(:msg).with(:specific, "args")
* Applied [#5065] to support using define_method rather than method_missing to capture expected messages on mocks. Thanks to Eero Saynatkari for the tip that made it work.
* Restructured directories and Modules in order to separate rspec into three distinct Modules: Spec::Expectations, Spec::Runner and Spec::Mocks. This will allow us to more easily integrate other mock frameworks and/or allow test/unit users to take advantage of the expectation API.
* Applied [#5620] support any boolean method and arbitrary comparisons (5.should_be < 6) (Patch from Mike Williams)
 
== Version 0.6.3

This release fixes some minor bugs related to RSpec on Rails
Note that if you upgrade a rails app with this version of the rspec_on_rails plugin
you should remove your lib/tasks/rspec.rake if it exists.

* Backtraces from drb (and other standard ruby libraries) are now stripped from backtraces.
* Applied [#5557] Put rspec.rake into the task directory of the RSpec on Rails plugin (Patch from Daniel Siemssen)
* Applied [#5556] rails_spec_server loads environment.rb twice (Patch from Daniel Siemssen)

== Version 0.6.2
This release fixes a couple of regressions with the rake task that were introduced in the previous version (0.6.1)

* Fixed [#5518] ruby -w: warnings in 0.6.1
* Applied [#5525] fix rake task path to spec tool for gem-installed rspec (patch from Riley Lynch)
* Fixed a teensey regression with the rake task - introduced in 0.6.1. The spec command is now quoted so it works on windows.

== Version 0.6.1
This is the "fix the most annoying bugs release" of RSpec. There are 9 bugfixes this time.
Things that may break backwards compatibility:
1) Spec::Rake::SpecTask no longer has the options attribute. Use ruby_opts, spec_opts and rcov_opts instead.

* Fixed [#4891] RCOV task failing on windows
* Fixed [#4896] Shouldn't modify user's $LOAD_PATH (Tip from Gavin Sinclair)
* Fixed [#5369] ruby -w: warnings in RSpec 0.5.16 (Tip from Suraj Kurapati)
* Applied [#5141] SpecMatcher doesn't escape strings before matching (Patch from Nikolai Weibull).
* Fixed [#5224] Move 'require diff-lcs' from test_helper.rb to diff_test.rb (Tip from Chris Roos)
* Applied [#5449] Rake stats for specs (Patch from Nick Sieger)
* Applied [#5468, #5058] Fix spec runner to correctly run controller specs (Patch from Daniel Siemssen)
* Applied fixes to rails_spec_server to improve its ability to run several times. (Patch from Daniel Siemssen)
* Changed RCov::VerifyTask to fail if the coverage is above the threshold. This is to ensure it gets bumped when coverage improves.

== Version 0.6.0
This release makes an official commitment to underscore_syntax (with no more support for dot.syntax)

* Fixed bug (5292) that caused mock argument matching to fail
* Converted ALL tests to use underscore syntax
* Fixed all remaining problems with underscores revealed by converting all the tests to underscores
* Enhanced sugar to support combinations of methods (i.e. once.and_return) 
* Simplified helper structure taking advantage of dot/underscore combos (i.e. should.be.an_instance_of, which can be expressed as should_be_an_instance_of)
* Added support for at_most in mocks
* Added support for should_not_receive(:msg) (will be removing should_receive(:msg).never some time soon)
* Added support for should_have_exactly(5).items_in_collection

== Version 0.5.16
This release improves Rails support and test2spec translation.

* Fixed underscore problems that occurred when RSpec was used in Rails
* Simplified the Rails support by packaging it as a plugin instead of a generator gem.
* Fixed [#5063] 'rspec_on_rails' require line in spec_helper.rb
* Added pre_commit rake task to reduce risk of regressions. Useful for RSpec developers and patchers.
* Added failure_message to RSpec Rake task
* test2spec now defines converted helper methods outside of the setup block (bug #5057).

== Version 0.5.15
This release removes a prematurely added feature that shouldn't have been added.

* Removed support for differences that was added in 0.5.14. The functionality is not aligned with RSpec's vision.

== Version 0.5.14
This release introduces better ways to extend specs, improves some of the core API and
a experimental support for faster rails specs.

* Added proc methods for specifying differences (increments and decrements). See difference_test.rb
* Methods can now be defined alongside specs. This obsoletes the need for defining methods in setup. (Patch #5002 from Brian Takita)
* Sugar (underscores) now works correctly with should_be_a_kind_of and should_be_an_instance_of
* Added support for include and inherit in contexts. (Patch #4971 from Brian Takita)
* Added rails_spec and rails_spec_server for faster specs on rails (still buggy - help needed)
* Fixed bug that caused should_render to break if given a :symbol (in Rails)
* Added support for comparing exception message in should_raise and should_not_raise

== Version 0.5.13
This release fixes some subtle bugs in the mock API.

* Use fully-qualified class name of Exceptions in failure message. Easier to debug that way.
* Fixed a bug that caused mocks to yield a one-element array (rather than the element) when one yield arg specified.
* Mocks not raise AmbiguousReturnError if an explicit return is used at the same time as an expectation block.
* Blocks passed to yielding mocks can now raise without causing mock verification to fail.

== Version 0.5.12
This release adds diff support for failure messages, a HTML formatter plus some other
minor enhancements.

* Added HTML formatter.
* Added fail_on_error option to spectask.
* Added support for diffing, using the diff-lcs Rubygem (#2648).
* Remove RSpec on Rails files from backtrace (#4694).
* All of RSpec's own tests run successfully after translation with test2spec.
* Added --verbose mode for test2spec - useful for debugging when classes fail to translate.
* Output of various formatters is now flushed - to get more continuous output.

== Version 0.5.11
This release makes test2spec usable with Rails (with some manual steps). 
See http://rspec.rubyforge.org/tools/rails.html for more details

* test2spec now correctly translates bodies of helper methods (non- test_*, setup and teardown ones).
* Added more documentation about how to get test2spec to work with Rails.

== Version 0.5.10
This version features a second rewrite of test2spec - hopefully better than the previous one.

* Improved test2spec's internals. It now transforms the syntax tree before writing out the code.

== Version 0.5.9
This release improves test2spec by allowing more control over the output

* Added --template option to test2spec, which allows for custom output driven by ERB
* Added --quiet option to test2spec
* Removed unnecessary dependency on RubyToC

== Version 0.5.8
This release features a new Test::Unit to RSpec translation tool.
Also note that the RubyGem of the previous release (0.5.7) was corrupt.
We're close to being able to translate all of RSpec's own Test::Unit
tests and have them run successfully!

* Updated test2spec documentation.
* Replaced old test2rspec with a new test2spec, which is based on ParseTree and RubyInline.

== Version 0.5.7
This release changes examples and documentation to recommend underscores rather than dots,
and addresses some bugfixes and changes to the spec commandline.

* spec DIR now works correctly, recursing down and slurping all *.rb files
* All documentation and examples are now using '_' instead of '.'
* Custom external formatters can now be specified via --require and --format.

== Version 0.5.6
This release fixes a bug in the Rails controller generator

* The controller generator did not write correct source code (missing 'do'). Fixed.

== Version 0.5.5
This release adds initial support for Ruby on Rails in the rspec_generator gem.

* [Rails] Reorganised Lachie's original code to be a generator packaged as a gem rather than a plugin.
* [Rails] Imported code from http://lachie.info/svn/projects/rails_plugins/rspec_on_rails (Written by Lachie Cox)
* Remove stack trace lines from TextMate's Ruby bundle
* Better error message from spectask when no spec files are found.

== Version 0.5.4
The "the tutorial is ahead of the gem" release

* Support for running a single spec with --spec
* Exitcode is now 1 unless all specs pass, in which case it's 0.
* -v, --version now both mean the same thing
* For what was verbose output (-v), use --format specdoc or -f s
* --format rdoc always runs in dry-run mode
* Removed --doc and added --format and --dry-run
* Refactored towards more pluggable formatters
* Use webgen's execute tag when generating website (more accurate)
* Fixed incorrect quoting of spec_opts in SpecTask
* Added patch to enable underscored shoulds like 1.should_equal(1) - patch from Rich Kilmer
* Removed most inherited instance method from Mock, making more methods mockable.
* Made the RCovVerify task part of the standard toolset.
* Documented Rake task and how to use it with Rcov
* Implemented <ruby></ruby> tags for website (hooking into ERB, RedCloth and syntax)
* RSpec Rake task now takes spec_opts and out params so it can be used for doc generation
* RCov integration for RSpec Rake task (#4058)
* Group all results instead of printing them several times (#4057)
* Mocks can now yield
* Various improvements to error reporting (including #4191)
* backtrace excludes rspec code - use -b to include it
* split examples into examples (passing) and failing_examples

== Version 0.5.3
The "hurry up, CoR is in two days" release.

* Don't run rcov by default
* Make separate task for running tests with RCov
* Added Rake task to fail build if coverage drops below a certain threshold
* Even more failure output cleanup (simplification)
* Added duck_type constraint for mocks

== Version 0.5.2
This release has minor improvements to the commandline and fixes some gem warnings

* Readded README to avoid RDoc warnings
* Added --version switch to commandline
* More changes to the mock API

== Version 0.5.1
This release is the first release of RSpec with a new website. It will look better soon.

* Added initial documentation for API
* Added website based on webgen
* Modified test task to use rcov
* Deleted unused code (thanks, rcov!)
* Various changes to the mock API,
* Various improvements to failure reporting

== Version 0.5.0
This release introduces a new API and obsolesces previous versions.

* Moved source code to separate subfolders
* Added new DSL runner based on instance_exec
* Added spike for testdox/rdoc generation
* merge Astels' and Chelimsky's work on ShouldHelper
* this would be 0.5.0 if I updated the documentation
* it breaks all of your existing specifications.  We're not sorry.

== Version 0.3.2

The "srbaker is an idiot" release.

* also forgot to update the path to the actual Subversion repository
* this should be it

== Version 0.3.1

This is just 0.3.0, but with the TUTORIAL added to the documentation list.

* forgot to include TUTORIAL in the documentation

== Version 0.3.0

It's been a while since last release, lots of new stuff is available.  For instance:

* improvements to the runners
* addition of should_raise expectation (thanks to Brian Takita)
* some documentation improvements
* RSpec usable as a DSL

== Version 0.2.0

This release provides a tutorial for new users wishing to get started with
RSpec, and many improvements.

* improved reporting in the spec runner output
* update the examples to the new mock api
* added TUTORIAL, a getting started document for new users of RSpec

== Version 0.1.7

This release improves installation and documentation, mock integration and error reporting.

* Comparison errors now print the class name too.
* Mocks now take an optional +options+ parameter to specify behaviour.
* Removed __expects in favour of should_receive
* Added line number reporting in mock error messages for unreceived message expectations.
* Added should_match and should_not_match.
* Added a +mock+ method to Spec::Context which will create mocks that autoverify (no need to call __verify).
* Mocks now require names in the constructor to ensure sensible error messages.
* Made 'spec' executable and updated usage instructions in README accordingly.
* Made more parts of the Spec::Context API private to avoid accidental usage.
* Added more RDoc to Spec::Context.

== Version 0.1.6

More should methods.

* Added should_match and should_not_match.

== Version 0.1.5

Included examples and tests in gem.

== Version 0.1.4

More tests on block based Mock expectations.

== Version 0.1.3

Improved mocking:

* block based Mock expectations.

== Version 0.1.2

This release adds some improvements to the mock API and minor syntax improvements

* Added Mock.should_expect for a more consistent DSL.
* Added MockExpectation.and_returns for a better DSL.
* Made Mock behave as a null object after a call to Mock.ignore_missing
* Internal syntax improvements.
* Improved exception trace by adding exception class name to error message.
* Renamed some tests for better consistency.

== Version 0.1.1

This release adds some shoulds and improves error reporting

* Added should_be_same_as and should_not_be_same_as.
* Improved error reporting for comparison expectations.

== Version 0.1.0

This is the first preview release of RSpec, a Behaviour-Driven Development library for Ruby 

* Added Rake script with tasks for gems, rdoc etc.
* Added an XForge task to make release go easier.
