class AssertSelectTest

Constants

Assertion

Public Instance Methods

assert_failure(message, &block) click to toggle source
# File test/assert_select_test.rb, line 30
def assert_failure(message, &block)
  e = assert_raise(Assertion, &block)
  assert_match(message, e.message) if Regexp === message
  assert_equal(message, e.message) if String === message
end
test_assert_select_from_rjs_with_multiple_results() click to toggle source

With multiple results.

# File test/assert_select_test.rb, line 53
def test_assert_select_from_rjs_with_multiple_results
  render_rjs do |page|
    page.replace_html "test", "<div id=\"1\">foo</div>"
    page.replace_html "test2", "<div id=\"2\">foo</div>"
  end
  assert_select "div" do |elements|
    assert elements.size == 2
    assert_select "#1"
    assert_select "#2"
  end
end
test_assert_select_from_rjs_with_single_result() click to toggle source

With single result.

# File test/assert_select_test.rb, line 37
def test_assert_select_from_rjs_with_single_result
  render_rjs do |page|
    page.replace_html "test", "<div id=\"1\">foo</div>\n<div id=\"2\">foo</div>"
  end
  assert_select "div" do |elements|
    assert elements.size == 2
    assert_select "#1"
    assert_select "#2"
  end
  assert_select "div#?", /\d+/ do |elements|
    assert_select "#1"
    assert_select "#2"
  end
end
test_assert_select_rjs_fails_if_nothing_to_pick() click to toggle source

Test that we fail if there is nothing to pick.

# File test/assert_select_test.rb, line 118
def test_assert_select_rjs_fails_if_nothing_to_pick
  render_rjs { }
  assert_raise(Assertion) { assert_select_rjs }
end
test_assert_select_rjs_for_chained_replace() click to toggle source
# File test/assert_select_test.rb, line 195
def test_assert_select_rjs_for_chained_replace
  render_rjs do |page|
    page['test1'].replace "<div id=\"1\">foo</div>"
    page['test2'].replace_html "<div id=\"2\">foo</div>"
    page.insert_html :top, "test3", "<div id=\"3\">foo</div>"
  end
  # Replace.
  assert_select_rjs :chained_replace do
    assert_select "div", 1
    assert_select "#1"
  end
  assert_select_rjs :chained_replace, "test1" do
    assert_select "div", 1
    assert_select "#1"
  end
  assert_raise(Assertion) { assert_select_rjs :chained_replace, "test2" }
  # Replace HTML.
  assert_select_rjs :chained_replace_html do
    assert_select "div", 1
    assert_select "#2"
  end
  assert_select_rjs :chained_replace_html, "test2" do
    assert_select "div", 1
    assert_select "#2"
  end
  assert_raise(Assertion) { assert_select_rjs :replace_html, "test1" }
end
test_assert_select_rjs_for_hide() click to toggle source

Simple hide

# File test/assert_select_test.rb, line 288
def test_assert_select_rjs_for_hide
  render_rjs do |page|
    page.hide "test1"
  end

  assert_select_rjs :hide, "test1"
end
test_assert_select_rjs_for_hide_ignores_block() click to toggle source
# File test/assert_select_test.rb, line 307
def test_assert_select_rjs_for_hide_ignores_block
  render_rjs do |page|
    page.hide "test1"
  end

  assert_nothing_raised do
    assert_select_rjs :hide, "test1" do
      assert_select "p"
    end
  end
end
test_assert_select_rjs_for_hide_offers_useful_error_when_assertion_fails() click to toggle source
# File test/assert_select_test.rb, line 296
def test_assert_select_rjs_for_hide_offers_useful_error_when_assertion_fails
  render_rjs do |page|
    page.hide "test_with_typo"
  end

  assert_select_rjs :hide, "test1"

rescue Assertion => e
  assert_equal "No RJS statement that hides 'test1' was rendered.", e.message
end
test_assert_select_rjs_for_nonpositioned_insert() click to toggle source

Non-positioned insert.

