Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Comparing changes

Choose two branches to see what's changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
base fork: rspec/rspec-expectations
head fork: rspec/rspec-expectations
Checking mergeability… Don't worry, you can still create the pull request.
Commits on Mar 27, 2012
@myronmarston myronmarston Started working on yield matchers. 99456da
Commits on Mar 29, 2012
@myronmarston myronmarston Rename helper methods for yield matcher specs. eb9d327
Commits on Mar 30, 2012
@myronmarston myronmarston Match yielded args with == or ===.
Previously, this expectation failed:

  expect { |b| _yield_with_args(String, Fixnum, &b) }.to yield_with_args(String, Fixnum)

...because Class=== returns false when given itself.
@myronmarston myronmarston Provide better message for negative yield_with_args matcher failure. f3923dd
@myronmarston myronmarston Group the yield examples by matcher. 1b106c4
Commits on Mar 31, 2012
@myronmarston myronmarston Add yield_successive_args matcher. 23f5acb
@myronmarston myronmarston Fix typo: "yields", not "yeilds". 1897250
@myronmarston myronmarston Remove diffability from yield matchers for now.
I'm not sure it makes sense given that they don't match strictly but instead match using === or ==.
@myronmarston myronmarston Fix yield matchers to handle instance_eval.
It's debatable if instance_eval'ing a block can be considered yielding, but it's important that we use local variables in the lambdas rather than instance variables, because we don't want to modify the state of the receiver of #instance_eval.
@myronmarston myronmarston Raise an error if a yield matcher is used w/ an expect block that acc…
…epts no args.

The expect block must accept an arg, and pass it on to the method-under-test as a block, in order for these yield matchers to work properly.  Since this is atypical for an expect block, this error will help guide people when they use these matchers incorrectly.
@myronmarston myronmarston Add description to all yield matchers. e969284
Commits on Apr 01, 2012
@myronmarston myronmarston Add API docs for yield matchers.
Cukes are still to come.
Commits on Apr 02, 2012
@dchelimsky dchelimsky Change the be_within matcher to be inclusive of the delta.
- Fixes #131.
- This changes the way the matcher behaves, which is something we would
  generally avoid in anything but a major release, however we believe
  that this is the correct behavior and that this change is very unlikely
  to impact anybody negatively. Specifically:

  1. 17.4.should be_within(0.5).of(17) # used to pass and continues to pass
  2. 17.5.should be_within(0.5).of(17) # used to fail due to lack of inclusivity, but passes after this change
  3. 17.6.should be_within(0.5).of(17) # used to fail and continues to fail
  4. 17.4.should_not be_within(0.5).of(17) # used to fail and continues to fail
  5. 17.5.should_not be_within(0.5).of(17) # used to pass due to lack of inclusivity, but fails after this change
  6. 17.6.should_not be_within(0.5).of(17) # used to fail and continues to fail

  Scenario 2 used to fail, so it's unlikely to be present.
  Scenario 5 will result in new failures, but we believe that it is very unlikely to be used.
Commits on Apr 03, 2012
@dchelimsky dchelimsky bump to 2.9.1 f31ae96
@dchelimsky dchelimsky fix changelog 2cfed80
Commits on Apr 04, 2012
@dchelimsky dchelimsky need relish in the Gemfile to push relish docs 6fe2bca
@dchelimsky dchelimsky add doc files to .yardopts
[ci skip]
Commits on Apr 08, 2012
@jeremywadsack jeremywadsack Added start_with and end_with matchers for String 77a9ecc
@jeremywadsack jeremywadsack Added start_with and end_with support for Array 9b9946c
@jeremywadsack jeremywadsack Handle case when expected can't be indexed ab1d055
@jeremywadsack jeremywadsack Rdoc for new matchers d5fdf35
@jeremywadsack jeremywadsack Fix up whitespace 5f367d9
Commits on Apr 09, 2012
@dchelimsky dchelimsky Merge pull request #135 from jeremywadsack/start_with_end_with
Add matchers start_with end_with
Commits on Apr 10, 2012
@myronmarston myronmarston Add cukes for yield matchers. 24335ee
@dchelimsky dchelimsky Change start_with and end_with matchers to take varargs.
- Clean up rdoc, features, and specs.
- Refactor the two matchers a bit.
- Add changelog.
- #135
@dchelimsky dchelimsky add start_with and end_with matchers to README [ci skip] 35d98aa
@myronmarston myronmarston Raise an error if expect block arg isn't passed on as a block.
Otherwise, the matcher is unable to detect anything about if the method-under-test yields, and the user may get false positives.
@myronmarston myronmarston Refactor yield matchers a bit.
This allows the YieldProbe to take care of defining the probe block, and simplifies the #matches? methods.
@myronmarston myronmarston Raise an error if a single-yield matcher is used with a multi-yield m…

