Browse files

Added assert_data_element_json test helper for data element helpers

  • Loading branch information...
1 parent 6fa8f81 commit 0955f5791555127d2ea3ab1c8a2450bca5a4236a @foobarfighter foobarfighter committed with stefanpenner Sep 25, 2009
Showing with 34 additions and 20 deletions.
  1. +6 −4 actionpack/lib/action_view/helpers/ajax_helper.rb
  2. +28 −16 actionpack/test/javascript/ajax_test.rb
View
10 actionpack/lib/action_view/helpers/ajax_helper.rb
@@ -48,10 +48,12 @@ def observe_field(name, options = {})
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]
View
44 actionpack/test/javascript/ajax_test.rb
@@ -10,6 +10,20 @@ def assert_html(html, matches)
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 LegacyButtonToRemoteTest < ButtonToRemoteTest
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 @@ def field(options = {})
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 @@ def field(options = {})
# 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

0 comments on commit 0955f57

Please sign in to comment.