OpenLayers OpenLayers

Changeset 7610

Show
Ignore:
Timestamp:
07/30/08 13:10:04 (4 months ago)
Author:
euzuro
Message:

fix broken register() on events r=tschaub (Closes #1502)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/openlayers/lib/OpenLayers/Events.js

    r7585 r7610  
    407407        this.object     = object; 
    408408        this.element    = element; 
    409         this.eventTypes = eventTypes; 
    410409        this.fallThrough = fallThrough; 
    411410        this.listeners  = {}; 
     
    419418        // if eventTypes is specified, create a listeners list for each  
    420419        // custom application event. 
    421         if (this.eventTypes != null) { 
    422             for (var i = 0; i < this.eventTypes.length; i++) { 
    423                 this.addEventType(this.eventTypes[i]); 
     420        this.eventTypes = []; 
     421        if (eventTypes != null) { 
     422            for (var i = 0; i < eventTypes.length; i++) { 
     423                this.addEventType(eventTypes[i]); 
    424424            } 
    425425        } 
     
    458458    addEventType: function(eventName) { 
    459459        if (!this.listeners[eventName]) { 
     460            this.eventTypes.push(eventName); 
    460461            this.listeners[eventName] = []; 
    461462        } 
     
    533534    register: function (type, obj, func) { 
    534535 
    535         if (func != null &&  
    536             ((this.eventTypes && OpenLayers.Util.indexOf(this.eventTypes, type) != -1) || 
    537             OpenLayers.Util.indexOf(this.BROWSER_EVENTS, type) != -1)) { 
     536        if ( (func != null) &&  
     537            (OpenLayers.Util.indexOf(this.eventTypes, type) != -1) ) { 
     538 
    538539            if (obj == null)  { 
    539540                obj = this.object; 
    540541            } 
    541542            var listeners = this.listeners[type]; 
    542             if (listeners != null) { 
    543                 listeners.push( {obj: obj, func: func} ); 
    544             } 
     543            listeners.push( {obj: obj, func: func} ); 
    545544        } 
    546545    }, 
  • trunk/openlayers/tests/Events.html

    r6724 r7610  
    1313        var browserTypes = OpenLayers.Events.prototype.BROWSER_EVENTS; 
    1414 
    15         var totalTests = 5 + eventTypes.length + browserTypes.length; 
     15        var totalTests = 4 + 2*eventTypes.length + 2*browserTypes.length; 
    1616 
    1717        t.plan( totalTests ); 
     
    2323        t.ok(events.object ==obj, " 'object' property correctly set"); 
    2424        t.ok(events.element == mapDiv, " 'element' property correctly set"); 
    25         t.ok(events.eventTypes == eventTypes, " 'eventTypes' property correctly set"); 
    2625 
    2726 
    2827        for (var i = 0; i < browserTypes.length; i++) { 
    29             t.ok( events.listeners[browserTypes[i]] instanceof Array,  
    30                   "browser event: " + browserTypes[i] + " correctly registered" ); 
     28            var type = browserTypes[i]; 
     29            t.ok( events.listeners[type] instanceof Array, "browser event: " + type + " correctly registered" ); 
     30            t.ok( OpenLayers.Util.indexOf(events.eventTypes, type) != -1, "browser type " + type + "' correctly added to eventTypes array"); 
    3131        } 
    3232        for (var i = 0; i < eventTypes.length; i++) { 
    33             t.ok( events.listeners[eventTypes[i]] instanceof Array,  
    34                   "custom event: " + eventTypes[i] + " correctly registered"); 
     33            var type = eventTypes[i]; 
     34            t.ok( events.listeners[type] instanceof Array, "custom event: " + type + " correctly registered"); 
     35            t.ok( OpenLayers.Util.indexOf(events.eventTypes, type) != -1, "eventType " + type + "' correctly added to eventTypes array"); 
    3536        } 
    3637 
     
    4041              "init of Events with null object/element/eventTypes still creates listeners array" ); 
    4142    } 
     43 
     44    function XXXtest_Events_register(t){ 
     45        t.plan(4); 
     46 
     47        var ev = { 
     48            'object': {}, 
     49            'listeners': { 
     50                'listenerA': {  
     51                    'push': function(options){ 
     52                                gObjA = options.obj; 
     53                                gFuncA = options.func; 
     54                            } 
     55                }, 
     56                'listenerB': {  
     57                    'push': function(options){ 
     58                                gObjB = options.obj; 
     59                                gFuncB = options.func; 
     60                            } 
     61                } 
     62            }, 
     63            'eventTypes': ['listenerA', 'listenerB'] 
     64        }; 
     65         
     66        var type = null; 
     67        var object = null; 
     68        var func = null; 
     69 
     70      //func null 
     71        gObjA = null; gFuncA = null; gObjB = null; gFuncB = null; 
     72        OpenLayers.Events.prototype.register.apply(ev, [type, object, func]); 
     73        t.ok((gObjA == null) && (gFuncA == null) &&  
     74             (gObjB == null) && (gFuncB == null), "no push called func null");  
     75         
     76      //valid func, type not in ev.eventTypes 
     77        func = function() {}; 
     78        gObjA = null; gFuncA = null; gObjB = null; gFuncB = null; 
     79        OpenLayers.Events.prototype.register.apply(ev, [type, object, func]); 
     80        t.ok((gObjA == null) && (gFuncA == null) &&  
     81             (gObjB == null) && (gFuncB == null), "no push called func null");  
     82 
     83      //valid func, type in ev.eventTypes, null obj 
     84        type = 'listenerA'; 
     85        gObjA = null; gFuncA = null; gObjB = null; gFuncB = null; 
     86        OpenLayers.Events.prototype.register.apply(ev, [type, object, func]); 
     87        t.ok((gObjA == ev.object) && (gFuncA == func) &&  
     88             (gObjB == null) && (gFuncB == null), "push called on listenerA's mock array when type passed in 'listenerA'. events.object taken since obj is null.");  
     89         
     90      //valid func, type in ev.eventTypes, valid obj 
     91        type = 'listenerB'; 
     92        object = {}; 
     93        gObjA = null; gFuncA = null; gObjB = null; gFuncB = null; 
     94        OpenLayers.Events.prototype.register.apply(ev, [type, object, func]); 
     95        t.ok((gObjA == null) && (gFuncA == null) &&  
     96             (gObjB == object) && (gFuncB == func), "push called on listenerB's mock array when type passed in 'listenerB'.");  
     97         
     98    } 
    4299 
    43100    function test_Events_register_unregister(t) { 
     
    356413    function test_Events_addEventType(t) { 
    357414 
    358         t.plan( 6 ); 
     415        t.plan( 8 ); 
    359416  
    360417        var mapDiv = OpenLayers.Util.getElement('map'); 
     
    370427        var newEventType = "onFoo"; 
    371428        t.ok( events.listeners[newEventType] == null, "event type not yet registered has null entry in listeners array"); 
     429        t.ok( OpenLayers.Util.indexOf(events.eventTypes, newEventType) == -1, "event type not yet registered not in eventTypes array"); 
    372430 
    373431        events.addEventType(newEventType); 
    374432        t.eq( events.listeners[newEventType].length, 0, "event type passed to addEventType correctly set up" ); 
     433        t.ok( OpenLayers.Util.indexOf(events.eventTypes, newEventType) != -1, "event type passed to addEventType in eventTypes array"); 
    375434         
    376435        var func = function () {}; 
  • trunk/openlayers/tests/Layer/Grid.html

    r6724 r7610  
    2424 
    2525    function test_Layer_Grid_constructor (t) { 
    26         t.plan( 5 ); 
     26        t.plan( 8 ); 
    2727                        
    2828        layer = new OpenLayers.Layer.Grid(name, url, params, null); 
     
    3232        t.eq( layer.numLoadingTiles, 0, "numLoadingTiles starts at 0"); 
    3333        t.ok( layer.events.listeners["tileloaded"] != null, "'tileloaded' event added to layer's event types"); 
    34          
     34        t.ok( OpenLayers.Util.indexOf(layer.events.eventTypes, 'tileloaded') != -1 ,"'tileloaded' event added to layer's event types"); 
     35 
     36        //regression testing for #1502 
     37        t.ok( layer.events.listeners['tileloaded'].length == 0, "no listeners for tileloaded preregister");         
     38 
     39        var obj = {}; 
     40        var func = function() {}; 
     41        layer.events.register('tileloaded', obj, func);         
     42 
     43        t.ok( layer.events.listeners['tileloaded'].length == 1, "one listener for tileloaded after register");         
    3544    } 
    3645