Only the yield_successive_args matcher is designed for the multi-yield case.
Commits on Apr 11, 2012
@myronmarston myronmarston Update the yield cukes with a few more/better examples. d020cfe
Commits on Apr 17, 2012
@jeremywadsack jeremywadsack Added more helpful message when actual has #[] but does not support #…

Pull request #135
@dchelimsky dchelimsky align usage of expect/to 3591cd2
@dchelimsky dchelimsky can't use 1.9 hash syntax in specs (still support 1.8) - #135 5bdf4b8
Commits on Apr 19, 2012
@myronmarston myronmarston Merge pull request #129 from rspec/yield_matchers
Yield matchers
@myronmarston myronmarston Update changelog.
[ci skip]
Commits on Apr 20, 2012
@dchelimsky dchelimsky match_unless_raises accepts multiple args
- in support of fix for rspec/rspec-rails#530
@jfirebaugh jfirebaugh Do not require exception messages to exactly match MRI
Different Ruby implementations deserve latitude in the error
messages, e.g. to provide more precise diagnostics than MRI.

In particular, do not rely on the fact that RuntimeError generated
by MRI when calling bare `raise` without a current exception has
an empty message. That is not the case on Rubinius; it is arguably
a bug in MRI.

Following this commit, all test pass on Rubinius head.
Commits on Apr 21, 2012
@dchelimsky dchelimsky Merge pull request #140 from jfirebaugh/rubinius
Do not require exception messages to exactly match MRI
@dchelimsky dchelimsky Fix potential false-positive so that it will fail correctly if there …
…is a regression.

- See #140.
@dchelimsky dchelimsky Changlog for #140 780d4c2
@dchelimsky dchelimsky eliminate 'not initialized' warning on @matcher_execution_context 7c76204
@dchelimsky dchelimsky ci: run against rbx 1fdaedb
@dchelimsky dchelimsky Fix Changelog formatting [ci skip] 20c7a3c
@dchelimsky dchelimsky Changelog [ci skip] f93ce4c
Commits on Apr 22, 2012
@dchelimsky dchelimsky shorten file extension f315020
@dchelimsky dchelimsky align config files across rspec projects fe40efd
@dchelimsky dchelimsky silence more warnings 5d8a233
@dchelimsky dchelimsky dev: align Gemfiles across rspec projects 15d96b8
Commits on May 01, 2012
@dchelimsky dchelimsky update yard to 0.8 97b5e0c
Commits on May 04, 2012
@dchelimsky dchelimsky update changelog for 2.10 release 77e1a09
@dchelimsky dchelimsky bump to 2.10.0 2e348ff
Commits on May 09, 2012
@myronmarston myronmarston Add support for `expect(value)` syntax.
Note: there's more to do here (documentation, etc); this is just a starting point for discussion and comments.
@myronmarston myronmarston Don't expose #target as a public API.
Also, fix the spelling of the class while I'm at it.
@myronmarston myronmarston Add configuration API for choosing an expectation syntax.
:should, :expect or both can be chosen.
@myronmarston myronmarston Don't redefine should or expect when re-configured. ad2a757
Commits on May 10, 2012
@myronmarston myronmarston Refactor enabling/disabling of expectation syntaxes.
* Fix build on JRuby. Our sandboxing via forking didn't work
  on JRuby since fork isn't available. On JRuby we just
  re-enable all syntaxes at the end of each sandboxed example.
* Testing this revealed that the way I was restoring a disabled
  syntax didn't always work. Based on the random order, sometimes
  spec/rspec/matchers/be_spec.rb:427 would fail with
  "TypeError: bind argument must be an instance of Kernel".
* Refactored main logic into new syntax module, that can add
  the syntaxes to any class or module. Kernel/RSpec::Matcher
  defaults are provided for convenience. This also fixes the
  bind failure, by redefining the methods anew rather than
  re-binding the old ones.
@myronmarston myronmarston Prevent operator matchers from new expect syntax. 6de81c7
Commits on May 11, 2012
@myronmarston myronmarston We can't count on hash ordering. use an array of tuples instead.

