Side menu controller

This commit is contained in:
Max Lynch
2013-09-20 15:12:11 -05:00
parent 3395aceac5
commit fcb64f390a
2 changed files with 338 additions and 0 deletions

View File

@ -0,0 +1,158 @@
describe('SideMenuController', function() {
var ctrl, l, r, c;
var Controller = function(opts) {
this.el = opts.el;
this.animateClass = opts.animateClass;
};
Controller.prototype = {
getTranslateX: function() {
var r = /translate3d\((-?.+)px/;
var d = r.exec(this.el.style.webkitTransform);
if(d && d.length > 0) {
return parseFloat(d[1]);
}
return 0;
},
setTranslateX: function(amount) {
this.el.style.webkitTransform = 'translate3d(' + amount + 'px, 0, 0)';
},
enableAnimation: function() {
this.el.classList.add(this.animateClass);
},
disableAnimation: function() {
this.el.classList.remove(this.animateClass);
}
};
beforeEach(function() {
l = new SideMenu({ el: document.createElement('div'), width: 270 });
r = new SideMenu({ el: document.createElement('div'), width: 270 });
c = new Controller({ el: document.createElement('div') });
ctrl = new SideMenuController({
left: l,
right: r,
content: c
});
});
// Init
it('Should init', function() {
expect(ctrl.left).toBe(l);
expect(ctrl.right).toBe(r);
expect(ctrl.content).toBe(c);
});
// Menu enable/disable
it('Should set enabled/disabled', function() {
var left = ctrl.left;
var right = ctrl.right;
left.setIsEnabled(false);
right.setIsEnabled(false);
expect(left.isEnabled).toEqual(false);
expect(right.isEnabled).toEqual(false);
left.setIsEnabled(true);
right.setIsEnabled(true);
expect(left.isEnabled).toEqual(true);
expect(right.isEnabled).toEqual(true);
});
// Menu widths
it('Should init widths', function() {
var left = ctrl.left;
var right = ctrl.right;
expect(left.width).toEqual(270);
expect(right.width).toEqual(270);
});
it('Should have amount and percentage correct', function() {
ctrl.openAmount(l.width/2);
expect(ctrl.getOpenAmount()).toEqual(l.width/2);
expect(ctrl.getOpenPercentage()).toEqual(50);
ctrl.openAmount(l.width/4);
expect(ctrl.getOpenAmount()).toEqual(l.width/4);
expect(ctrl.getOpenPercentage()).toEqual(25);
ctrl.openAmount(-r.width/2);
expect(ctrl.getOpenAmount()).toEqual(-r.width/2);
expect(ctrl.getOpenPercentage()).toEqual(-50);
});
// Open
it('Should toggle left and right', function() {
ctrl.toggleLeft();
expect(ctrl.getOpenPercentage()).toEqual(100);
ctrl.toggleRight();
expect(ctrl.getOpenPercentage()).toEqual(-100);
});
// Snap
it('Should snap', function() {
// Center to right, Going right, less than half, too slow (snap back)
ctrl.openAmount(10);
ctrl.snapToRest({
gesture: {
velocityX: 0,
direction: 'right'
}
});
expect(ctrl.getOpenPercentage()).toEqual(0);
// Right to left, Going left, more than half, too slow (snap back)
ctrl.openPercentage(51);
ctrl.snapToRest({
gesture: {
velocityX: 0,
direction: 'left'
}
});
expect(ctrl.getOpenPercentage()).toEqual(100);
// Right to left, Going left, less than half, too slow (snap back)
ctrl.openAmount(10);
ctrl.snapToRest({
gesture: {
velocityX: 0,
direction: 'left'
}
});
expect(ctrl.getOpenPercentage()).toEqual(0);
// Left to right, Going right, more than half, too slow (snap back)
ctrl.openPercentage(-51);
ctrl.snapToRest({
gesture: {
velocityX: 0,
direction: 'right'
}
});
expect(ctrl.getOpenPercentage()).toEqual(-100);
// Going right, more than half, or quickly (snap open)
ctrl.openPercentage(-51);
ctrl.snapToRest({
gesture: {
velocityX: 1,
direction: 'right'
}
});
expect(ctrl.getOpenPercentage()).toEqual(0);
// Going left, more than half, or quickly (snap open)
ctrl.openPercentage(-51);
ctrl.snapToRest({
gesture: {
velocityX: 1,
direction: 'left'
}
});
expect(ctrl.getOpenPercentage()).toEqual(-100);
});
it('Should test content drag events', function() {
});
});