diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /dom/tests/mochitest/ajax/prototype/test/unit/event_test.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | dom/tests/mochitest/ajax/prototype/test/unit/event_test.js | 286 |
1 files changed, 286 insertions, 0 deletions
diff --git a/dom/tests/mochitest/ajax/prototype/test/unit/event_test.js b/dom/tests/mochitest/ajax/prototype/test/unit/event_test.js new file mode 100644 index 0000000000..ae10a77a7f --- /dev/null +++ b/dom/tests/mochitest/ajax/prototype/test/unit/event_test.js @@ -0,0 +1,286 @@ +var documentLoaded = document.loaded; + +new Test.Unit.Runner({ + + // test firing an event and observing it on the element it's fired from + testCustomEventFiring: function() { + var span = $("span"), fired = false, observer = function(event) { + this.assertEqual(span, event.element()); + this.assertEqual(1, event.memo.index); + fired = true; + }.bind(this); + + span.observe("test:somethingHappened", observer); + span.fire("test:somethingHappened", { index: 1 }); + this.assert(fired); + + fired = false; + span.fire("test:somethingElseHappened"); + this.assert(!fired); + + span.stopObserving("test:somethingHappened", observer); + span.fire("test:somethingHappened"); + this.assert(!fired); + }, + + // test firing an event and observing it on a containing element + testCustomEventBubbling: function() { + var span = $("span"), outer = $("outer"), fired = false, observer = function(event) { + this.assertEqual(span, event.element()); + fired = true; + }.bind(this); + + outer.observe("test:somethingHappened", observer); + span.fire("test:somethingHappened"); + this.assert(fired); + + fired = false; + span.fire("test:somethingElseHappened"); + this.assert(!fired); + + outer.stopObserving("test:somethingHappened", observer); + span.fire("test:somethingHappened"); + this.assert(!fired); + }, + + testCustomEventCanceling: function() { + var span = $("span"), outer = $("outer"), inner = $("inner"); + var fired = false, stopped = false; + + function outerObserver(event) { + fired = span == event.element(); + } + + function innerObserver(event) { + event.stop(); + stopped = true; + } + + inner.observe("test:somethingHappened", innerObserver); + outer.observe("test:somethingHappened", outerObserver); + span.fire("test:somethingHappened"); + this.assert(stopped); + this.assert(!fired); + + fired = stopped = false; + inner.stopObserving("test:somethingHappened", innerObserver); + span.fire("test:somethingHappened"); + this.assert(!stopped); + this.assert(fired); + + outer.stopObserving("test:somethingHappened", outerObserver); + }, + + testEventObjectIsExtended: function() { + var span = $("span"), event, observedEvent, observer = function(e) { observedEvent = e }; + span.observe("test:somethingHappened", observer); + event = span.fire("test:somethingHappened"); + this.assertEqual(event, observedEvent); + this.assertEqual(Event.Methods.stop.methodize(), event.stop); + span.stopObserving("test:somethingHappened", observer); + + event = span.fire("test:somethingHappenedButNoOneIsListening"); + this.assertEqual(Event.Methods.stop.methodize(), event.stop); + }, + + testEventObserversAreBoundToTheObservedElement: function() { + var span = $("span"), target, observer = function() { target = this }; + + span.observe("test:somethingHappened", observer); + span.fire("test:somethingHappened"); + span.stopObserving("test:somethingHappened", observer); + this.assertEqual(span, target); + target = null; + + var outer = $("outer"); + outer.observe("test:somethingHappened", observer); + span.fire("test:somethingHappened"); + outer.stopObserving("test:somethingHappened", observer); + this.assertEqual(outer, target); + }, + + testMultipleCustomEventObserversWithTheSameHandler: function() { + var span = $("span"), count = 0, observer = function() { count++ }; + + span.observe("test:somethingHappened", observer); + span.observe("test:somethingElseHappened", observer); + span.fire("test:somethingHappened"); + this.assertEqual(1, count); + span.fire("test:somethingElseHappened"); + this.assertEqual(2, count); + span.stopObserving("test:somethingHappened", observer); + span.stopObserving("test:somethingElseHappened", observer); + }, + + testStopObservingWithoutArguments: function() { + var span = $("span"), count = 0, observer = function() { count++ }; + + span.observe("test:somethingHappened", observer); + span.observe("test:somethingElseHappened", observer); + span.stopObserving(); + span.fire("test:somethingHappened"); + this.assertEqual(0, count); + span.fire("test:somethingElseHappened"); + this.assertEqual(0, count); + + this.assertEqual(window, Event.stopObserving(window)); + + // test element with no observers + this.assertNothingRaised(function() { $(document.body).stopObserving() }); + }, + + testStopObservingWithoutHandlerArgument: function() { + var span = $("span"), count = 0, observer = function() { count++ }; + + span.observe("test:somethingHappened", observer); + span.observe("test:somethingElseHappened", observer); + span.stopObserving("test:somethingHappened"); + span.fire("test:somethingHappened"); + this.assertEqual(0, count); + span.fire("test:somethingElseHappened"); + this.assertEqual(1, count); + span.stopObserving("test:somethingElseHappened"); + span.fire("test:somethingElseHappened"); + this.assertEqual(1, count); + + // test element with no observers + this.assertNothingRaised(function() { $(document.body).stopObserving("test:somethingHappened") }); + }, + + testStopObservingRemovesHandlerFromCache: function() { + var span = $("span"), observer = function() { }, eventID; + + span.observe("test:somethingHappened", observer); + eventID = span._prototypeEventID; + + this.assert(Event.cache[eventID]); + this.assert(Object.isArray(Event.cache[eventID]["test:somethingHappened"])); + this.assertEqual(1, Event.cache[eventID]["test:somethingHappened"].length); + + span.stopObserving("test:somethingHappened", observer); + this.assert(Event.cache[eventID]); + this.assert(Object.isArray(Event.cache[eventID]["test:somethingHappened"])); + this.assertEqual(0, Event.cache[eventID]["test:somethingHappened"].length); + }, + + testObserveAndStopObservingAreChainable: function() { + var span = $("span"), observer = function() { }; + + this.assertEqual(span, span.observe("test:somethingHappened", observer)); + this.assertEqual(span, span.stopObserving("test:somethingHappened", observer)); + + span.observe("test:somethingHappened", observer); + this.assertEqual(span, span.stopObserving("test:somethingHappened")); + + span.observe("test:somethingHappened", observer); + this.assertEqual(span, span.stopObserving()); + this.assertEqual(span, span.stopObserving()); // assert it again, after there are no observers + + span.observe("test:somethingHappened", observer); + this.assertEqual(span, span.observe("test:somethingHappened", observer)); // try to reuse the same observer + span.stopObserving(); + }, + + testObserveInsideHandlers: function() { + var fired = false, observer = function(event) { + fired = true; + }; + + document.observe("test:somethingHappened", function() { + document.observe("test:somethingHappened", observer); + }); + + document.fire("test:somethingHappened"); + this.assert(!fired); + + document.fire("test:somethingHappened"); + this.assert(fired); + document.stopObserving("test:somethingHappened"); + }, + + testStopObservingInsideHandlers: function() { + var fired = false, observer = function(event) { + fired = true; + }; + + document.observe("test:somethingHappened", observer); + document.observe("test:somethingHappened", function() { + document.stopObserving("test:somethingHappened", observer); + }); + + document.fire("test:somethingHappened"); + this.assert(fired); + + fired = false; + document.fire("test:somethingHappened"); + document.stopObserving("test:somethingHappened"); + this.assert(!fired); + }, + + testDocumentLoaded: function() { + this.assert(!documentLoaded); + this.assert(document.loaded); + }, + + testDocumentContentLoadedEventFiresBeforeWindowLoad: function() { + this.assert(eventResults.contentLoaded, "contentLoaded"); + this.assert(eventResults.contentLoaded.endOfDocument, "contentLoaded.endOfDocument"); + this.assert(!eventResults.contentLoaded.windowLoad, "!contentLoaded.windowLoad"); + this.assert(eventResults.windowLoad, "windowLoad"); + this.assert(eventResults.windowLoad.endOfDocument, "windowLoad.endOfDocument"); + this.assert(eventResults.windowLoad.contentLoaded, "windowLoad.contentLoaded"); + }, + + testEventStopped: function() { + var span = $("span"), event; + + span.observe("test:somethingHappened", function() { }); + event = span.fire("test:somethingHappened"); + this.assert(!event.stopped, "event.stopped should be false with an empty observer"); + span.stopObserving("test:somethingHappened"); + + span.observe("test:somethingHappened", function(e) { e.stop() }); + event = span.fire("test:somethingHappened"); + this.assert(event.stopped, "event.stopped should be true for an observer that calls stop"); + span.stopObserving("test:somethingHappened"); + }, + + testEventFindElement: function() { + var span = $("span"), event; + event = span.fire("test:somethingHappened"); + this.assertElementMatches(event.findElement(), 'span#span'); + this.assertElementMatches(event.findElement('span'), 'span#span'); + this.assertElementMatches(event.findElement('p'), 'p#inner'); + this.assertEqual(null, event.findElement('div.does_not_exist')); + this.assertElementMatches(event.findElement('.does_not_exist, span'), 'span#span'); + }, + + testEventIDDuplication: function() { + $('container').down().observe("test:somethingHappened", Prototype.emptyFunction); + $('container').innerHTML += $('container').innerHTML; + this.assertUndefined($('container').down(1)._prototypeEventID); + }, + + testHandlerCallsPreserveOrder: function() { + var span = $("span"), order = [ ]; + span.observe("test:somethingHappened", function(e) { order.push('first') }); + span.observe("test:somethingHappened", function(e) { order.push('second') }); + span.fire("test:somethingHappened"); + this.assertEnumEqual(['first', 'second'], order); + span.stopObserving("test:somethingHappened"); + } +}); + +document.observe("dom:loaded", function(event) { + eventResults.contentLoaded = { + endOfDocument: eventResults.endOfDocument, + windowLoad: eventResults.windowLoad + }; +}); + +Event.observe(window, "load", function(event) { + eventResults.windowLoad = { + endOfDocument: eventResults.endOfDocument, + contentLoaded: eventResults.contentLoaded + }; +}); |