Closes #144.
@myronmarston myronmarston Cleanup code a bit.
- Remove bang from @justinko rightly pointed out, there's no corresponding bangless method so it didn't really follow convention here.
- Use an early guarded return.
Commits on May 12, 2012
@myronmarston myronmarston Add yard docs for new modules.
[ci skip]
@myronmarston myronmarston Add match_array matcher method for the old =~ array matcher.
This is needed because we've decided not to support operator matchers off of `expect(value).to`, and `match_array` is the best name we've come up with for it.
Commits on May 13, 2012
@dchelimsky dchelimsky Remove obsolete spec
- it wasn't running because it was dynamically bound to classes that
  were no longer being found.
- it was specifying an age-old protocol that isn't used by
  rspec-expectations, so it would never be used.
Commits on May 17, 2012
@zhangsu zhangsu Fix confusing error message in `be_within`
This is a patch for the following issue:


It is possible to have duck typing for numerical operations, but the minus
sign is often used for other operations as well such as the set
difference that Array#- performs. In that case, even if it does not fail
on the :- method, it will probably fail on the subsequent :abs and :<=
@justinko justinko Merge pull request #145 from zhangsu/master
Fix confusing error message in `be_within`
@justinko justinko Clearer error message for previous commit. d55d9a8
@justinko justinko Make "validation" methods for the be_within matcher class private. 1cac6bc
@justinko justinko changelog 605a520
Commits on May 21, 2012
@dchelimsky dchelimsky dev: update Guardfile to run everything when matchers change c450e3d
@dchelimsky dchelimsky refactor BeWithin to be more self-contained.
More explicit and consistent in dealing with instance variables rather
than relying on knowledge of how BaseMatcher handles them.
@dchelimsky dchelimsky minor refactoring: use implicit return 123169e
Commits on May 22, 2012
@dchelimsky dchelimsky dev: --backtrace 4c4c8dc
@dchelimsky dchelimsky refactor built-in matchers
Removed default initialize and matches? from the BaseMatcher and added
explicit initialization where needed.
@dchelimsky dchelimsky Fix some cukes broken by the previous matcher refactoring (messages c…
@myronmarston myronmarston Merge pull request #119 from rspec/expect_syntax
Add support for `expect(value)` syntax.
@myronmarston myronmarston Update changelog. f9574db
@myronmarston myronmarston More changelog updates. 9793323
Commits on May 25, 2012
@brynary brynary Add Code Climate badge 99fb8ce
@dchelimsky dchelimsky Merge pull request #146 from brynary/codeclimate-badge
Add Code Climate badge
Commits on Jun 05, 2012
@myronmarston myronmarston Add more docs on syntax configuration.
Closes #149.
Commits on Jun 07, 2012
@justinko justinko Use `eq` instead of `==` for built-in matcher failure message. 43526ec
Commits on Jun 14, 2012
@dchelimsky dchelimsky put the rdoc for should, should_not, and expect where yard can pick i…
…t up
Commits on Jun 15, 2012
@myronmarston myronmarston Add `should` and `should_not` to BasicObject on 1.9.
For #114.
@myronmarston myronmarston Add #add_should_and_should_not to configuration API.
This allows users to manually add these methods to proxy objects that do not have them.

Closes #114.
@myronmarston myronmarston Update changelog.
[ci skip]
Commits on Jun 20, 2012
@dchelimsky dchelimsky refactor matchers to use BaseMatcher's initialize and matches? methods 4024344
Commits on Jun 23, 2012
@dchelimsky dchelimsky Change BaseMatcher to a class.
It was a module, but it was really acting as a base class (it was even
in the name).

Very slightly more efficient (see benchmarks/include_v_superclass.rb)
Commits on Jun 25, 2012
@dchelimsky dchelimsky ensure the eq matcher sends :== to actual (not expected) a3e2839
Commits on Jul 07, 2012
@dchelimsky dchelimsky add travis badge to README adaaa9b
@dchelimsky dchelimsky space, the final frontier b394f47
@dchelimsky dchelimsky bump to 2.11.0 45161a7
@dchelimsky dchelimsky improve automation for publishing to 705ddc5
Commits on Jul 08, 2012
@dchelimsky dchelimsky Constrain `actual` in `be_within` matcher to values that respond to `-`
instead of requiring a specific type.

- `Time`, for example, is a legit alternative.
- Fixes issue introduced by #145
@dchelimsky dchelimsky changelog for 2.11.1 release c6da0f6
@dchelimsky dchelimsky loosen time constraint for be_within example 79febad
Commits on Jul 10, 2012
@dchelimsky dchelimsky enhance rdoc for expect syntax ebd8a4c
@dchelimsky dchelimsky tweak README (expect syntax) d5417f9
Commits on Jul 13, 2012
@myronmarston myronmarston Remove the hacky search for should_not in backtrace.
It wasn't working for the `expect { .. }.to` syntax, anyway.
@myronmarston myronmarston Loosen error message constraints for raise_error matcher specs.
This is in prep for #59--once I had some backtrace info, all of these would fail since they are doing exact string matches.
Commits on Jul 17, 2012
@alexcoplan alexcoplan add support for coloured diffs dbe5aa3
@alexcoplan alexcoplan fixed coloring, added tests for colored diff 54b9e98
@alexcoplan alexcoplan tests now stub color config, removed setter in config 505db9f
@alexcoplan alexcoplan no magic nums, yellow->green for insertions 477fac1
@alexcoplan alexcoplan fixed chr grabbing for older rb implementations 83cdba4
Commits on Jul 18, 2012
@myronmarston myronmarston Merge pull request #157 from alexcoplan/color_diffs
Colored Diffs
@myronmarston myronmarston Update changelog. 067f13d
Commits on Jul 19, 2012
@dchelimsky dchelimsky move post-2.11.1 enhancements in changelog 024002c
Commits on Jul 25, 2012
@ggilder ggilder #159: Revise should(_not) to work with MacRuby 9c9619b
@myronmarston myronmarston Merge pull request #160 from ggilder/master
#159: Revise should(_not) to work with MacRuby
@myronmarston myronmarston Add change log entry for #160. 147f710
@alindeman alindeman Be defensive about resolving `Object`
It'd be pretty crazy for there to be an `RSpec::Object` or
`RSpec::Expectations::Object,` but 1) Ruby's constant resolution rules
have changed and I don't always remember them and 2) We were originally
defensive about it.
Commits on Jul 26, 2012
@myronmarston myronmarston Cherry-pick 2.11.2 release stuff from 2-11-maint branch. c897a47
Commits on Jul 27, 2012
@myronmarston myronmarston Ensure #== is defined on build in matchers so that they can be composed.
For example:

