Project

General

Profile

1
<html>
2
<head>
3
  <script src="../lib/OpenLayers.js"></script>
4
  <script type="text/javascript"><!--
5
    var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
6
    var map; 
7
    var a;
8
    
9
    function test_01_Events_constructor (t) {
10
        var mapDiv = $('map');
11
        var obj = {result: 0};
12
        var eventTypes = ["doThingA", "doThingB", "doThingC"];
13
        var browserTypes = OpenLayers.Events.prototype.BROWSER_EVENTS;
14

    
15
        var totalTests = 5 + eventTypes.length + browserTypes.length;
16

    
17
        t.plan( totalTests );
18

    
19
        events = new OpenLayers.Events(obj, mapDiv, eventTypes);
20

    
21
        t.ok( events instanceof OpenLayers.Events, "new OpenLayers.Control returns object" );
22

    
23
        t.ok(events.object ==obj, " 'object' property correctly set");
24
        t.ok(events.element == mapDiv, " 'element' property correctly set");
25
        t.ok(events.eventTypes == eventTypes, " 'eventTypes' property correctly set");
26

    
27

    
28
        for (var i = 0; i < browserTypes.length; i++) {
29
            t.ok( events.listeners[browserTypes[i]] instanceof Array, 
30
                  "browser event: " + browserTypes[i] + " correctly registered" );
31
        }
32
        for (var i = 0; i < eventTypes.length; i++) {
33
            t.ok( events.listeners[eventTypes[i]] instanceof Array, 
34
                  "custom event: " + eventTypes[i] + " correctly registered");
35
        }
36

    
37
        // default/nulls
38
        events = new OpenLayers.Events(null, null, null);
39
        t.ok( events.listeners != null,
40
              "init of Events with null object/element/eventTypes still creates listeners array" );
41
    }
42

    
43
    function test_02_Events_register_unregister(t) {
44
 
45
        t.plan( 18 );
46
 
47
        var mapDiv = $('map');
48
        var obj = {result: 0};
49
        var eventTypes = ["doThingA", "doThingB", "doThingC"];
50
        
51
        events = new OpenLayers.Events(obj, mapDiv, eventTypes);
52
        
53
        var func = function () { this.result++ }
54
        events.register( "doThingA", obj, func );
55

    
56
        var listenerList = events.listeners["doThingA"];
57
        t.eq( listenerList.length, 1, "register correctly adds to event.listeners" );
58
        t.ok( listenerList[0].obj == obj, "obj property correctly registered");
59
        t.ok( listenerList[0].func == func, "func property correctly registered");
60

    
61
        var func2 = function () { this.result-- }
62
        events.register( "doThingA", obj, func2 );
63

    
64
        var listenerList = events.listeners["doThingA"];
65
        t.eq( listenerList.length, 2, "register correctly appends new callback to event.listeners[doThingA]" );
66
        t.ok( listenerList[1].obj == obj, "obj property correctly registered");
67
        t.ok( listenerList[1].func == func2, "func property correctly registered");
68

    
69
        var func3 = function () { this.result = this.result + 3; }
70
        events.register( "doThingA", null, func3 );
71

    
72
        var listenerList = events.listeners["doThingA"];
73
        t.eq( listenerList.length, 3, "register correctly appends new callback to event.listeners[doThingA] even when obj passed in is null" );
74
        t.ok( listenerList[2].obj == obj, "obj is correctly set to Events.object default when null is passed in.");
75
        t.ok( listenerList[2].func == func3, "func property correctly registered");
76

    
77
        events.register( "doThingA", obj, null);
78

    
79
        var listenerList = events.listeners["doThingA"];
80
        t.eq( listenerList.length, 3, "register correctly does not append null callback to event.listeners[doThingA] even when obj passed in is null" );
81

    
82
        events.register( "chicken", obj, func);
83
        t.ok( events.listeners["chicken"] == null, "register() does nothing on attempt to register un-enabled event");
84

    
85
        events.unregister("doThingA", obj, null);
86
        var listenerList = events.listeners["doThingA"];
87
        t.eq( listenerList.length, 3, "trying to unregister a null callback does nothing -- but doesnt crash :-)" );
88
    
89
        events.unregister("doThingA", obj, func);
90
        var found = false;
91
        for (var i = 0; i < listenerList.length; i++) {
92
            var listener = listenerList[i];
93
            if (listener.obj == obj && listener.func == func) {
94
                found = true;
95
            }
96
        }                
97
        t.ok( (listenerList.length == 2) && !found, "unregister correctly removes callback" );
98

    
99
        events.unregister("doThingA", null, func3);
100
        var found = false;
101
        for (var i = 0; i < listenerList.length; i++) {
102
            var listener = listenerList[i];
103
            if (listener.obj == obj && listener.func == func) {
104
                found = true;
105
            }
106
        }                
107
        t.ok( (listenerList.length == 1) && !found, "unregister correctly removes callback when no obj specified" );
108
        
109
        var func4 = function () { this.result = "chicken"; }
110
        events.unregister("doThingA", obj, func4);
111
        t.ok( (listenerList.length == 1), "unregister does not bomb if you try to remove an unregistered callback" );
112

    
113
        var obj2 = { chicken: 151 };
114
        events.unregister("doThingA", obj2, func2);
115
        t.ok( (listenerList.length == 1), "unregister does not bomb or accidntally remove if you try to remove a valid callback on a valid event type, but with the wrong context object" );
116

    
117
        events.unregister("doThingA", obj, null);
118
        t.ok( (listenerList.length == 1), "unregister does not bomb if you try to remove a null callback" );
119

    
120
        events.unregister("chicken", null, func3);
121
        t.ok( events.listeners["chicken"] == null, "unregistering an event that is not enabled does not wierdly enable it -- or cause a script error")
122

    
123

    
124
    }
