blob: 9b0f5a05abc0769529882398a828c60b04da12a9 [file] [log] [blame]
describe('position elements', function () {
var TargetElMock = function(width, height) {
this.width = width;
this.height = height;
this.prop = function(propName) {
return propName === 'offsetWidth' ? width : height;
};
};
var $position;
beforeEach(module('ui.bootstrap.position'));
beforeEach(inject(function($uibPosition) {
$position = $uibPosition;
}));
beforeEach(function () {
jasmine.addMatchers({
toBePositionedAt: function(util, customEqualityTesters) {
return {
compare: function(actual, top, left) {
var result = {
pass: util.equals(actual.top, top, customEqualityTesters) &&
util.equals(actual.left, left, customEqualityTesters)
};
if (result.pass) {
result.message = 'Expected "(' + actual.top + ', ' + actual.left + ')" not to be positioned at (' + top + ', ' + left + ')';
} else {
result.message = 'Expected "(' + actual.top + ', ' + actual.left + ')" to be positioned at (' + top + ', ' + left + ')';
}
return result;
}
};
}
});
});
describe('append-to-body: false', function() {
beforeEach(function() {
//mock position info normally queried from the DOM
$position.position = function() {
return {
width: 20,
height: 20,
top: 100,
left: 100
};
};
});
it('should position element on top-center by default', function() {
expect($position.positionElements({}, new TargetElMock(10, 10), 'other')).toBePositionedAt(90, 105);
expect($position.positionElements({}, new TargetElMock(10, 10), 'top')).toBePositionedAt(90, 105);
expect($position.positionElements({}, new TargetElMock(10, 10), 'top-center')).toBePositionedAt(90, 105);
});
it('should position on top-left', function() {
expect($position.positionElements({}, new TargetElMock(10, 10), 'top-left')).toBePositionedAt(90, 100);
});
it('should position on top-right', function() {
expect($position.positionElements({}, new TargetElMock(10, 10), 'top-right')).toBePositionedAt(90, 120);
});
it('should position elements on bottom-center when "bottom" specified', function() {
expect($position.positionElements({}, new TargetElMock(10, 10), 'bottom')).toBePositionedAt(120, 105);
expect($position.positionElements({}, new TargetElMock(10, 10), 'bottom-center')).toBePositionedAt(120, 105);
});
it('should position elements on bottom-left', function() {
expect($position.positionElements({}, new TargetElMock(10, 10), 'bottom-left')).toBePositionedAt(120, 100);
});
it('should position elements on bottom-right', function() {
expect($position.positionElements({}, new TargetElMock(10, 10), 'bottom-right')).toBePositionedAt(120, 120);
});
it('should position elements on left-center when "left" specified', function() {
expect($position.positionElements({}, new TargetElMock(10, 10), 'left')).toBePositionedAt(105, 90);
expect($position.positionElements({}, new TargetElMock(10, 10), 'left-center')).toBePositionedAt(105, 90);
});
it('should position elements on left-top when "left-top" specified', function() {
expect($position.positionElements({}, new TargetElMock(10, 10), 'left-top')).toBePositionedAt(100, 90);
});
it('should position elements on left-bottom when "left-bottom" specified', function() {
expect($position.positionElements({}, new TargetElMock(10, 10), 'left-bottom')).toBePositionedAt(120, 90);
});
it('should position elements on right-center when "right" specified', function() {
expect($position.positionElements({}, new TargetElMock(10, 10), 'right')).toBePositionedAt(105, 120);
expect($position.positionElements({}, new TargetElMock(10, 10), 'right-center')).toBePositionedAt(105, 120);
});
it('should position elements on right-top when "right-top" specified', function() {
expect($position.positionElements({}, new TargetElMock(10, 10), 'right-top')).toBePositionedAt(100, 120);
});
it('should position elements on right-top when "right-top" specified', function() {
expect($position.positionElements({}, new TargetElMock(10, 10), 'right-bottom')).toBePositionedAt(120, 120);
});
});
});
/* Deprecation tests below */
describe('position deprecation', function() {
var TargetElMock = function(width, height) {
this.width = width;
this.height = height;
this.prop = function(propName) {
return propName === 'offsetWidth' ? width : height;
};
};
beforeEach(module('ui.bootstrap.position'));
it('should suppress warning', function() {
module(function($provide) {
$provide.value('$positionSuppressWarning', true);
});
inject(function($log, $position) {
spyOn($log, 'warn');
//mock position info normally queried from the DOM
$position.position = function() {
return {
width: 20,
height: 20,
top: 100,
left: 100
};
};
$position.positionElements({}, new TargetElMock(10, 10), 'other');
expect($log.warn.calls.count()).toBe(0);
});
});
it('should give warning by default', inject(function($log) {
spyOn($log, 'warn');
inject(function($position) {
//mock position info normally queried from the DOM
$position.position = function() {
return {
width: 20,
height: 20,
top: 100,
left: 100
};
};
$position.positionElements({}, new TargetElMock(10, 10), 'other');
expect($log.warn.calls.count()).toBe(1);
expect($log.warn.calls.argsFor(0)).toEqual(['$position is now deprecated. Use $uibPosition instead.']);
});
}));
});