diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2007-10-02 05:32:14 +0000 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2007-10-02 05:32:14 +0000 |
commit | 0ee1cb2cd32bfaf47deaf5440dd5b9cf0915ab6a (patch) | |
tree | 5778378eafcbdfa37c82c67be1566c76aca249be /activesupport/lib/active_support/core_ext/test/unit/assertions.rb | |
parent | 9264bdc8f618344307f07790a07a60dc04b80434 (diff) | |
download | rails-0ee1cb2cd32bfaf47deaf5440dd5b9cf0915ab6a.tar.gz rails-0ee1cb2cd32bfaf47deaf5440dd5b9cf0915ab6a.tar.bz2 rails-0ee1cb2cd32bfaf47deaf5440dd5b9cf0915ab6a.zip |
Ruby 1.9 compat, consistent load paths
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7719 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/lib/active_support/core_ext/test/unit/assertions.rb')
-rw-r--r-- | activesupport/lib/active_support/core_ext/test/unit/assertions.rb | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/core_ext/test/unit/assertions.rb b/activesupport/lib/active_support/core_ext/test/unit/assertions.rb new file mode 100644 index 0000000000..2ae4b7d6d1 --- /dev/null +++ b/activesupport/lib/active_support/core_ext/test/unit/assertions.rb @@ -0,0 +1,62 @@ +module Test #:nodoc: + module Unit #:nodoc: + # FIXME: no Proc#binding in Ruby 2, must change this API + module Assertions #:nodoc: + # Test numeric difference between the return value of an expression as a result of what is evaluated + # in the yielded block. + # + # assert_difference 'Article.count' do + # post :create, :article => {...} + # end + # + # An arbitrary expression is passed in and evaluated. + # + # assert_difference 'assigns(:article).comments(:reload).size' do + # post :create, :comment => {...} + # end + # + # An arbitrary positive or negative difference can be specified. The default is +1. + # + # assert_difference 'Article.count', -1 do + # post :delete, :id => ... + # end + # + # An array of expressions can also be passed in and evaluated. + # + # assert_difference [ 'Article.count', 'Post.count' ], +2 do + # post :create, :article => {...} + # end + # + # A error message can be specified. + # + # assert_difference 'Article.count', -1, "An Article should be destroyed" do + # post :delete, :id => ... + # end + def assert_difference(expressions, difference = 1, message = nil, &block) + expression_evaluations = Array(expressions).collect{ |expression| lambda { eval(expression, block.send!(:binding)) } } + + original_values = expression_evaluations.inject([]) { |memo, expression| memo << expression.call } + yield + expression_evaluations.each_with_index do |expression, i| + assert_equal original_values[i] + difference, expression.call, message + end + end + + # Assertion that the numeric result of evaluating an expression is not changed before and after + # invoking the passed in block. + # + # assert_no_difference 'Article.count' do + # post :create, :article => invalid_attributes + # end + # + # A error message can be specified. + # + # assert_no_difference 'Article.count', "An Article should not be destroyed" do + # post :create, :article => invalid_attributes + # end + def assert_no_difference(expressions, message = nil, &block) + assert_difference expressions, 0, message, &block + end + end + end +end |