# File test/assert_select_test.rb, line 352
def test_assert_select_rjs_for_nonpositioned_insert
  render_rjs do |page|
    page.replace "test1", "<div id=\"1\">foo</div>"
    page.replace_html "test2", "<div id=\"2\">foo</div>"
    page.insert_html :top, "test3", "<div id=\"3\">foo</div>"
  end
  assert_select_rjs :insert_html do
    assert_select "div", 1
    assert_select "#3"
  end
  assert_select_rjs :insert_html, "test3" do
    assert_select "div", 1
    assert_select "#3"
  end
  assert_raise(Assertion) { assert_select_rjs :insert_html, "test1" }
end
test_assert_select_rjs_for_positioned_insert() click to toggle source

Positioned insert.

# File test/assert_select_test.rb, line 370
def test_assert_select_rjs_for_positioned_insert
  render_rjs do |page|
    page.insert_html :top, "test1", "<div id=\"1\">foo</div>"
    page.insert_html :bottom, "test2", "<div id=\"2\">foo</div>"
    page.insert_html :before, "test3", "<div id=\"3\">foo</div>"
    page.insert_html :after, "test4", "<div id=\"4\">foo</div>"
  end
  assert_select_rjs :insert, :top do
    assert_select "div", 1
    assert_select "#1"
  end
  assert_select_rjs :insert, :bottom do
    assert_select "div", 1
    assert_select "#2"
  end
  assert_select_rjs :insert, :before do
    assert_select "div", 1
    assert_select "#3"
  end
  assert_select_rjs :insert, :after do
    assert_select "div", 1
    assert_select "#4"
  end
  assert_select_rjs :insert_html do
    assert_select "div", 4
  end
end
test_assert_select_rjs_for_positioned_insert_should_fail_when_mixing_arguments() click to toggle source

Test assert_select_rjs.

# File test/assert_select_test.rb, line 91
def test_assert_select_rjs_for_positioned_insert_should_fail_when_mixing_arguments
  render_rjs do |page|
    page.insert_html :top, "test1", "<div id=\"1\">foo</div>"
    page.insert_html :bottom, "test2", "<div id=\"2\">foo</div>"
  end
  assert_raise(Assertion) {assert_select_rjs :insert, :top, "test2"}
end
test_assert_select_rjs_for_redirect_to() click to toggle source
# File test/assert_select_test.rb, line 434
def test_assert_select_rjs_for_redirect_to
  render_rjs do |page|
    page.redirect_to '/'
  end
  assert_select_rjs :redirect, '/'
end
test_assert_select_rjs_for_remove() click to toggle source

Simple remove

# File test/assert_select_test.rb, line 224
def test_assert_select_rjs_for_remove
  render_rjs do |page|
    page.remove "test1"
  end

  assert_select_rjs :remove, "test1"
end
test_assert_select_rjs_for_remove_ignores_block() click to toggle source
# File test/assert_select_test.rb, line 243
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
test_assert_select_rjs_for_remove_offers_useful_error_when_assertion_fails() click to toggle source
# File test/assert_select_test.rb, line 232
def test_assert_select_rjs_for_remove_offers_useful_error_when_assertion_fails
  render_rjs do |page|
    page.remove "test_with_typo"
  end

  assert_select_rjs :remove, "test1"

rescue Assertion => e
  assert_equal "No RJS statement that removes 'test1' was rendered.", e.message
end
test_assert_select_rjs_for_replace() click to toggle source
# File test/assert_select_test.rb, line 167
def test_assert_select_rjs_for_replace
  render_rjs do |page|
    page.replace "test1", "<div id=\"1\">foo</div>"
    page.replace_html "test2", "<div id=\"2\">foo</div>"
    page.insert_html :top, "test3", "<div id=\"3\">foo</div>"
  end
  # Replace.
  assert_select_rjs :replace do
    assert_select "div", 1
    assert_select "#1"
  end
  assert_select_rjs :replace, "test1" do
    assert_select "div", 1
    assert_select "#1"
  end
  assert_raise(Assertion) { assert_select_rjs :replace, "test2" }
  # Replace HTML.
  assert_select_rjs :replace_html do
    assert_select "div", 1
    assert_select "#2"
  end
  assert_select_rjs :replace_html, "test2" do
    assert_select "div", 1
    assert_select "#2"
  end
  assert_raise(Assertion) { assert_select_rjs :replace_html, "test1" }
