Files
openlayers/src/ol/object_test.js
Tom Payne f8c31ba45c s/ol3/ol/
2012-09-24 14:21:41 +02:00

390 lines
7.9 KiB
JavaScript

goog.require('goog.testing.jsunit');
goog.require('ol.Object');
function testModel() {
var m = new ol.Object();
assertNotNullNorUndefined(m);
}
function testGetUndefined() {
var m = new ol.Object();
assertUndefined(m.get('k'));
}
function testGetSetGet() {
var m = new ol.Object();
assertUndefined(m.get('k'));
m.set('k', 1);
assertEquals(1, m.get('k'));
}
function testSetValues() {
var m = new ol.Object();
m.setValues({
k1: 1,
k2: 2
});
assertEquals(1, m.get('k1'));
assertEquals(2, m.get('k2'));
}
function testNotifyKeyEvent() {
var m = new ol.Object();
var eventDispatched = false;
goog.events.listen(m, 'k_changed', function() {
eventDispatched = true;
});
m.notify('k');
assertTrue(eventDispatched);
}
function testBindSetNotifyKeyEvent() {
var m = new ol.Object();
var n = new ol.Object();
var callbackCalled = false;
goog.events.listen(n, 'k_changed', function() {
eventDispatched = true;
});
n.bindTo('k', m);
m.set('k', 1);
assertTrue(eventDispatched);
}
function testSetNotifyKeyEvent() {
var m = new ol.Object();
var eventDispatched = false;
goog.events.listen(m, 'k_changed', function() {
eventDispatched = true;
});
m.set('k', 1);
assertTrue(eventDispatched);
}
function testSetBind() {
var m = new ol.Object();
var n = new ol.Object();
m.set('k', 1);
assertEquals(1, m.get('k'));
assertUndefined(n.get('k'));
n.bindTo('k', m);
assertEquals(1, m.get('k'));
assertEquals(1, n.get('k'));
}
function testBindSet() {
var m = new ol.Object();
var n = new ol.Object();
n.bindTo('k', m);
m.set('k', 1);
assertEquals(1, m.get('k'));
assertEquals(1, n.get('k'));
}
function testBindSetBackwards() {
var m = new ol.Object();
var n = new ol.Object();
n.bindTo('k', m);
n.set('k', 1);
assertEquals(1, m.get('k'));
assertEquals(1, n.get('k'));
}
function testSetBindBackwards() {
var m = new ol.Object();
var n = new ol.Object();
n.set('k', 1);
n.bindTo('k', m);
assertUndefined(m.get('k'));
assertUndefined(n.get('k'));
}
function testBindSetUnbind() {
var m = new ol.Object();
var n = new ol.Object();
n.bindTo('k', m);
n.set('k', 1);
assertEquals(1, m.get('k'));
assertEquals(1, n.get('k'));
n.unbind('k');
assertEquals(1, m.get('k'));
assertEquals(1, n.get('k'));
n.set('k', 2);
assertEquals(1, m.get('k'));
assertEquals(2, n.get('k'));
}
function testUnbindAll() {
var m = new ol.Object();
var n = new ol.Object();
n.bindTo('k', m);
n.set('k', 1);
assertEquals(m.get('k'), 1);
assertEquals(n.get('k'), 1);
n.unbindAll();
assertEquals(m.get('k'), 1);
assertEquals(n.get('k'), 1);
n.set('k', 2);
assertEquals(m.get('k'), 1);
assertEquals(n.get('k'), 2);
}
function testBindNotify() {
var m = new ol.Object();
var n = new ol.Object();
m.bindTo('k', n);
mEventDispatched = false;
goog.events.listen(m, 'k_changed', function() {
mEventDispatched = true;
});
nEventDispatched = false;
goog.events.listen(n, 'k_changed', function() {
nEventDispatched = true;
});
n.set('k', 1);
assertTrue(mEventDispatched);
assertTrue(nEventDispatched);
}
function testBindBackwardsNotify() {
var m = new ol.Object();
var n = new ol.Object();
n.bindTo('k', m);
mEventDispatched = false;
goog.events.listen(m, 'k_changed', function() {
mEventDispatched = true;
});
nEventDispatched = false;
goog.events.listen(n, 'k_changed', function() {
nEventDispatched = true;
});
n.set('k', 1);
assertTrue(mEventDispatched);
assertTrue(nEventDispatched);
}
function testBindRename() {
var m = new ol.Object();
var n = new ol.Object();
n.bindTo('kn', m, 'km');
m.set('km', 1);
assertEquals(m.get('km'), 1);
assertEquals(n.get('kn'), 1);
}
function testBindRenameEvents() {
var m = new ol.Object();
var n = new ol.Object();
kmEventDispatched = false;
goog.events.listen(m, 'km_changed', function() {
kmEventDispatched = true;
});
knEventDispatched = false;
goog.events.listen(n, 'kn_changed', function() {
knEventDispatched = true;
});
n.bindTo('kn', m, 'km');
m.set('km', 1);
assertEquals(m.get('km'), 1);
assertEquals(n.get('kn'), 1);
assertTrue(kmEventDispatched);
assertTrue(knEventDispatched);
}
function testTransitiveBindForwards() {
var m = new ol.Object();
var n = new ol.Object();
var o = new ol.Object();
n.bindTo('kn', m, 'km');
o.bindTo('ko', n, 'kn');
m.set('km', 1);
assertEquals(1, m.get('km'));
assertEquals(1, n.get('kn'));
assertEquals(1, o.get('ko'));
}
function testTransitiveBindBackwards() {
var m = new ol.Object();
var n = new ol.Object();
var o = new ol.Object();
n.bindTo('kn', m, 'km');
o.bindTo('ko', n, 'kn');
o.set('ko', 1);
assertEquals(1, m.get('km'));
assertEquals(1, n.get('kn'));
assertEquals(1, o.get('ko'));
}
function testMrideyAccessors() {
// http://blog.mridey.com/2010/03/maps-javascript-api-v3-more-about.html
var a = new ol.Object();
a.set('level', 2);
assertEquals(2, a.get('level'));
var b = new ol.Object();
b.setValues({
level: 2,
index: 3,
description: 'Hello world.'
});
assertEquals(3, b.get('index'));
}
function testMrideyBinding() {
// http://blog.mridey.com/2010/03/maps-javascript-api-v3-more-about.html
var a = new ol.Object();
a.set('level', 2);
var b = new ol.Object();
b.bindTo('index', a, 'level');
assertEquals(2, b.get('index'));
a.set('level', 3);
assertEquals(3, b.get('index'));
b.set('index', 4);
assertEquals(4, a.get('level'));
var c = new ol.Object();
c.bindTo('zoom', a, 'level');
assertEquals(4, c.get('zoom'));
b.unbind('index');
assertEquals(4, b.get('index'));
c.set('zoom', 5);
assertEquals(5, a.get('level'));
assertEquals(4, b.get('index'));
}
function testCircularBind() {
var a = new ol.Object();
var b = new ol.Object();
a.bindTo('k', b);
assertThrows(function() {
b.bindTo('k', a);
});
}
function testPriority() {
var a = new ol.Object();
var b = new ol.Object();
a.set('k', 1);
b.set('k', 2);
a.bindTo('k', b);
assertEquals(2, a.get('k'));
assertEquals(2, b.get('k'));
}
function testPriorityUndefined() {
var a = new ol.Object();
var b = new ol.Object();
a.set('k', 1);
a.bindTo('k', b);
assertUndefined(a.get('k'));
assertUndefined(b.get('k'));
}
function testSetter() {
var a = new ol.Object();
var x;
var setterCalled;
a.setX = function(value) {
this.x = value;
setterCalled = true;
};
a.set('x', 1);
assertEquals(1, a.get('x'));
assertUndefined(setterCalled);
}
function testSetterBind() {
var a = new ol.Object();
var x;
var setterCalled;
a.setX = function(value) {
this.x = value;
setterCalled = true;
};
var b = new ol.Object();
b.bindTo('x', a);
b.set('x', 1);
assertEquals(1, a.get('x'));
assertEquals(1, b.get('x'));
assertTrue(setterCalled);
}
function testGetter() {
var a = new ol.Object();
var getterCalled;
a.getX = function() {
getterCalled = true;
return 1;
};
assertUndefined(a.get('x'));
assertUndefined(getterCalled);
}
function testGetterBind() {
var a = new ol.Object();
var getterCalled;
a.getX = function() {
getterCalled = true;
return 1;
};
var b = new ol.Object();
b.bindTo('x', a);
assertEquals(1, b.get('x'));
assertTrue(getterCalled);
}
function testBindSelf() {
var a = new ol.Object();
assertThrows(function() {
a.bindTo('k', a);
});
}
function testCreateWithOptions() {
var obj = new ol.Object({k: 1});
assertEquals(1, obj.get('k'));
}
function testEventTypeCaseSensitivity() {
var obj = new ol.Object();
var lowercaseEventDispatched = false;
goog.events.listen(obj, 'k_changed', function() {
lowercaseEventDispatched = true;
});
var uppercaseEventDispatched = false;
goog.events.listen(obj, 'K_changed', function() {
uppercaseEventDispatched = true;
});
obj.set('K', 1);
assertTrue(lowercaseEventDispatched);
assertFalse(uppercaseEventDispatched);
}