1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296
|
<html>
<head>
<script src="../OLLoader.js"></script>
<script type="text/javascript">
function test_Control_Panel_constructor (t) {
t.plan( 2 );
control = new OpenLayers.Control.Panel();
t.ok( control instanceof OpenLayers.Control.Panel, "new OpenLayers.Control returns object" );
t.eq( control.displayClass, "olControlPanel", "displayClass is correct" );
}
function test_Control_Panel_constructor2 (t) {
t.plan(19);
var map = new OpenLayers.Map('map');
var toolControl = new OpenLayers.Control.ZoomBox();
var AnotherToolControl = OpenLayers.Class(OpenLayers.Control, {
CLASS_NAME: 'mbControl.TestTool',
type: OpenLayers.Control.TYPE_TOOL
});
var anotherToolControl = new AnotherToolControl();
var ToggleControl = OpenLayers.Class(OpenLayers.Control, {
CLASS_NAME: 'mbControl.TestToggle',
type: OpenLayers.Control.TYPE_TOGGLE
});
var toggleControl = new ToggleControl();
var buttonControl = new OpenLayers.Control.Button({
trigger: function () {
t.ok(true, "trigger function of button is called.");
}
});
var panel = new OpenLayers.Control.Panel(
{defaultControl: anotherToolControl});
t.ok(panel instanceof OpenLayers.Control.Panel,
"new OpenLayers.Control.Panel returns object");
panel.redraw = function(){
panel.redrawsCount++;
OpenLayers.Control.Panel.prototype.redraw.apply(this, arguments);
};
// To get length of events.listeners error-free
var getListenerLength= function(events,key){
if(!events) {
return -2; // events is destroyed
} else if(!events.listeners) {
return -1; // events is destroyed
} else if(!events.listeners[key]) {
return 0; // no listener in event
} else {
return events.listeners[key].length;
}
};
var toolEventListenerLength = getListenerLength(toolControl.events,"activate");
panel.addControls([toolControl, anotherToolControl, toggleControl]);
t.eq(panel.controls.length, 3,
"added three controls to the panel");
panel.addControls([buttonControl]);
panel.redrawsCount = 0;
map.addControl(panel);
t.eq(getListenerLength(toolControl.events,"activate"), toolEventListenerLength+1,
"toolControl additional listener for \"activate\" after adding Panel to the map.");
t.ok((panel.redrawsCount > 0), "Redraw called on add panel to map " +
panel.redrawsCount + " times.");
t.ok((panel.active),"Panel is active after add panel to map.");
panel.redrawsCount = 0;
panel.addControls(new AnotherToolControl());
t.ok((panel.redrawsCount > 0),
"Redraw called on add control to panel after add panel to map " +
panel.redrawsCount + " times.");
panel.deactivate();
panel.redrawsCount = 0;
panel.activate();
t.ok((panel.redrawsCount > 0),"Redraw called on activate panel " +
panel.redrawsCount + " times.");
panel.activateControl(toolControl);
t.ok(toolControl.active && !anotherToolControl.active && !toggleControl.active && !buttonControl.active,
"activated one tool control, the other one is inactive and the toggle & button controls also.");
panel.activateControl(toggleControl);
t.eq(toggleControl.panel_div.className,"mbControlTestToggleItemActive",
"className of icon div for toggle control is active.");
t.ok(toolControl.active && !anotherToolControl.active && toggleControl.active,
"activated the toggle control, which has no influence on the tool & togggle controls.");
panel.activateControl(buttonControl);
t.ok(toolControl.active && !anotherToolControl.active && toggleControl.active,
"activateContol calling for button, which has no influence on the tool & togggle controls.");
t.ok(!buttonControl.active,
"activateContol calling for button, button remains inactive.");
buttonControl.activate();
t.ok(buttonControl.active && toolControl.active && !anotherToolControl.active && toggleControl.active,
"activated the button control, which has no influence on the tool & togggle controls.");
panel.activateControl(anotherToolControl);
t.eq(anotherToolControl.panel_div.className,"mbControlTestToolItemActive",
"className of icon div for anotherToolControl is active.");
t.eq(toolControl.panel_div.className,"olControlZoomBoxItemInactive",
"className of icon div for toolControl is inactive.");
t.ok(!toolControl.active && anotherToolControl.active && toggleControl.active,
"activated the other tool control, the first one is inactive and the toggle control still active.");
t.ok(buttonControl.active,
"activated the other tool control, the button control still active.");
panel.destroy();
t.eq(getListenerLength(toolControl.events,"activate"), toolEventListenerLength,
"toolControl additional listeners removed after destroy Panel.");
map.destroy();
}
function test_Control_Panel_titles (t) {
t.plan(2);
var panel = new OpenLayers.Control.Panel();
var toolControl = new OpenLayers.Control.ZoomBox({
title:"Zoom box: Selecting it you can zoom on an area by clicking and dragging."
});
panel.addControls([toolControl]);
t.eq(panel.controls.length, 1, "added a control to the panel");
t.eq(panel.controls[0].title, toolControl.panel_div.title, "the title is correctly set");
}
function test_Control_Panel_getBy(t) {
var panel = {
getBy: OpenLayers.Control.Panel.prototype.getBy,
getControlsBy: OpenLayers.Control.Panel.prototype.getControlsBy,
controls: [
{foo: "foo", id: Math.random()},
{foo: "bar", id: Math.random()},
{foo: "foobar", id: Math.random()},
{foo: "foo bar", id: Math.random()},
{foo: "foo", id: Math.random()}
]
};
var cases = [
{
got: panel.getControlsBy("foo", "foo"),
expected: [panel.controls[0], panel.controls[4]],
message: "(string literal) got two controls matching foo"
}, {
got: panel.getControlsBy("foo", "bar"),
expected: [panel.controls[1]],
message: "(string literal) got one control matching foo"
}, {
got: panel.getControlsBy("foo", "barfoo"),
expected: [],
message: "(string literal) got empty array for no foo match"
}, {
got: panel.getControlsBy("foo", /foo/),
expected: [panel.controls[0], panel.controls[2], panel.controls[3], panel.controls[4]],
message: "(regexp literal) got three controls containing string"
}, {
got: panel.getControlsBy("foo", /foo$/),
expected: [panel.controls[0], panel.controls[4]],
message: "(regexp literal) got three controls ending with string"
}, {
got: panel.getControlsBy("foo", /\s/),
expected: [panel.controls[3]],
message: "(regexp literal) got control containing space"
}, {
got: panel.getControlsBy("foo", new RegExp("BAR", "i")),
expected: [panel.controls[1], panel.controls[2], panel.controls[3]],
message: "(regexp object) got layers ignoring case"
}, {
got: panel.getControlsBy("foo", {test: function(str) {return str.length > 3;}}),
expected: [panel.controls[2], panel.controls[3]],
message: "(custom object) got controls with foo length greater than 3"
}
];
t.plan(cases.length);
for(var i=0; i<cases.length; ++i) {
t.eq(cases[i].got, cases[i].expected, cases[i].message);
}
}
function test_Control_Panel_saveState (t) {
t.plan(11);
var map = new OpenLayers.Map('map');
var defaultControl = new OpenLayers.Control();
var panel = new OpenLayers.Control.Panel({
defaultControl: defaultControl
});
panel.addControls([new OpenLayers.Control(), defaultControl]);
map.addControl(panel);
t.eq(defaultControl.active, true,
"After panel activation default control is active.");
t.ok(panel.defaultControl,
"defaultControl not nullified after initial panel activation");
// activate the 1st control
panel.activateControl(panel.controls[0]);
panel.deactivate();
t.ok(!panel.controls[0].active && !panel.controls[1].active,
"No controls are active after panel deactivation.");
panel.activate();
t.eq(panel.controls[0].active, false,
"After panel reactivation first control is inactive.");
t.eq(panel.controls[1].active, true,
"After panel reactivation default control is active again.");
panel.destroy();
defaultControl = new OpenLayers.Control();
panel = new OpenLayers.Control.Panel({
saveState: true,
defaultControl: defaultControl
});
panel.addControls([new OpenLayers.Control(), defaultControl]);
map.addControl(panel);
t.eq(defaultControl.active, true,
"After panel activation default control is active.");
t.eq(panel.defaultControl, null,
"defaultControl nullified after initial panel activation");
// activate the 1st control, which will deactivate the 2nd
panel.activateControl(panel.controls[0]);
t.eq(panel.controls[1].active, false,
"2nd control deactivated with activation of 1st");
panel.deactivate();
t.ok(!panel.controls[0].active && !panel.controls[1].active,
"No controls are active after panel deactivation.");
panel.activate();
t.eq(panel.controls[0].active, true,
"After panel reactivation first control is active.");
t.eq(panel.controls[1].active, false,
"After panel reactivation second control is inactive.");
panel.destroy();
map.destroy();
}
function test_Control_Panel_autoActivate (t) {
t.plan(1);
var map = new OpenLayers.Map('map');
var controlNoDeactive = new OpenLayers.Control({autoActivate:true});
var chkDeactivate = function () {
t.ok(false, "Tool control autoActivate:true was deactivated unnecessarily");
};
controlNoDeactive.events.on({deactivate: chkDeactivate});
var panel = new OpenLayers.Control.Panel();
map.addControl(panel);
panel.addControls([controlNoDeactive]);
controlNoDeactive.events.un({deactivate: chkDeactivate});
t.ok(!controlNoDeactive.active, "Tool control autoActivate:true is not active");
}
function test_Control_Panel_deactivate (t) {
t.plan(2);
var map = new OpenLayers.Map('map');
var control = new OpenLayers.Control();
var panel = new OpenLayers.Control.Panel();
map.addControl(panel);
panel.addControls([control]);
t.ok(panel.div.innerHTML != "", "Panel displayed after activate");
panel.deactivate();
t.ok(panel.div.innerHTML == "",
"Panel is not displayed after deactivate without any active control");
map.destroy();
}
function test_allowDepress (t) {
t.plan(2);
var map = new OpenLayers.Map('map');
var panel = new OpenLayers.Control.Panel();
panel.addControls([new OpenLayers.Control(),new OpenLayers.Control()]);
map.addControl(panel);
var control1 = panel.controls[1]
panel.activateControl(control1);
panel.allowDepress = false;
panel.activateControl(control1);
t.eq(control1.active, true,
"control1 remains active after calling again activateControl when allowDepress = false");
panel.allowDepress = true;
panel.activateControl(control1);
t.eq(control1.active, false,
"control1 is inactive after calling again activateControl when allowDepress = true");
// panel.deactivate();
map.destroy();
}
</script>
</head>
<body>
<div id="map" style="width: 1024px; height: 512px;"/>
</body>
</html>
|