fix broken register() on events r=tschaub (Closes #1502)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@7610 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -406,7 +406,6 @@ OpenLayers.Events = OpenLayers.Class({
|
||||
initialize: function (object, element, eventTypes, fallThrough) {
|
||||
this.object = object;
|
||||
this.element = element;
|
||||
this.eventTypes = eventTypes;
|
||||
this.fallThrough = fallThrough;
|
||||
this.listeners = {};
|
||||
|
||||
@@ -418,9 +417,10 @@ OpenLayers.Events = OpenLayers.Class({
|
||||
|
||||
// if eventTypes is specified, create a listeners list for each
|
||||
// custom application event.
|
||||
if (this.eventTypes != null) {
|
||||
for (var i = 0; i < this.eventTypes.length; i++) {
|
||||
this.addEventType(this.eventTypes[i]);
|
||||
this.eventTypes = [];
|
||||
if (eventTypes != null) {
|
||||
for (var i = 0; i < eventTypes.length; i++) {
|
||||
this.addEventType(eventTypes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -457,6 +457,7 @@ OpenLayers.Events = OpenLayers.Class({
|
||||
*/
|
||||
addEventType: function(eventName) {
|
||||
if (!this.listeners[eventName]) {
|
||||
this.eventTypes.push(eventName);
|
||||
this.listeners[eventName] = [];
|
||||
}
|
||||
},
|
||||
@@ -532,16 +533,14 @@ OpenLayers.Events = OpenLayers.Class({
|
||||
*/
|
||||
register: function (type, obj, func) {
|
||||
|
||||
if (func != null &&
|
||||
((this.eventTypes && OpenLayers.Util.indexOf(this.eventTypes, type) != -1) ||
|
||||
OpenLayers.Util.indexOf(this.BROWSER_EVENTS, type) != -1)) {
|
||||
if ( (func != null) &&
|
||||
(OpenLayers.Util.indexOf(this.eventTypes, type) != -1) ) {
|
||||
|
||||
if (obj == null) {
|
||||
obj = this.object;
|
||||
}
|
||||
var listeners = this.listeners[type];
|
||||
if (listeners != null) {
|
||||
listeners.push( {obj: obj, func: func} );
|
||||
}
|
||||
listeners.push( {obj: obj, func: func} );
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
var eventTypes = ["doThingA", "doThingB", "doThingC"];
|
||||
var browserTypes = OpenLayers.Events.prototype.BROWSER_EVENTS;
|
||||
|
||||
var totalTests = 5 + eventTypes.length + browserTypes.length;
|
||||
var totalTests = 4 + 2*eventTypes.length + 2*browserTypes.length;
|
||||
|
||||
t.plan( totalTests );
|
||||
|
||||
@@ -22,16 +22,17 @@
|
||||
|
||||
t.ok(events.object ==obj, " 'object' property correctly set");
|
||||
t.ok(events.element == mapDiv, " 'element' property correctly set");
|
||||
t.ok(events.eventTypes == eventTypes, " 'eventTypes' property correctly set");
|
||||
|
||||
|
||||
for (var i = 0; i < browserTypes.length; i++) {
|
||||
t.ok( events.listeners[browserTypes[i]] instanceof Array,
|
||||
"browser event: " + browserTypes[i] + " correctly registered" );
|
||||
var type = browserTypes[i];
|
||||
t.ok( events.listeners[type] instanceof Array, "browser event: " + type + " correctly registered" );
|
||||
t.ok( OpenLayers.Util.indexOf(events.eventTypes, type) != -1, "browser type " + type + "' correctly added to eventTypes array");
|
||||
}
|
||||
for (var i = 0; i < eventTypes.length; i++) {
|
||||
t.ok( events.listeners[eventTypes[i]] instanceof Array,
|
||||
"custom event: " + eventTypes[i] + " correctly registered");
|
||||
var type = eventTypes[i];
|
||||
t.ok( events.listeners[type] instanceof Array, "custom event: " + type + " correctly registered");
|
||||
t.ok( OpenLayers.Util.indexOf(events.eventTypes, type) != -1, "eventType " + type + "' correctly added to eventTypes array");
|
||||
}
|
||||
|
||||
// default/nulls
|
||||
@@ -40,6 +41,62 @@
|
||||
"init of Events with null object/element/eventTypes still creates listeners array" );
|
||||
}
|
||||
|
||||
function XXXtest_Events_register(t){
|
||||
t.plan(4);
|
||||
|
||||
var ev = {
|
||||
'object': {},
|
||||
'listeners': {
|
||||
'listenerA': {
|
||||
'push': function(options){
|
||||
gObjA = options.obj;
|
||||
gFuncA = options.func;
|
||||
}
|
||||
},
|
||||
'listenerB': {
|
||||
'push': function(options){
|
||||
gObjB = options.obj;
|
||||
gFuncB = options.func;
|
||||
}
|
||||
}
|
||||
},
|
||||
'eventTypes': ['listenerA', 'listenerB']
|
||||
};
|
||||
|
||||
var type = null;
|
||||
var object = null;
|
||||
var func = null;
|
||||
|
||||
//func null
|
||||
gObjA = null; gFuncA = null; gObjB = null; gFuncB = null;
|
||||
OpenLayers.Events.prototype.register.apply(ev, [type, object, func]);
|
||||
t.ok((gObjA == null) && (gFuncA == null) &&
|
||||
(gObjB == null) && (gFuncB == null), "no push called func null");
|
||||
|
||||
//valid func, type not in ev.eventTypes
|
||||
func = function() {};
|
||||
gObjA = null; gFuncA = null; gObjB = null; gFuncB = null;
|
||||
OpenLayers.Events.prototype.register.apply(ev, [type, object, func]);
|
||||
t.ok((gObjA == null) && (gFuncA == null) &&
|
||||
(gObjB == null) && (gFuncB == null), "no push called func null");
|
||||
|
||||
//valid func, type in ev.eventTypes, null obj
|
||||
type = 'listenerA';
|
||||
gObjA = null; gFuncA = null; gObjB = null; gFuncB = null;
|
||||
OpenLayers.Events.prototype.register.apply(ev, [type, object, func]);
|
||||
t.ok((gObjA == ev.object) && (gFuncA == func) &&
|
||||
(gObjB == null) && (gFuncB == null), "push called on listenerA's mock array when type passed in 'listenerA'. events.object taken since obj is null.");
|
||||
|
||||
//valid func, type in ev.eventTypes, valid obj
|
||||
type = 'listenerB';
|
||||
object = {};
|
||||
gObjA = null; gFuncA = null; gObjB = null; gFuncB = null;
|
||||
OpenLayers.Events.prototype.register.apply(ev, [type, object, func]);
|
||||
t.ok((gObjA == null) && (gFuncA == null) &&
|
||||
(gObjB == object) && (gFuncB == func), "push called on listenerB's mock array when type passed in 'listenerB'.");
|
||||
|
||||
}
|
||||
|
||||
function test_Events_register_unregister(t) {
|
||||
|
||||
t.plan( 18 );
|
||||
@@ -355,7 +412,7 @@
|
||||
|
||||
function test_Events_addEventType(t) {
|
||||
|
||||
t.plan( 6 );
|
||||
t.plan( 8 );
|
||||
|
||||
var mapDiv = OpenLayers.Util.getElement('map');
|
||||
var obj = {result: 0};
|
||||
@@ -369,9 +426,11 @@
|
||||
|
||||
var newEventType = "onFoo";
|
||||
t.ok( events.listeners[newEventType] == null, "event type not yet registered has null entry in listeners array");
|
||||
t.ok( OpenLayers.Util.indexOf(events.eventTypes, newEventType) == -1, "event type not yet registered not in eventTypes array");
|
||||
|
||||
events.addEventType(newEventType);
|
||||
t.eq( events.listeners[newEventType].length, 0, "event type passed to addEventType correctly set up" );
|
||||
t.ok( OpenLayers.Util.indexOf(events.eventTypes, newEventType) != -1, "event type passed to addEventType in eventTypes array");
|
||||
|
||||
var func = function () {};
|
||||
events.register( "doThingA", obj, func );
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
|
||||
function test_Layer_Grid_constructor (t) {
|
||||
t.plan( 5 );
|
||||
t.plan( 8 );
|
||||
|
||||
layer = new OpenLayers.Layer.Grid(name, url, params, null);
|
||||
t.ok( layer instanceof OpenLayers.Layer.Grid, "returns OpenLayers.Layer.Grid object" );
|
||||
@@ -31,7 +31,16 @@
|
||||
t.eq( layer.ratio, 1.5, "ratio default is 1.5");
|
||||
t.eq( layer.numLoadingTiles, 0, "numLoadingTiles starts at 0");
|
||||
t.ok( layer.events.listeners["tileloaded"] != null, "'tileloaded' event added to layer's event types");
|
||||
|
||||
t.ok( OpenLayers.Util.indexOf(layer.events.eventTypes, 'tileloaded') != -1 ,"'tileloaded' event added to layer's event types");
|
||||
|
||||
//regression testing for #1502
|
||||
t.ok( layer.events.listeners['tileloaded'].length == 0, "no listeners for tileloaded preregister");
|
||||
|
||||
var obj = {};
|
||||
var func = function() {};
|
||||
layer.events.register('tileloaded', obj, func);
|
||||
|
||||
t.ok( layer.events.listeners['tileloaded'].length == 1, "one listener for tileloaded after register");
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user