<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=468176 --> <window title="Test for Bug 468176" id="test_bug468176_xul" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <body id="body" xmlns="http://www.w3.org/1999/xhtml"> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=468176">Mozilla Bug 468176</a> <xul:hbox id="b1" value="foo"/> <xul:hbox id="o1"> <xul:observes id="inner" element="b1" attribute="*"/> </xul:hbox> <pre id="test"> <script class="testbody" type="text/javascript"> <![CDATA[ SimpleTest.waitForExplicitFinish(); var broadcastCount = 0; function b_listener(evt) { ++broadcastCount; } function do_test() { var b1 = document.getElementById("b1"); var o1 = document.getElementById("o1"); var inner = document.getElementById("inner"); is(o1.getAttribute("value"), b1.getAttribute("value"), "Wrong value (1)"); inner.addEventListener("broadcast", b_listener, true); b1.setAttribute("value", "bar"); is(o1.getAttribute("value"), b1.getAttribute("value"), "Wrong value (2)"); is(broadcastCount, 1, "Wrong value (3)"); b1.removeAttribute("value"); is(o1.hasAttribute("value"), b1.hasAttribute("value"), "Wrong value (4)"); is(broadcastCount, 2, "Wrong value (5)"); o1.setAttribute("value", "foo"); isnot(o1.getAttribute("value"), b1.getAttribute("value"), "Wrong value (6)"); is(broadcastCount, 2, "Wrong value (7)"); b1.setAttribute("value", "foobar"); is(o1.getAttribute("value"), b1.getAttribute("value"), "Wrong value (8)"); is(broadcastCount, 3, "Wrong value (9)"); b1.removeAttribute("value"); is(o1.getAttribute("value"), b1.getAttribute("value"), "Wrong value (10)"); is(broadcastCount, 4, "Wrong value (11)"); b1.removeAttribute("value"); is(o1.getAttribute("value"), b1.getAttribute("value"), "Wrong value (12)"); is(broadcastCount, 4, "Wrong value (13)"); o1.setAttribute("value", "bar"); b1.setAttribute("value", "bar"); // This should still dispatch 'broadcast' is(o1.getAttribute("value"), b1.getAttribute("value"), "Wrong value (14)"); is(broadcastCount, 5, "Wrong value (15)"); //After removing listener, changes to broadcaster shouldn't have any effect. o1.parentNode.removeChild(o1); b1.setAttribute("value", "foo"); isnot(o1.getAttribute("value"), b1.getAttribute("value"), "Wrong value (16)"); is(broadcastCount, 5, "Wrong value (17)"); SimpleTest.finish(); } addLoadEvent(do_test); ]]> </script> </pre> </body> </window>