125

    
126
    function test_03_Events_remove(t) {
127

    
128
        t.plan( 2 );
129
 
130
        var mapDiv = $('map');
131
        var obj = {result: 0};
132
        var eventTypes = ["doThingA", "doThingB", "doThingC"];
133
        
134
        events = new OpenLayers.Events(obj, mapDiv, eventTypes);
135
        
136
        var func = function () { this.result++ }
137
        var func2 = function () { this.result-- }
138
        var func3 = function () { this.result = this.result + 3; }
139

    
140
        events.register( "doThingA", obj, func );
141
        events.register( "doThingA", obj, func2 );
142
        events.register( "doThingA", null, func3 );
143

    
144
        events.remove("doThingA");
145

    
146
        t.eq( events.listeners["doThingA"].length, 0, "remove() correctly clears the event listeners" );
147

    
148
        events.remove("chicken");
149
        t.ok( events.listeners["chicken"] == null, "remove on non-enabled event does not break or accidentally enable the event");
150

    
151
    }
152

    
153
    function test_04_Events_triggerEvent(t) {
154
    
155
        t.plan( 6 );
156
 
157
        var mapDiv = $('map');
158
        var obj = {result: 0};
159
        var eventTypes = ["doThingA", "doThingB", "doThingC"];
160
        
161
        events = new OpenLayers.Events(obj, mapDiv, eventTypes);
162
        
163
        
164
        var func = function () { this.result++ }
165
        events.register( "doThingA", obj, func );
166

    
167
        events.triggerEvent("doThingA", {});
168
        t.eq( obj.result, 1, "result is 1 after we call triggerEvent" );
169
        events.triggerEvent("doThingA");
170
        t.eq( obj.result, 2, "result is 2 after we call triggerEvent with no event" );
171

    
172
        var funcB = function() { this.FUNK = "B"; return false; }
173
        events.register( "doThingA", obj, funcB);
174

    
175
        events.triggerEvent("doThingA");
176
        t.ok ((obj.result == 3) && (obj.FUNK == "B"), "executing multiple callbacks works")
177

    
178
        var funcZ = function() { this.FUNK = "Z"; }
179
        events.register( "doThingA", obj, funcZ);
180

    
181
        events.triggerEvent("doThingA");
182
        t.ok ((obj.result == 4) && (obj.FUNK == "B"), "executing multiple callbacks works, and when one returns false, it stops chain correctly")
183

    
184

    
185
        var func2 = function() { this.result = this.result + 10; }
186
        events.register( "doThingB", null, func2);
187
        
188
        events.triggerEvent("doThingB");
189
        t.eq( obj.result, 14, "passing a null object default gets set correctly");
190
        
191
        //no specific t.ok for this one, but if it breaks, you will know it.
192
        events.triggerEvent("chicken");
193

    
194
        events = new OpenLayers.Events(null, mapDiv, eventTypes);
195
        
196
        // a is global variable (context-irrelevant)
197
        a = 0;
198
        var func = function () { a = 5; }
199
        events.register( "doThingC", null, func );
200
        events.triggerEvent("doThingC");
201

    
202
        t.eq(a, 5, "if Events has no object set and an event is registered also with no object, triggerEvent() calls it without trying to set the context to null");        
203
    }
204
   
205
  // -->
206
  </script>
207
</head>
208
<body>
209
    <div id="map" style="width: 1024px; height: 512px;"/>
210
</body>
211
</html>
(13-13/35)