Skip to content


Subversion checkout URL

You can clone with
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
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 bump to 2.11.1 3ae2ff7