expect {
}.to change{user.last_emailed_at}.from(nil).to be_within(1.second).of(

Closes #161.
Commits on Aug 25, 2012
@alexcoplan alexcoplan use same color config method as core 94fce05
@alexcoplan alexcoplan improve diff coloring code 248004e
@alexcoplan alexcoplan revert to using static color methods 7cdd88b
@myronmarston myronmarston Merge pull request #169 from alexcoplan/better_diff_coloring
Better diff coloring
Commits on Aug 26, 2012
@myronmarston myronmarston Run all specs together and in isolation for build.
We want them to be able to pass when run in isolation w/o bundler being loaded.
@myronmarston myronmarston Fix ruby warnings.
/Users/myron/code/rspec-dev/repos/rspec-expectations/lib/rspec/matchers/dsl.rb:8: warning: method redefined; discarding old ignore
/Users/myron/code/rspec-dev/repos/rspec-expectations/lib/rspec/matchers/dsl.rb:8: warning: previous definition of ignore was here
@myronmarston myronmarston Improve how we find the path to the rspec exe.
On travis, it found `/home/travis/builds/rspec/exe/rspec`,
and that didn't exist. I'm not sure why it didn't find the
one in rspec-core, but I think this'll fix it.
@myronmarston myronmarston Revert recent build change -- it's not working on Travis CI.
I need to head to bed in a bit and I don't want to leave the build
broken. I'll put this in a branch and play with it there to
get it to work.

- Revert "Improve how we find the path to the rspec exe."
  This reverts commit cafef45.
- Revert "Run all specs together and in isolation for build."
  This reverts commit b0d5007.
Commits on Sep 05, 2012
@myronmarston myronmarston Fix and deprecate `expect { }.should` syntax.
Fixes #170.
@myronmarston myronmarston Add missing changelog entry I forgot to add.
This was fixed in d427bac.
@myronmarston myronmarston Add 2.11.3 release info. cf6cf5d
Commits on Sep 06, 2012
@myronmarston myronmarston Fix full changelog URL. d5e6e36
Commits on Sep 08, 2012
@dchelimsky dchelimsky run should_clean gem (it "does ... v it "should ...) 3c0e7ea
Commits on Sep 10, 2012
@myronmarston myronmarston Fix and re-enable the test_all build.
I had previously attempted to add this in b0d5007 but find_path_to_rspec_exe wasn't quite right.

Travis installs rspec-core as a :git gem so the path is `.../rspec-core-<sha>/lib`, not `.../rspec-core/lib`.
@myronmarston myronmarston Use stub_const rather than hand-rolled const mutation.
This also fixes a warning I was getting on the 1.8.7 build:

rspec-expectations/spec/rspec/matchers/have_spec.rb:13: warning: redefine pluralize
Commits on Sep 12, 2012
David Chelimsky whitespace 60a58ec
David Chelimsky update Gemfile-custom 66ad37c
David Chelimsky more custom Gemfile updates d3d8672
Commits on Sep 27, 2012
@samphippen samphippen Make the include matcher require the key to exist in the hash.
There was a weird case where {}.should include(:something => nil) would
pass, Myron suggested we make this not the case. Here's a patch that
does that

Signed-off-by: Sam Phippen <>
@myronmarston myronmarston Fix typo. cfaf6b5
Commits on Oct 01, 2012
@myronmarston myronmarston Allow rbx-19mode build to fail (for now).
We've been getting a strange failure on rbx-19 that I can't reproduce locally:!/rspec/rspec-expectations/jobs/2583529
@alindeman alindeman Tests specifically for ability to use ::RSpec.configuration, not ::RS…

* It is possible for RSpec::Core to be defined, but not be fully loaded
  enough for RSpec.configuration to be accessible because
  rspec-core.gemspec requires 'lib/rspec/core/version' which defines
  RSpec::Core::Version but nothing else.
Commits on Oct 03, 2012
@alindeman alindeman Document inline code samples with backticks
* Hopefully prevents relishapp from considering the _ as italics
Commits on Oct 04, 2012
@alindeman alindeman Fixes the build on rbx
* rbx confusingly raises a NoMethodError in the error case described in
  `access_running_example.feature`. MRI and JRuby raise NameError.
  Because matching exactly isn't super-important, let's just match less
  stringently on the error message.
@myronmarston myronmarston Fixup documentation output of configuration specs. 1644904
Commits on Oct 09, 2012
@myronmarston myronmarston Include backtrace in errors reported by `raise_error` matcher.
It's hard to troubleshoot unexpected errors when the backtrace is silenced,
as it was previously.

Closes #59.
@myronmarston myronmarston Merge pull request #177 from rspec/issue_59
Include backtrace in errors reported by `raise_error` matcher.
@myronmarston myronmarston Allow rbx builds to fail.
We're getting weird sudden regressions on rbx, and given the frequency of
RBX updates (and recent experience with failing rbx bulids in VCR and other
rspec repos), I think it's due to a bug in rbx.
Commits on Oct 12, 2012
@vanstee vanstee Identify ruby code for syntax highlighting
Fixes #178
@alindeman alindeman Merge pull request #180 from vanstee/ruby_file_doc_strings
Identify ruby code for syntax highlighting
Commits on Oct 13, 2012
@myronmarston myronmarston Rbx builds are passing now thanks to @alindeman.

Revert "Allow rbx builds to fail."

This reverts commit 2f1595f.
Commits on Oct 16, 2012
@alindeman alindeman Build on JRuby --1.9 32799c0
@alindeman alindeman Scopes documentation gems and avoids installing them on Travis f4e53a9
@dchelimsky dchelimsky README - recommend eq over == 13d69c3
@alindeman alindeman JRuby --1.9 is green c8ddb5e
Commits on Oct 17, 2012
@samphippen samphippen Warn if the "message" param passed to a should is not a string 518a0f7
@myronmarston myronmarston It's a warning, not an error. 0e706c6
@myronmarston myronmarston Improve wording of warning. a6365b0
@myronmarston myronmarston Cleanup whitespace. cd196c5
@myronmarston myronmarston Update changelog. f4f2a29
Commits on Oct 21, 2012
@myronmarston myronmarston Use `hide_const` at a place where we really just want to hide a const…
Commits on Oct 23, 2012
@myronmarston myronmarston Cleanup whitespace. e2ef482
@myronmarston myronmarston Add spec demonstrating odd `method_missing` behavior.
I ran into this in some rspec-mocks specs but traced it back to rspec-expectations.