end
test_assert_select_rjs_for_show() click to toggle source

Simple show

# File test/assert_select_test.rb, line 256
def test_assert_select_rjs_for_show
  render_rjs do |page|
    page.show "test1"
  end

  assert_select_rjs :show, "test1"
end
test_assert_select_rjs_for_show_ignores_block() click to toggle source
# File test/assert_select_test.rb, line 275
def test_assert_select_rjs_for_show_ignores_block
  render_rjs do |page|
    page.show "test1"
  end

  assert_nothing_raised do
    assert_select_rjs :show, "test1" do
      assert_select "p"
    end
  end
end
test_assert_select_rjs_for_show_offers_useful_error_when_assertion_fails() click to toggle source
# File test/assert_select_test.rb, line 264
def test_assert_select_rjs_for_show_offers_useful_error_when_assertion_fails
  render_rjs do |page|
    page.show "test_with_typo"
  end

  assert_select_rjs :show, "test1"

rescue Assertion => e
  assert_equal "No RJS statement that shows 'test1' was rendered.", e.message
end
test_assert_select_rjs_for_toggle() click to toggle source

Simple toggle

# File test/assert_select_test.rb, line 320
def test_assert_select_rjs_for_toggle
  render_rjs do |page|
    page.toggle "test1"
  end

  assert_select_rjs :toggle, "test1"
end
test_assert_select_rjs_for_toggle_ignores_block() click to toggle source
# File test/assert_select_test.rb, line 339
def test_assert_select_rjs_for_toggle_ignores_block
  render_rjs do |page|
    page.toggle "test1"
  end

  assert_nothing_raised do
    assert_select_rjs :toggle, "test1" do
      assert_select "p"
    end
  end
end
test_assert_select_rjs_for_toggle_offers_useful_error_when_assertion_fails() click to toggle source
# File test/assert_select_test.rb, line 328
def test_assert_select_rjs_for_toggle_offers_useful_error_when_assertion_fails
  render_rjs do |page|
    page.toggle "test_with_typo"
  end

  assert_select_rjs :toggle, "test1"

rescue Assertion => e
  assert_equal "No RJS statement that toggles 'test1' was rendered.", e.message
end
test_assert_select_rjs_picks_up_all_statements() click to toggle source

Test that we can pick up all statements in the result.

# File test/assert_select_test.rb, line 100
def test_assert_select_rjs_picks_up_all_statements
  render_rjs do |page|
    page.replace "test", "<div id=\"1\">foo</div>"
    page.replace_html "test2", "<div id=\"2\">foo</div>"
    page.insert_html :top, "test3", "<div id=\"3\">foo</div>"
  end

  found = false
  assert_select_rjs do
    assert_select "#1"
    assert_select "#2"
    assert_select "#3"
    found = true
  end
  assert found
end
test_assert_select_rjs_raise_errors() click to toggle source
# File test/assert_select_test.rb, line 398
def test_assert_select_rjs_raise_errors
  assert_raise(ArgumentError) { assert_select_rjs(:destroy) }
  assert_raise(ArgumentError) { assert_select_rjs(:insert, :left) }
end
test_assert_select_rjs_with_id() click to toggle source
# File test/assert_select_test.rb, line 145
def test_assert_select_rjs_with_id
  # Test that we can pick up all statements in the result.
  render_rjs do |page|
    page.replace "test1", "<div id=\"1\">foo</div>"
    page.replace_html "test2", "<div id=\"2\">foo</div>"
    page.insert_html :top, "test3", "<div id=\"3\">foo</div>"
  end
  assert_select_rjs "test1" do
    assert_select "div", 1
    assert_select "#1"
  end
  assert_select_rjs "test2" do
    assert_select "div", 1
    assert_select "#2"
  end
  assert_select_rjs "test3" do
    assert_select "div", 1
    assert_select "#3"
  end
  assert_raise(Assertion) { assert_select_rjs "test4" }
