diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 994b73ff6f821b1c422386a963f33f75e97a7e36..f29585446a8c84c39c864317d135351976ded79b 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Fixed that assert_template_xpath_matches did not indicate when a path was not found #658 [Eric Hodel] + * Added TextHelper#auto_link, TextHelper#auto_link_urls, and TextHelper#auto_link_email_addresses to turn those elements into ahrefs * Fixed that on validation errors, scaffold couldn't find template #654 [mindel] diff --git a/actionpack/lib/action_controller/assertions/action_pack_assertions.rb b/actionpack/lib/action_controller/assertions/action_pack_assertions.rb index a8819550e6d2e935a593cd8b330df941e9579aea..c9a1aae1746f4bcf10b59ce80e6e9332e72a022b 100644 --- a/actionpack/lib/action_controller/assertions/action_pack_assertions.rb +++ b/actionpack/lib/action_controller/assertions/action_pack_assertions.rb @@ -217,7 +217,14 @@ def assert_template_xpath_match(expression=nil, expected=nil, message=nil) response = acquire_assertion_target xml, matches = REXML::Document.new(response.body), [] xml.elements.each(expression) { |e| matches << e.text } - matches = matches.first if matches.length < 2 + if matches.empty? then + msg = build_message(message, " not found in document", + expression) + flunk(msg) + return + elsif matches.length < 2 then + matches = matches.first + end msg = build_message(message, " found , not ", expression, matches, expected) assert_block(msg) { matches == expected } diff --git a/actionpack/test/abstract_unit.rb b/actionpack/test/abstract_unit.rb index 3d61559ee33f71d5bd7a5b99fafedfbe36f7894a..99c911c2dd34df043817e4d69824b340a09d6149 100644 --- a/actionpack/test/abstract_unit.rb +++ b/actionpack/test/abstract_unit.rb @@ -7,4 +7,5 @@ require 'action_controller/test_process' ActionController::Base.logger = nil -ActionController::Base.ignore_missing_templates = true \ No newline at end of file +ActionController::Base.ignore_missing_templates = true +ActionController::Routing::Routes.reload \ No newline at end of file diff --git a/actionpack/test/controller/action_pack_assertions_test.rb b/actionpack/test/controller/action_pack_assertions_test.rb index 4c0382a32cfb1072cd0e86ec00183cb97743994b..48d7ed2f3fc71d24802a82cd6a918032c6df22e8 100644 --- a/actionpack/test/controller/action_pack_assertions_test.rb +++ b/actionpack/test/controller/action_pack_assertions_test.rb @@ -337,6 +337,13 @@ def test_render_based_on_parameters assert_equal "Mr. David", @response.body end + def test_assert_template_xpath_match_no_matches + process :hello_xml_world + assert_raises Test::Unit::AssertionFailedError do + assert_template_xpath_match('/no/such/node/in/document') + end + end + def test_simple_one_element_xpath_match process :hello_xml_world assert_template_xpath_match('//title', "Hello World")