require File.dirname(__FILE__) + '/test_helper' class BehaviourRegistrationWithJavascriptStringTest < Test::Unit::TestCase include UnobtrusiveJavascript::Helpers def setup @controller = UnobtrusiveJavascriptControllerStub.new @output = register_js_behaviour("#mydiv:click", "alert('hello world')") end def test_should_store_registered_behaviour assert_equal 1, @controller.js_behaviours.size assert_equal "#mydiv:click", @controller.js_behaviours.first[:selector] assert_equal "alert('hello world')", @controller.js_behaviours.first[:behaviour] end end class BehaviourRegistrationRendererdInlineTest < Test::Unit::TestCase include UnobtrusiveJavascript::Helpers include ActionView::Helpers::JavaScriptHelper include ActionView::Helpers::TagHelper def setup @controller = UnobtrusiveJavascriptControllerStub.new @output = register_js_behaviour("#mydiv:click", "alert('hello world')", :external => false) end def test_should_not_store_registered_behaviour assert_equal 0, @controller.js_behaviours.size end end class BehaviourRegistrationWithBlock < Test::Unit::TestCase include UnobtrusiveJavascript::Helpers def setup @controller = UnobtrusiveJavascriptControllerStub.new end def test_should_use_page_argument register_js_behaviour '#thing' do |page| page.alert('hello') end assert_equal '#thing', @controller.js_behaviours.last[:selector] assert_equal "alert(\"hello\");", @controller.js_behaviours.last[:behaviour] end def test_should_use_element_argument register_js_behaviour '#thing' do |page, element| element.hide end assert_equal '#thing', @controller.js_behaviours.last[:selector] assert_equal "this.hide();", @controller.js_behaviours.last[:behaviour] end def test_should_use_event_argument register_js_behaviour '#thing' do |page, element, event| event.stop end assert_equal '#thing', @controller.js_behaviours.last[:selector] assert_equal "Event.stop(event);", @controller.js_behaviours.last[:behaviour] end def test_should_use_allow_multiple_calls register_js_behaviour '#thing' do |page, element, event| page.alert('hiding thing') element.hide element.show event.stop end assert_equal '#thing', @controller.js_behaviours.last[:selector] assert_equal "alert(\"hiding thing\");\nthis.hide();\nthis.show();\nEvent.stop(event);", @controller.js_behaviours.last[:behaviour] end end class BehaviourBlockRendering < Test::Unit::TestCase include UnobtrusiveJavascript::Helpers def setup @controller = UnobtrusiveJavascriptControllerStub.new end def rules @controller.js_behaviours end def test_should_render_nothing_for_no_rules assert_equal '', behaviour_block([]) end def test_should_render_a_single_rule register_js_behaviour 'a:click', 'parp();' assert_equal %{Event.addBehavior({ "a:click": function(event) { parp(); } });}, behaviour_block(rules) end def test_should_render_multiple_rules register_js_behaviour 'a:click', 'parp();' register_js_behaviour 'div:click', 'boo();' register_js_behaviour '#thing:mouseover', 'wham(45);' assert_equal %{Event.addBehavior({ "a:click": function(event) { parp(); }, "div:click": function(event) { boo(); }, "#thing:mouseover": function(event) { wham(45); } });}, behaviour_block(rules) end end