aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaco Guzman <fjguzman@aspgems.com>2010-05-15 13:26:33 +0200
committerJosé Valim <jose.valim@gmail.com>2010-05-15 16:31:36 +0200
commitcdf700147c5b3ec5e4d1e7de1c2d08134568c2d1 (patch)
tree86dc957b6048393fe1c83ff3e7a9bf02536e0dce
parent6f0ed7aa521e55bb2c12a29b86c0e8e68468cef8 (diff)
downloadrails-cdf700147c5b3ec5e4d1e7de1c2d08134568c2d1.tar.gz
rails-cdf700147c5b3ec5e4d1e7de1c2d08134568c2d1.tar.bz2
rails-cdf700147c5b3ec5e4d1e7de1c2d08134568c2d1.zip
fix assert_select messages to its declaration behaviour
Signed-off-by: José Valim <jose.valim@gmail.com>
-rw-r--r--actionpack/lib/action_dispatch/testing/assertions/selector.rb16
-rw-r--r--actionpack/test/controller/assert_select_test.rb16
2 files changed, 24 insertions, 8 deletions
diff --git a/actionpack/lib/action_dispatch/testing/assertions/selector.rb b/actionpack/lib/action_dispatch/testing/assertions/selector.rb
index a6b1126e2b..9deabf5b3c 100644
--- a/actionpack/lib/action_dispatch/testing/assertions/selector.rb
+++ b/actionpack/lib/action_dispatch/testing/assertions/selector.rb
@@ -298,10 +298,14 @@ module ActionDispatch
# found one but expecting two.
message ||= content_mismatch if matches.empty?
# Test minimum/maximum occurrence.
- min, max = equals[:minimum], equals[:maximum]
- message = message || %(Expected #{count_description(min, max)} matching "#{selector.to_s}", found #{matches.size}.)
- assert matches.size >= min, message if min
- assert matches.size <= max, message if max
+ min, max, count = equals[:minimum], equals[:maximum], equals[:count]
+ message = message || %(Expected #{count_description(min, max, count)} matching "#{selector.to_s}", found #{matches.size}.)
+ if count
+ assert matches.size == count, message
+ else
+ assert matches.size >= min, message if min
+ assert matches.size <= max, message if max
+ end
# If a block is given call that block. Set @selected to allow
# nested assert_select, which can be nested several levels deep.
@@ -318,11 +322,13 @@ module ActionDispatch
matches
end
- def count_description(min, max) #:nodoc:
+ def count_description(min, max, count) #:nodoc:
pluralize = lambda {|word, quantity| word << (quantity == 1 ? '' : 's')}
if min && max && (max != min)
"between #{min} and #{max} elements"
+ elsif min && max && max == min && count
+ "exactly #{count} #{pluralize['element', min]}"
elsif min && !(min == 1 && max == 1)
"at least #{min} #{pluralize['element', min]}"
elsif max
diff --git a/actionpack/test/controller/assert_select_test.rb b/actionpack/test/controller/assert_select_test.rb
index 4ef6fa4000..f1254abcf7 100644
--- a/actionpack/test/controller/assert_select_test.rb
+++ b/actionpack/test/controller/assert_select_test.rb
@@ -80,10 +80,15 @@ class AssertSelectTest < ActionController::TestCase
def test_assert_select
render_html %Q{<div id="1"></div><div id="2"></div>}
assert_select "div", 2
- assert_failure(/Expected at least 3 elements matching \"div\", found 2/) { assert_select "div", 3 }
assert_failure(/Expected at least 1 element matching \"p\", found 0/) { assert_select "p" }
end
+ def test_equality_integer
+ render_html %Q{<div id="1"></div><div id="2"></div>}
+ assert_failure(/Expected exactly 3 elements matching \"div\", found 2/) { assert_select "div", 3 }
+ assert_failure(/Expected exactly 0 elements matching \"div\", found 2/) { assert_select "div", 0 }
+ end
+
def test_equality_true_false
render_html %Q{<div id="1"></div><div id="2"></div>}
assert_nothing_raised { assert_select "div" }
@@ -94,6 +99,11 @@ class AssertSelectTest < ActionController::TestCase
assert_nothing_raised { assert_select "p", false }
end
+ def test_equality_false_message
+ render_html %Q{<div id="1"></div><div id="2"></div>}
+ assert_failure(/Expected exactly 0 elements matching \"div\", found 2/) { assert_select "div", false }
+ end
+
def test_equality_string_and_regexp
render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
assert_nothing_raised { assert_select "div", "foo" }
@@ -128,7 +138,7 @@ class AssertSelectTest < ActionController::TestCase
def test_counts
render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
assert_nothing_raised { assert_select "div", 2 }
- assert_failure(/Expected at least 3 elements matching \"div\", found 2/) do
+ assert_failure(/Expected exactly 3 elements matching \"div\", found 2/) do
assert_select "div", 3
end
assert_nothing_raised { assert_select "div", 1..2 }
@@ -136,7 +146,7 @@ class AssertSelectTest < ActionController::TestCase
assert_select "div", 3..4
end
assert_nothing_raised { assert_select "div", :count=>2 }
- assert_failure(/Expected at least 3 elements matching \"div\", found 2/) do
+ assert_failure(/Expected exactly 3 elements matching \"div\", found 2/) do
assert_select "div", :count=>3
end
assert_nothing_raised { assert_select "div", :minimum=>1 }