diff options
author | Bob Remeika <bob.remeika@gmail.com> | 2009-11-04 01:51:54 -0800 |
---|---|---|
committer | Stefan Penner <stefan.penner@gmail.com> | 2010-01-27 12:44:31 -0600 |
commit | 261654becf2b689654a32f18f610a078a15608c6 (patch) | |
tree | dc1099b973f3bcd5d8e5d62a98476d449116bcd2 /actionpack/test | |
parent | dad3d09ce83ce54e5aefd7b9f27efb2ddf8b7d39 (diff) | |
download | rails-261654becf2b689654a32f18f610a078a15608c6.tar.gz rails-261654becf2b689654a32f18f610a078a15608c6.tar.bz2 rails-261654becf2b689654a32f18f610a078a15608c6.zip |
Refactored ajax helpers so they use a little bit more coherent pattern; Removed code duplication from form_remote_tag
Diffstat (limited to 'actionpack/test')
-rw-r--r-- | actionpack/test/javascript/ajax_test.rb | 81 |
1 files changed, 46 insertions, 35 deletions
diff --git a/actionpack/test/javascript/ajax_test.rb b/actionpack/test/javascript/ajax_test.rb index 5e62677a92..2ca47344e5 100644 --- a/actionpack/test/javascript/ajax_test.rb +++ b/actionpack/test/javascript/ajax_test.rb @@ -1,7 +1,5 @@ require "abstract_unit" -#TODO: Switch to assert_dom_equal where appropriate. assert_html is not robust enough for all tests - BR - class AjaxTestCase < ActionView::TestCase include ActionView::Helpers::AjaxHelper @@ -28,20 +26,6 @@ class AjaxTestCase < ActionView::TestCase end end - def extract_json_from_data_element(data_element) - root = HTML::Document.new(data_element).root - script = root.find(:tag => "script") - cdata = script.children.detect {|child| child.to_s =~ /<!\[CDATA\[/ } - js = cdata.content.split("\n").map {|line| line.gsub(Regexp.new("//.*"), "")}.join("\n").strip! - - ActiveSupport::JSON.decode(js) - end - - def assert_data_element_json(actual, expected) - json = extract_json_from_data_element(actual) - assert_equal expected, json - end - def self.assert_callbacks_work(&blk) define_method(:assert_callbacks_work, &blk) @@ -140,8 +124,8 @@ class FormRemoteTagTest < AjaxTestCase # TODO: Play with using assert_dom_equal test "basic" do - assert_html form_remote_tag(:update => "#glass_of_beer", :url => { :action => :fast }), - %w(form action="/url/hash" method="post" data-js-type="remote" data-update-success="#glass_of_beer") + assert_dom_equal %(<form action="/url/hash" method="post" data-js-type="remote" data-update-success="#glass_of_beer">), + form_remote_tag(:update => "#glass_of_beer", :url => { :action => :fast }) end test "when protect_against_forgery? is true" do @@ -246,6 +230,42 @@ class Article end end +class ExtractRemoteAttributesTest < AjaxTestCase + attr_reader :attributes + + test "extract_remote_attributes! html" do + attributes = extract_remote_attributes!(:html => { :class => "css_klass", :style => "border:1px solid"}) + assert_equal "css_klass", attributes[:class] + assert_equal "border:1px solid", attributes[:style] + end + + test "extract_remote_attributes! update options when :update is a hash" do + attributes = extract_remote_attributes!(:update => { :success => "foo", :failure => "bar" }) + assert_equal "foo", attributes["data-update-success"] + assert_equal "bar", attributes["data-update-failure"] + end + + test "extract_remote_attributes! update options when :update is string" do + attributes = extract_remote_attributes!(:update => "baz") + assert_equal "baz", attributes["data-update-success"] + end + + test "extract_remote_attributes! position" do + attributes = extract_remote_attributes!(:position => "before") + assert_equal "before", attributes["data-update-position"] + end + + test "extract_remote_attributes! data-js-type when it is NOT passed" do + attributes = extract_remote_attributes!({}) + assert_equal "remote", attributes["data-js-type"] + end + + test "extract_remote_attributes! data-js-type when it passed" do + attributes = extract_remote_attributes!(:js_type => "some_type") + assert_equal "some_type", attributes["data-js-type"] + end +end + class RemoteFormForTest < AjaxTestCase def setup @@ -321,11 +341,8 @@ class ButtonToRemoteTest < AjaxTestCase class StandardTest < ButtonToRemoteTest test "basic" do - button = button({:url => {:action => "whatnot"}}, {:class => "fine"}) - [/input/, /class="fine"/, /type="button"/, /value="Remote outpost"/, - /data-url="\/whatnot"/].each do |match| - assert_match match, button - end + assert_html button({:url => {:action => "whatnot"}}, {:class => "fine", :value => "RemoteOutpost"}), + %w(input class="fine" type="button" value="RemoteOutpost" data-url="/url/hash") end end @@ -336,20 +353,17 @@ class ButtonToRemoteTest < AjaxTestCase button(callback => "undoRequestCompleted(request)") end end -<<<<<<< HEAD -======= end class ScriptDecoratorTest < AjaxTestCase def decorator() - script_decorator("foo_type", :foo => "bar", :baz => "bang") + script_decorator("data-js-type" => "foo_type", "data-foo" => "bar", "data-baz" => "bang") end test "basic" do expected = %(<script type="application/json" data-js-type="foo_type" data-foo="bar" data-baz="bang"></script>) assert_dom_equal expected, decorator end ->>>>>>> bd54253... Applied Yehuda's patch; Sharing extract_object_name_for_form! between form_helper and ajax_helper; Added script_decorator helper end class ObserveFieldTest < AjaxTestCase @@ -385,11 +399,10 @@ class ObserveFieldTest < AjaxTestCase assert_no_match /frequency/, field(:frequency => 0) end - # TODO: Finish when remote_function or some equivilent is finished -BR -# def test_observe_field -# assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Form.Element.Observer('glass', 300, function(element, value) {new Ajax.Request('http://www.example.com/reorder_if_empty', {asynchronous:true, evalScripts:true, parameters:value})})\n//]]>\n</script>), -# observe_field("glass", :frequency => 5.minutes, :url => { :action => "reorder_if_empty" }) -# end + test "observe field with common options" do + assert_html observe_field("glass", :frequency => 5.minutes, :url => { :action => "reorder_if_empty" }), + %w(script data-name="glass" data-frequency="300" data-url="/url/hash") + end # TODO: Consider using JSON instead of strings. Is using 'value' as a magical reference to the value of the observed field weird? (Rails2 does this) - BR test "using a :with option" do @@ -398,7 +411,6 @@ class ObserveFieldTest < AjaxTestCase assert_html field(:with => "'foo=' + encodeURIComponent(value)"), %w(script data-name="title" data-with="'foo=' + encodeURIComponent(value)") - end test "using json in a :with option" do @@ -408,7 +420,6 @@ class ObserveFieldTest < AjaxTestCase test "using :function for callback" do assert_html field(:function => "alert('Element changed')"), - %w(script data-function="function(element, value) {alert('Element changed')}") - + %w(script data-observer-code="function(element, value) {alert('Element changed')}") end end |