diff options
author | Bob Remeika <bob.remeika@gmail.com> | 2009-09-24 21:12:11 -0700 |
---|---|---|
committer | Stefan Penner <stefan.penner@gmail.com> | 2010-01-27 12:44:30 -0600 |
commit | b225de9711e012a8ade32cc4fc947f41cbb184a1 (patch) | |
tree | 385d60087a24c2ce1b28f59872bf01ad3fedbc5f | |
parent | afdecbc0a85fb6a61e58b8017f476fe29507e6bf (diff) | |
download | rails-b225de9711e012a8ade32cc4fc947f41cbb184a1.tar.gz rails-b225de9711e012a8ade32cc4fc947f41cbb184a1.tar.bz2 rails-b225de9711e012a8ade32cc4fc947f41cbb184a1.zip |
Added assert_data_element_json test helper for data element helpers
-rw-r--r-- | actionpack/lib/action_view/helpers/ajax_helper.rb | 10 | ||||
-rw-r--r-- | actionpack/test/javascript/ajax_test.rb | 44 |
2 files changed, 34 insertions, 20 deletions
diff --git a/actionpack/lib/action_view/helpers/ajax_helper.rb b/actionpack/lib/action_view/helpers/ajax_helper.rb index 05e5fca484..18b4c4991f 100644 --- a/actionpack/lib/action_view/helpers/ajax_helper.rb +++ b/actionpack/lib/action_view/helpers/ajax_helper.rb @@ -94,10 +94,12 @@ module ActionView end end - if options[:with] && (options[:with] !~ /[\{=(.]/) - options[:with] = "'#{options[:with]}=' + encodeURIComponent(value)" - else - options[:with] ||= 'value' unless options[:function] + if options[:with] + if options[:with] !~ /[\{=(.]/ + options[:with] = "'#{options[:with]}=' + encodeURIComponent(value)" + else + options[:with] ||= 'value' unless options[:function] + end end if options[:function] diff --git a/actionpack/test/javascript/ajax_test.rb b/actionpack/test/javascript/ajax_test.rb index 97a69ba732..dc1f7c14fd 100644 --- a/actionpack/test/javascript/ajax_test.rb +++ b/actionpack/test/javascript/ajax_test.rb @@ -10,6 +10,20 @@ class AjaxTestCase < ActiveSupport::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) @@ -112,8 +126,6 @@ class ButtonToRemoteTest < AjaxTestCase end end -# TODO: We need a better way to test JSON being returned from data only helpers - BR -# TODO: We might also need a lower level data only helper method??? - BR class ObserveFieldTest < AjaxTestCase def protect_against_forgery? false @@ -129,18 +141,18 @@ class ObserveFieldTest < AjaxTestCase end test "using a url string" do - assert_html field(:url => "/some/other/url"), - %w("url":"/some/other/url") + assert_data_element_json field(:url => "/some/other/url"), + "url" => "/some/other/url", "name" => "title" end test "using a url hash" do - assert_html field(:url => {:controller => :blog, :action => :update}), - %w("url":"/url/hash") + assert_data_element_json field(:url => {:controller => :blog, :action => :update}), + "url" => "/url/hash", "name" => "title" end test "using a :frequency option" do - assert_html field(:frequency => 5.minutes), - %w("frequency":300) + assert_data_element_json field(:url => { :controller => :blog }, :frequency => 5.minutes), + "url" => "/url/hash", "name" => "title", "frequency" => 300 end test "using a :frequency option of 0" do @@ -155,19 +167,19 @@ class ObserveFieldTest < AjaxTestCase # 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 - assert_html field(:with => "foo"), - %w("with":"'foo=' + encodeURIComponent(value)") - assert_html field(:with => "'foo=' + encodeURIComponent(value)"), - %w("with":"'foo=' + encodeURIComponent(value)") + assert_data_element_json field(:with => "foo"), + "name" => "title", "with" => "'foo=' + encodeURIComponent(value)" + assert_data_element_json field(:with => "'foo=' + encodeURIComponent(value)"), + "name" => "title", "with" => "'foo=' + encodeURIComponent(value)" end test "using json in a :with option" do - assert_html field(:with => "{'id':value}"), - %w("with":"{'id':value}") + assert_data_element_json field(:with => "{'id':value}"), + "name" => "title", "with" => "{'id':value}" end test "using :function for callback" do - assert_html field(:function => "alert('Element changed')"), - %w("function":"function(element, value) {alert('Element changed')}") + assert_data_element_json field(:function => "alert('Element changed')"), + "name" => "title", "function" => "function(element, value) {alert('Element changed')}" end end |