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) {
|
initialize: function (object, element, eventTypes, fallThrough) {
|
||||||
this.object = object;
|
this.object = object;
|
||||||
this.element = element;
|
this.element = element;
|
||||||
this.eventTypes = eventTypes;
|
|
||||||
this.fallThrough = fallThrough;
|
this.fallThrough = fallThrough;
|
||||||
this.listeners = {};
|
this.listeners = {};
|
||||||
|
|
||||||
@@ -418,9 +417,10 @@ OpenLayers.Events = OpenLayers.Class({
|
|||||||
|
|
||||||
// if eventTypes is specified, create a listeners list for each
|
// if eventTypes is specified, create a listeners list for each
|
||||||
// custom application event.
|
// custom application event.
|
||||||
if (this.eventTypes != null) {
|
this.eventTypes = [];
|
||||||
for (var i = 0; i < this.eventTypes.length; i++) {
|
if (eventTypes != null) {
|
||||||
this.addEventType(this.eventTypes[i]);
|
for (var i = 0; i < eventTypes.length; i++) {
|
||||||
|
this.addEventType(eventTypes[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -457,6 +457,7 @@ OpenLayers.Events = OpenLayers.Class({
|
|||||||
*/
|
*/
|
||||||
addEventType: function(eventName) {
|
addEventType: function(eventName) {
|
||||||
if (!this.listeners[eventName]) {
|
if (!this.listeners[eventName]) {
|
||||||
|
this.eventTypes.push(eventName);
|
||||||
this.listeners[eventName] = [];
|
this.listeners[eventName] = [];
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -532,16 +533,14 @@ OpenLayers.Events = OpenLayers.Class({
|
|||||||
*/
|
*/
|
||||||
register: function (type, obj, func) {
|
register: function (type, obj, func) {
|
||||||
|
|
||||||
if (func != null &&
|
if ( (func != null) &&
|
||||||
((this.eventTypes && OpenLayers.Util.indexOf(this.eventTypes, type) != -1) ||
|
(OpenLayers.Util.indexOf(this.eventTypes, type) != -1) ) {
|
||||||
OpenLayers.Util.indexOf(this.BROWSER_EVENTS, type) != -1)) {
|
|
||||||
if (obj == null) {
|
if (obj == null) {
|
||||||
obj = this.object;
|
obj = this.object;
|
||||||
}
|
}
|
||||||
var listeners = this.listeners[type];
|
var listeners = this.listeners[type];
|
||||||
if (listeners != null) {
|
listeners.push( {obj: obj, func: func} );
|
||||||
listeners.push( {obj: obj, func: func} );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
+66
-7
@@ -12,7 +12,7 @@
|
|||||||
var eventTypes = ["doThingA", "doThingB", "doThingC"];
|
var eventTypes = ["doThingA", "doThingB", "doThingC"];
|
||||||
var browserTypes = OpenLayers.Events.prototype.BROWSER_EVENTS;
|
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 );
|
t.plan( totalTests );
|
||||||
|
|
||||||
@@ -22,16 +22,17 @@
|
|||||||
|
|
||||||
t.ok(events.object ==obj, " 'object' property correctly set");
|
t.ok(events.object ==obj, " 'object' property correctly set");
|
||||||
t.ok(events.element == mapDiv, " 'element' 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++) {
|
for (var i = 0; i < browserTypes.length; i++) {
|
||||||
t.ok( events.listeners[browserTypes[i]] instanceof Array,
|
var type = browserTypes[i];
|
||||||
"browser event: " + browserTypes[i] + " correctly registered" );
|
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++) {
|
for (var i = 0; i < eventTypes.length; i++) {
|
||||||
t.ok( events.listeners[eventTypes[i]] instanceof Array,
|
var type = eventTypes[i];
|
||||||
"custom event: " + eventTypes[i] + " correctly registered");
|
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
|
// default/nulls
|
||||||
@@ -40,6 +41,62 @@
|
|||||||
"init of Events with null object/element/eventTypes still creates listeners array" );
|
"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) {
|
function test_Events_register_unregister(t) {
|
||||||
|
|
||||||
t.plan( 18 );
|
t.plan( 18 );
|
||||||
@@ -355,7 +412,7 @@
|
|||||||
|
|
||||||
function test_Events_addEventType(t) {
|
function test_Events_addEventType(t) {
|
||||||
|
|
||||||
t.plan( 6 );
|
t.plan( 8 );
|
||||||
|
|
||||||
var mapDiv = OpenLayers.Util.getElement('map');
|
var mapDiv = OpenLayers.Util.getElement('map');
|
||||||
var obj = {result: 0};
|
var obj = {result: 0};
|
||||||
@@ -369,9 +426,11 @@
|
|||||||
|
|
||||||
var newEventType = "onFoo";
|
var newEventType = "onFoo";
|
||||||
t.ok( events.listeners[newEventType] == null, "event type not yet registered has null entry in listeners array");
|
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);
|
events.addEventType(newEventType);
|
||||||
t.eq( events.listeners[newEventType].length, 0, "event type passed to addEventType correctly set up" );
|
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 () {};
|
var func = function () {};
|
||||||
events.register( "doThingA", obj, func );
|
events.register( "doThingA", obj, func );
|
||||||
|
|||||||
+10
-1
@@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
|
|
||||||
function test_Layer_Grid_constructor (t) {
|
function test_Layer_Grid_constructor (t) {
|
||||||
t.plan( 5 );
|
t.plan( 8 );
|
||||||
|
|
||||||
layer = new OpenLayers.Layer.Grid(name, url, params, null);
|
layer = new OpenLayers.Layer.Grid(name, url, params, null);
|
||||||
t.ok( layer instanceof OpenLayers.Layer.Grid, "returns OpenLayers.Layer.Grid object" );
|
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.ratio, 1.5, "ratio default is 1.5");
|
||||||
t.eq( layer.numLoadingTiles, 0, "numLoadingTiles starts at 0");
|
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( 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