blob: 75a1894def094fc18b4dfe8d54c49de38bbaf7b8 [file] [log] [blame]
<!doctype html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function test()
{
const KaboomEvent = "kaboom";
var emitter = new WI.Object();
var context = new WI.Object();
var data = [1, 2, 3];
function kaboomCallback(event) {
InspectorTest.assert(this === context, "Callback invoked with wrong |this| binding.");
InspectorTest.assert(event.target === emitter, "Callback invoked with wrong event emitter.");
InspectorTest.assert(event.data === data, "Callback invoked with wrong event data.");
InspectorTest.log("Invoked callback for kaboom event.");
}
// Test for multiple firings of the listener.
var listener = new WI.EventListener(context);
InspectorTest.assert(!emitter.hasEventListeners(KaboomEvent), "Emitter should not have any listeners.");
emitter.dispatchEventToListeners(KaboomEvent, data); // Should not fire anything.
InspectorTest.log("Connecting the listener.");
listener.connect(emitter, KaboomEvent, kaboomCallback);
InspectorTest.assert(emitter.hasEventListeners(KaboomEvent), "Emitter should have a listener.");
emitter.dispatchEventToListeners(KaboomEvent, data); // Should fire.
emitter.dispatchEventToListeners(KaboomEvent, data); // Should fire.
InspectorTest.log("Disconnecting the listener.");
listener.disconnect();
emitter.dispatchEventToListeners(KaboomEvent, data); // Should not fire anything.
InspectorTest.assert(!emitter.hasEventListeners(KaboomEvent), "Emitter should not have any listeners.");
// Test reconnection.
InspectorTest.log("Connecting the listener.");
listener.connect(emitter, KaboomEvent, kaboomCallback);
emitter.dispatchEventToListeners(KaboomEvent, data); // Should fire.
InspectorTest.log("Disconnecting the listener.");
listener.disconnect();
// Test unused listener.
InspectorTest.log("Connecting the listener.");
listener.connect(emitter, KaboomEvent, kaboomCallback);
InspectorTest.log("Disconnecting the listener.");
listener.disconnect();
// Test for single firing of the listener.
var singleListener = new WI.EventListener(context, true);
InspectorTest.assert(!emitter.hasEventListeners(KaboomEvent), "Emitter should not have any listeners.");
emitter.dispatchEventToListeners(KaboomEvent, data); // Should not fire anything.
InspectorTest.log("Connecting the single-fire listener.");
singleListener.connect(emitter, KaboomEvent, kaboomCallback);
InspectorTest.assert(emitter.hasEventListeners(KaboomEvent), "Emitter should have a listener.");
emitter.dispatchEventToListeners(KaboomEvent, data); // Should fire.
InspectorTest.assert(!emitter.hasEventListeners(KaboomEvent), "Emitter should not have any listeners.");
emitter.dispatchEventToListeners(KaboomEvent, data); // Should not fire.
InspectorTest.log("Disconnecting the single-fire listener.");
singleListener.disconnect(); // Should cause an error.
emitter.dispatchEventToListeners(KaboomEvent, data); // Should not fire.
// Test for various error cases and abuse.
var badListener = new WI.EventListener(context);
badListener.connect(data, data, data); // Should complain about non-callable callback.
badListener.connect(null, KaboomEvent, kaboomCallback); // Should complain about non-callable callback.
badListener.connect(emitter, KaboomEvent, null); // Should complain about non-callable callback.
badListener.connect(emitter, null, kaboomCallback); // Should complain about null event.
var badListener2 = new WI.EventListener(context);
badListener2.disconnect(); // Should complain about already disconnected.
badListener2.connect(emitter, KaboomEvent, kaboomCallback);
badListener2.connect(emitter, KaboomEvent, kaboomCallback); // Should complain about already connected.
emitter.dispatchEventToListeners(KaboomEvent, data); // Should fire.
badListener2.connect(emitter, KaboomEvent, kaboomCallback); // Should complain about already connected.
badListener2.disconnect();
badListener2.disconnect(); // Should complain about already disconnected.
InspectorTest.completeTest();
}
</script>
</head>
<body onload="runTest()">
<p>Testing basic functionality of WI.EventListener.</p>
</body>
</html>