aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2006-11-15 12:45:52 +0000
committerJeremy Kemper <jeremy@bitsweat.net>2006-11-15 12:45:52 +0000
commitc9e0002d36429a382ab4f96059a3b6eb51605d88 (patch)
tree50745d3993e57f09f22aac8470fcdfb1013b33dd
parent079d684a37a1d5e7c61661bdf6221ded90c06159 (diff)
downloadrails-c9e0002d36429a382ab4f96059a3b6eb51605d88.tar.gz
rails-c9e0002d36429a382ab4f96059a3b6eb51605d88.tar.bz2
rails-c9e0002d36429a382ab4f96059a3b6eb51605d88.zip
assert_select_rjs :remove
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5525 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--actionpack/CHANGELOG2
-rw-r--r--actionpack/lib/action_controller/assertions/selector_assertions.rb28
-rw-r--r--actionpack/test/controller/assert_select_test.rb21
3 files changed, 44 insertions, 7 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index 63e6741576..db0f37fd9a 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* assert_select_rjs :remove. [Dylan Egan]
+
* Always clear model associations from session. #4795 [sd@notso.net, andylien@gmail.com]
* Update to Prototype 1.5.0_rc2. [Sam Stephenson]
diff --git a/actionpack/lib/action_controller/assertions/selector_assertions.rb b/actionpack/lib/action_controller/assertions/selector_assertions.rb
index a5267e20e8..f9d67fb5bd 100644
--- a/actionpack/lib/action_controller/assertions/selector_assertions.rb
+++ b/actionpack/lib/action_controller/assertions/selector_assertions.rb
@@ -317,13 +317,16 @@ module ActionController
# that update or insert an element with that identifier.
#
# Use the first argument to narrow down assertions to only statements
- # of that type. Possible values are +:replace+, +:replace_html+ and
+ # of that type. Possible values are +:replace+, +:replace_html+, +:remove+ and
# +:insert_html+.
#
# Use the argument +:insert+ followed by an insertion position to narrow
# down the assertion to only statements that insert elements in that
# position. Possible values are +:top+, +:bottom+, +:before+ and +:after+.
#
+ # Using the +:remove+ statement, you will be able to pass a block, but it will
+ # be ignored as there is no HTML passed for this statement.
+ #
# === Using blocks
#
# Without a block, #assert_select_rjs merely asserts that the response
@@ -352,6 +355,9 @@ module ActionController
# # Inserting into the element bar, top position.
# assert_select_rjs :insert, :top, "bar"
#
+ # # Remove the element bar
+ # assert_select_rjs :remove, "bar"
+ #
# # Changing the element foo, with an image.
# assert_select_rjs "foo" do
# assert_select "img[src=/images/logo.gif""
@@ -400,20 +406,27 @@ module ActionController
case rjs_type
when :chained_replace, :chained_replace_html
Regexp.new("\\$\\(\"#{id}\"\\)#{statement}\\(#{RJS_PATTERN_HTML}\\)", Regexp::MULTILINE)
+ when :remove
+ Regexp.new("#{statement}\\(\"#{id}\"\\)")
else
Regexp.new("#{statement}\\(\"#{id}\", #{RJS_PATTERN_HTML}\\)", Regexp::MULTILINE)
end
# Duplicate the body since the next step involves destroying it.
matches = nil
- @response.body.gsub(pattern) do |match|
- html = unescape_rjs($2)
- matches ||= []
- matches.concat HTML::Document.new(html).root.children.select { |n| n.tag? }
- ""
+ case rjs_type
+ when :remove
+ matches = @response.body.match(pattern)
+ else
+ @response.body.gsub(pattern) do |match|
+ html = unescape_rjs($2)
+ matches ||= []
+ matches.concat HTML::Document.new(html).root.children.select { |n| n.tag? }
+ ""
+ end
end
if matches
- if block_given?
+ if block_given? && rjs_type != :remove
begin
in_scope, @selected = @selected, matches
yield matches
@@ -519,6 +532,7 @@ module ActionController
:replace_html => /Element\.update/,
:chained_replace => /\.replace/,
:chained_replace_html => /\.update/,
+ :remove => /Element\.remove/,
}
RJS_INSERTIONS = [:top, :bottom, :before, :after]
RJS_INSERTIONS.each do |insertion|
diff --git a/actionpack/test/controller/assert_select_test.rb b/actionpack/test/controller/assert_select_test.rb
index 2c180dbc08..92da967acd 100644
--- a/actionpack/test/controller/assert_select_test.rb
+++ b/actionpack/test/controller/assert_select_test.rb
@@ -408,6 +408,27 @@ class AssertSelectTest < Test::Unit::TestCase
assert_raises(AssertionFailedError) { assert_select_rjs :replace_html, "test1" }
end
+ # Simple remove
+ def test_assert_select_rjs_for_remove
+ render_rjs do |page|
+ page.remove "test1"
+ end
+
+ assert_select_rjs :remove, "test1"
+ end
+
+ def test_assert_select_rjs_for_remove_ignores_block
+ render_rjs do |page|
+ page.remove "test1"
+ end
+
+ assert_nothing_raised do
+ assert_select_rjs :remove, "test1" do
+ assert_select "p"
+ end
+ end
+ end
+
# Non-positioned insert.
def test_assert_select_rjs_for_nonpositioned_insert
render_rjs do |page|