sku-pg
Version:
Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!
230 lines (194 loc) • 8.4 kB
HTML
<html>
<!--
Copyright 2006 The Closure Library Authors. All Rights Reserved.
Use of this source code is governed by an Apache 2.0 License.
See the COPYING file for details.
-->
<head>
<title>Closure Unit Tests - goog.events.EventHandler</title>
<script src="../base.js"></script>
<script>
goog.require('goog.events');
goog.require('goog.events.EventHandler');
goog.require('goog.events.EventTarget');
goog.require('goog.testing.jsunit');
</script>
</head>
<body>
<div id="a"></div>
<div id="b"></div>
<div id="c"></div>
<div id="d"></div>
<script>
var a = document.getElementById('a');
var b = document.getElementById('b');
var c = document.getElementById('c');
var d = document.getElementById('d');
function testEventHandlerClearsListeners() {
assertEquals('No event listeners should be registered at the start', 0,
goog.object.getCount(goog.events.listeners_));
function tmp() {}
goog.events.listen(a, 'click', tmp);
assertEquals('1 listener should be registered now', 1,
goog.object.getCount(goog.events.listeners_));
var eh = new goog.events.EventHandler();
eh.listen(a, 'click');
eh.listen(a, 'keypress');
eh.listen(b, 'mouseover');
eh.listen(c, 'mousedown');
eh.listen(d, 'click');
eh.listen(d, 'mousedown');
assertEquals('7 listeners should be registered now', 7,
goog.object.getCount(goog.events.listeners_));
eh.unlisten(d, 'mousedown');
assertEquals('6 listeners should be registered now', 6,
goog.object.getCount(goog.events.listeners_));
eh.dispose();
assertEquals('1 listener should be left', 1,
goog.object.getCount(goog.events.listeners_));
goog.events.unlisten(a, 'click', tmp);
assertEquals('No event listeners should be registered at the end', 0,
goog.object.getCount(goog.events.listeners_));
}
function testListenArray() {
var eh = new goog.events.EventHandler();
eh.listen(a, ['click', 'mousedown', 'mouseup']);
assertEquals('3 listeners should be registered', 3,
goog.object.getCount(goog.events.listeners_));
eh.unlisten(a, ['click', 'mousedown', 'mouseup']);
assertEquals('no listeners should be registered', 0,
goog.object.getCount(goog.events.listeners_));
eh.listen(a, ['click', 'mousedown', 'mouseup']);
assertEquals('3 listeners should be registered', 3,
goog.object.getCount(goog.events.listeners_));
eh.removeAll();
assertEquals('no listeners should be registered', 0,
goog.object.getCount(goog.events.listeners_));
}
function testListenOnceRemovesListenerWhenFired() {
var events = [];
assertEquals('No listeners registered yet', 0,
goog.object.getCount(goog.events.listeners_));
var target = new goog.events.EventTarget();
var eh = new goog.events.EventHandler();
eh.listenOnce(target, 'click', function(e) { events.push(e); });
assertEquals('1 listener should be registered', 1,
goog.object.getCount(goog.events.listeners_));
target.dispatchEvent('click');
assertEquals('One event should have been dispatched', 1, events.length);
assertEquals('no listeners should be registered', 0,
goog.object.getCount(goog.events.listeners_));
target.dispatchEvent('click');
assertEquals('No event should have been dispatched', 1, events.length);
}
function testListenOnceListenerIsCleanedUp() {
var events = [];
assertEquals('No listeners registered yet', 0,
goog.object.getCount(goog.events.listeners_));
var target = new goog.events.EventTarget();
var eh = new goog.events.EventHandler();
eh.listenOnce(target, 'click', function(e) { events.push(e); });
assertEquals('1 listener should be registered', 1,
goog.object.getCount(goog.events.listeners_));
eh.removeAll();
assertEquals('no listeners should be registered', 0,
goog.object.getCount(goog.events.listeners_));
target.dispatchEvent('click');
assertEquals('No event should have been dispatched', 0, events.length);
}
function testClearListenersWithListenOnceListenerRemoved() {
var events = [];
assertEquals('No listeners registered yet', 0,
goog.object.getCount(goog.events.listeners_));
var target = new goog.events.EventTarget();
var eh = new goog.events.EventHandler();
eh.listenOnce(target, 'click', function(e) { events.push(e); });
assertEquals('1 listener should be registered', 1,
goog.object.getCount(goog.events.listeners_));
target.dispatchEvent('click');
assertEquals('One event should have been dispatched', 1, events.length);
assertEquals('no listeners should be registered', 0,
goog.object.getCount(goog.events.listeners_));
eh.removeAll();
assertEquals('no listeners should be registered', 0,
goog.object.getCount(goog.events.listeners_));
target.dispatchEvent('click');
assertEquals('No event should have been dispatched', 1, events.length);
}
function testListenOnceArray() {
var events = [];
assertEquals('No listeners registered yet', 0,
goog.object.getCount(goog.events.listeners_));
var target = new goog.events.EventTarget();
var eh = new goog.events.EventHandler();
eh.listenOnce(target, ['click', 'mousedown', 'mouseup'],
function(e) { events.push(e); });
assertEquals('3 listeners should be registered', 3,
goog.object.getCount(goog.events.listeners_));
target.dispatchEvent('click');
assertEquals('1 event should have been dispatched', 1, events.length);
assertEquals('Should be a click event', 'click', events[0].type)
assertEquals('2 listeners should be registered', 2,
goog.object.getCount(goog.events.listeners_));
target.dispatchEvent('mouseup');
assertEquals('1 event should have been dispatched', 2, events.length);
assertEquals('Should be a click event', 'mouseup', events[1].type)
assertEquals('1 listeners should be registered', 1,
goog.object.getCount(goog.events.listeners_));
target.dispatchEvent('mousedown');
assertEquals('1 event should have been dispatched', 3, events.length);
assertEquals('Should be a click event', 'mousedown', events[2].type)
assertEquals('no listeners should be registered', 0,
goog.object.getCount(goog.events.listeners_));
target.dispatchEvent('click');
assertEquals('No events should have been dispatched', 3, events.length);
}
function testListenUnlistenWithObjectHandler() {
var events = [];
assertEquals('No listeners registered yet', 0,
goog.object.getCount(goog.events.listeners_));
var target = new goog.events.EventTarget();
var eh = new goog.events.EventHandler();
var handlerObj = {
handleEvent: function(e) {
events.push(e);
}
};
eh.listen(target, 'click', handlerObj);
assertEquals('1 listener should be registered', 1,
goog.object.getCount(goog.events.listeners_));
target.dispatchEvent('click');
assertEquals('1 listener should be registered', 1,
goog.object.getCount(goog.events.listeners_));
assertEquals('One event should have been dispatched', 1, events.length);
eh.unlisten(target, 'click', handlerObj);
assertEquals('no listeners should be registered', 0,
goog.object.getCount(goog.events.listeners_));
target.dispatchEvent('click');
assertEquals('No event should have been dispatched', 1, events.length);
}
function testListenOnceWithObjectHandler() {
var events = [];
assertEquals('No listeners registered yet', 0,
goog.object.getCount(goog.events.listeners_));
var target = new goog.events.EventTarget();
var eh = new goog.events.EventHandler();
var handlerObj = {
handleEvent: function(e) {
events.push(e);
}
};
eh.listenOnce(target, 'click', handlerObj);
assertEquals('1 listener should be registered', 1,
goog.object.getCount(goog.events.listeners_));
target.dispatchEvent('click');
assertEquals('One event should have been dispatched', 1, events.length);
assertEquals('no listeners should be registered', 0,
goog.object.getCount(goog.events.listeners_));
target.dispatchEvent('click');
assertEquals('No event should have been dispatched', 1, events.length);
}
</script>
</body>
</html>