aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorBob Remeika <bob.remeika@gmail.com>2009-09-24 21:12:11 -0700
committerStefan Penner <stefan.penner@gmail.com>2010-01-27 12:44:30 -0600
commitb225de9711e012a8ade32cc4fc947f41cbb184a1 (patch)
tree385d60087a24c2ce1b28f59872bf01ad3fedbc5f /actionpack
parentafdecbc0a85fb6a61e58b8017f476fe29507e6bf (diff)
downloadrails-b225de9711e012a8ade32cc4fc947f41cbb184a1.tar.gz
rails-b225de9711e012a8ade32cc4fc947f41cbb184a1.tar.bz2
rails-b225de9711e012a8ade32cc4fc947f41cbb184a1.zip
Added assert_data_element_json test helper for data element helpers
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_view/helpers/ajax_helper.rb10
-rw-r--r--actionpack/test/javascript/ajax_test.rb44
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