end
test_assert_select_rjs_with_unicode() click to toggle source
# File test/assert_select_test.rb, line 123
def test_assert_select_rjs_with_unicode
  # Test that non-ascii characters (which are converted into \uXXXX in RJS) are decoded correctly.

  unicode = "\3343\2203\2201\3343\2202\2261\3343\2203\2203\3343\2203\2210"
  render_rjs do |page|
    page.replace "test", %Q(<div id="1">#{unicode}</div>)
  end

  assert_select_rjs do
    str = "#1"
    assert_select str, :text => unicode
    assert_select str, unicode
    if str.respond_to?(:force_encoding)
      assert_select str, /\343\203\201..\343\203\210/
      assert_raise(Assertion) { assert_select str, /\343\203\201.\343\203\210/ }
    else
      assert_select str, Regexp.new("\3343\2203\2201..\3343\2203\2210", 0, 'U')
      assert_raise(Assertion) { assert_select str, Regexp.new("\3343\2203\2201.\3343\2203\2210", 0, 'U') }
    end
  end
end
test_css_select_from_rjs_with_multiple_results() click to toggle source

With multiple results.

# File test/assert_select_test.rb, line 76
def test_css_select_from_rjs_with_multiple_results
  render_rjs do |page|
    page.replace_html "test", "<div id=\"1\">foo</div>"
    page.replace_html "test2", "<div id=\"2\">foo</div>"
  end

  assert_equal 2, css_select("div").size
  assert_equal 1, css_select("#1").size
  assert_equal 1, css_select("#2").size
end
test_css_select_from_rjs_with_single_result() click to toggle source

With one result.

# File test/assert_select_test.rb, line 66
def test_css_select_from_rjs_with_single_result
  render_rjs do |page|
    page.replace_html "test", "<div id=\"1\">foo</div>\n<div id=\"2\">foo</div>"
  end
  assert_equal 2, css_select("div").size
  assert_equal 1, css_select("#1").size
  assert_equal 1, css_select("#2").size
end
test_nested_assert_select_rjs_with_single_result() click to toggle source

Simple selection from a single result.

# File test/assert_select_test.rb, line 404
def test_nested_assert_select_rjs_with_single_result
  render_rjs do |page|
    page.replace_html "test", "<div id=\"1\">foo</div>\n<div id=\"2\">foo</div>"
  end

  assert_select_rjs "test" do |elements|
    assert_equal 2, elements.size
    assert_select "#1"
    assert_select "#2"
  end
end
test_nested_assert_select_rjs_with_two_results() click to toggle source

Deal with two results.

# File test/assert_select_test.rb, line 417
def test_nested_assert_select_rjs_with_two_results
  render_rjs do |page|
    page.replace_html "test", "<div id=\"1\">foo</div>"
    page.replace_html "test2", "<div id=\"2\">foo</div>"
  end

  assert_select_rjs "test" do |elements|
    assert_equal 1, elements.size
    assert_select "#1"
  end

  assert_select_rjs "test2" do |elements|
    assert_equal 1, elements.size
    assert_select "#2"
  end
end

Protected Instance Methods

render_html(html) click to toggle source
# File test/assert_select_test.rb, line 442
def render_html(html)
  @controller.response_with = html
  get :html
end
render_rjs(&block) click to toggle source
# File test/assert_select_test.rb, line 447
def render_rjs(&block)
  @controller.response_with(&block)
  get :rjs
end
render_xml(xml) click to toggle source
# File test/assert_select_test.rb, line 452
def render_xml(xml)
  @controller.response_with = xml
  get :xml
end