Skip to content

Commit

Permalink
add in tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rhysbrettbowen committed Nov 5, 2012
1 parent 8af15b7 commit 6034faa
Show file tree
Hide file tree
Showing 6 changed files with 164 additions and 111 deletions.
4 changes: 3 additions & 1 deletion mediator.js
Expand Up @@ -326,7 +326,9 @@ mvc.Mediator.prototype.off = function(uid) {
var rem = [];
goog.object.forEach(this.listeners_, function(listener, key) {
while(goog.array.removeIf(listener, function(el) {
return goog.getUid(el) == uid || el.id == uid;
var del = goog.getUid(el) == uid || el.id == uid
ret = ret || del;
return del;
})) {}
if(!listener.length)
rem.push(key);
Expand Down
3 changes: 2 additions & 1 deletion model.js
Expand Up @@ -589,7 +589,8 @@ mvc.Model.prototype.getObjChanges_ = function(a, b, path) {
if (!goog.isObject(a) && !goog.isObject(b)) {
return a === b ? [] : [path];
}
var keys = goog.array.concat(goog.object.getKeys(a), goog.object.getKeys(b));
var keys = goog.array.concat(goog.object.getKeys(/** @type {Object} */(a)),
goog.object.getKeys(/** @type {Object} */(b)));
goog.array.removeDuplicates(keys);
var ret = goog.array.reduce(keys, function(arr, key) {
if (!goog.isObject(a))
Expand Down
108 changes: 0 additions & 108 deletions tests/control_test.js
Expand Up @@ -13,114 +13,6 @@ var setUp = function() {
simpleControl.decorate(goog.dom.getElement('control'));
};

var testSimpleControl = function() {
assertEquals('should come back with one element', 1,
simpleControl.getEls('.class2').length);
assertEquals('should come back with 2 elements', 2,
simpleControl.getEls('.class1').length);
};

var testControlListener = function() {
var toggle = false;
var handle = function() {toggle = !toggle;};
var uid = simpleControl.click(handle);
var evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleControl.getElement().dispatchEvent(evt);
assert('true, click should be handled', toggle);
simpleControl.off(uid);
evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleControl.getElement().dispatchEvent(evt);
assert('true, click listener should be removed', toggle);
};

var testControlOnce = function() {
var toggle = false;
var handle = function() {
toggle = !toggle;
};
simpleControl.once(goog.events.EventType.CLICK, handle);
var evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleControl.getElement().dispatchEvent(evt);
assert('true, click should be handled', toggle);
evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleControl.getElement().dispatchEvent(evt);
assert('true, click listener should be removed', toggle);
};

var testPriority = function() {
var count = 1;
var a;
var b;
var c;
var d;

var incA = function() {a = count++};
var incB = function() {b = count++};
var incC = function() {c = count++};
var incD = function() {d = count++};

simpleControl.click(incB, undefined, undefined);
simpleControl.click(incA, undefined, undefined, 30);
simpleControl.click(incD, undefined, undefined, 70);
simpleControl.click(incC, undefined, undefined);

var evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleControl.getElement().dispatchEvent(evt);

assertEquals(1, a);
assertEquals(2, b);
assertEquals(3, c);
assertEquals(4, d);
};

var testListenerFire = function() {
var el;
var fn = function(e) {
el = e.target;
};
simpleControl.on('click', fn).fire();
assertEquals(el, simpleControl.getElement());
};

var testListenerFireTarget = function() {
var el;
var target = document.createElement('DIV');
var fn = function(e) {
el = e.target;
};
simpleControl.on('click', fn).fire(target);
assertEquals(el, target);
};

var testListenerOff = function() {
var run = false;
var fn = function(e) {
run = true;
};
var bound = simpleControl.on('click', fn);
var evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleControl.getElement().dispatchEvent(evt);
assert('true, click should be handled', run);
bound.off();
evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleControl.getElement().dispatchEvent(evt);
assert('true, click listener should be removed', run);
};

var testChangeModel = function() {
var mod;
var num;
Expand Down
123 changes: 123 additions & 0 deletions tests/layout_test.js
@@ -0,0 +1,123 @@
goog.require('goog.dom');
goog.require('goog.testing.jsunit');
goog.require('mvc.Layout');



var simpleLayout;

var setUp = function() {
simpleLayout = new mvc.Layout();
simpleLayout.decorate(goog.dom.getElement('control'));
};

var testSimpleControl = function() {
assertEquals('should come back with one element', 1,
simpleLayout.getEls('.class2').length);
assertEquals('should come back with 2 elements', 2,
simpleLayout.getEls('.class1').length);
};

var testControlListener = function() {
var toggle = false;
var handle = function() {toggle = !toggle;};
var uid = simpleLayout.click(handle);
var evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleLayout.getElement().dispatchEvent(evt);
assert('true, click should be handled', toggle);
simpleLayout.off(uid);
evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleLayout.getElement().dispatchEvent(evt);
assert('true, click listener should be removed', toggle);
};

var testControlOnce = function() {
var toggle = false;
var handle = function() {
toggle = !toggle;
};
simpleLayout.once(goog.events.EventType.CLICK, handle);
var evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleLayout.getElement().dispatchEvent(evt);
assert('true, click should be handled', toggle);
evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleLayout.getElement().dispatchEvent(evt);
assert('true, click listener should be removed', toggle);
};

var testPriority = function() {
var count = 1;
var a;
var b;
var c;
var d;

var incA = function() {a = count++};
var incB = function() {b = count++};
var incC = function() {c = count++};
var incD = function() {d = count++};

simpleLayout.click(incB, undefined, undefined);
simpleLayout.click(incA, undefined, undefined, 30);
simpleLayout.click(incD, undefined, undefined, 70);
simpleLayout.click(incC, undefined, undefined);

var evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleLayout.getElement().dispatchEvent(evt);

assertEquals(1, a);
assertEquals(2, b);
assertEquals(3, c);
assertEquals(4, d);
};

var testListenerFire = function() {
var el;
var fn = function(e) {
el = e.target;
};
simpleLayout.on('click', fn).fire();
assertEquals(el, simpleLayout.getElement());
};

var testListenerFireTarget = function() {
var el;
var target = document.createElement('DIV');
var fn = function(e) {
el = e.target;
};
simpleLayout.on('click', fn).fire(target);
assertEquals(el, target);
};

var testListenerOff = function() {
var run = false;
var fn = function(e) {
run = true;
};
var bound = simpleLayout.on('click', fn);
var evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleLayout.getElement().dispatchEvent(evt);
assert('true, click should be handled', run);
bound.off();
evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false,
false, false, 0, null);
simpleLayout.getElement().dispatchEvent(evt);
assert('true, click listener should be removed', run);
};



5 changes: 4 additions & 1 deletion tests/mediator_test.js
Expand Up @@ -30,8 +30,11 @@ testListen = function() {
testUnlisten = function() {
listen = med.on('test', function() {});
assert(med.isListened('test'));
med.off(listen);
var found = med.off(listen);
var notFound = !med.off(listen+1);
assert(!med.isListened('test'));
assert(found);
assert(notFound);
};

testInit = function() {
Expand Down
32 changes: 32 additions & 0 deletions tests/model_test.js
Expand Up @@ -574,3 +574,35 @@ var testUnbindUnload = function() {

};

var testDotPropertySet = function() {
var a = new mvc.Model();
a.set('a.a', 1);
assert(!!a.attr_.a);
assertEquals(1, a.attr_.a.a);
a.set('a.b', 1);
assertEquals(1, a.attr_.a.a);
assertEquals(1, a.attr_.a.b);
};

var testDotPropertyGet = function() {
var a = new mvc.Model();
a.attr_.a = {a:1};
assertEquals(1, a.get('a.a'));
};

var testDotPropertyBind = function() {
var a = new mvc.Model();
a.attr_.a = {a:1, b:1};
a.change();
var bindA = false;
var bindAA = false;
var bindAB = false;
a.bind('a', function() {bindA = true;});
a.bind('a.a', function() {bindAA = true;});
a.bind('a.b', function() {bindAB = true;});
a.set('a.a', 2);
assert(bindA);
assert(bindAA);
assertFalse(bindAB);
};

0 comments on commit 6034faa

Please sign in to comment.