aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/javascript/ajax_test.rb
diff options
context:
space:
mode:
authorBob Remeika <bob.remeika@gmail.com>2009-11-04 01:51:54 -0800
committerStefan Penner <stefan.penner@gmail.com>2010-01-27 12:44:31 -0600
commit261654becf2b689654a32f18f610a078a15608c6 (patch)
treedc1099b973f3bcd5d8e5d62a98476d449116bcd2 /actionpack/test/javascript/ajax_test.rb
parentdad3d09ce83ce54e5aefd7b9f27efb2ddf8b7d39 (diff)
downloadrails-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/javascript/ajax_test.rb')
-rw-r--r--actionpack/test/javascript/ajax_test.rb81
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