98 lines
1.8 KiB
JavaScript
98 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
describe("hoverIntent", function() {
|
|
|
|
function mouse(eventType, x, y, options) {
|
|
let eventOptions = Object.assign({
|
|
bubbles: true,
|
|
clientX: x,
|
|
clientY: y,
|
|
pageX: x,
|
|
pageY: y,
|
|
target: elem
|
|
}, options || {});
|
|
|
|
elem.dispatchEvent(new MouseEvent(eventType, eventOptions));
|
|
}
|
|
|
|
|
|
let isOver;
|
|
let hoverIntent;
|
|
|
|
|
|
before(function() {
|
|
this.clock = sinon.useFakeTimers();
|
|
});
|
|
|
|
after(function() {
|
|
this.clock.restore();
|
|
});
|
|
|
|
|
|
beforeEach(function() {
|
|
isOver = false;
|
|
|
|
hoverIntent = new HoverIntent({
|
|
elem: elem,
|
|
over: function() {
|
|
isOver = true;
|
|
},
|
|
out: function() {
|
|
isOver = false;
|
|
}
|
|
});
|
|
})
|
|
|
|
afterEach(function() {
|
|
if (hoverIntent) {
|
|
hoverIntent.destroy();
|
|
}
|
|
})
|
|
|
|
it("mouseover -> immediately no tooltip", function() {
|
|
mouse('mouseover', 10, 10);
|
|
assert.isFalse(isOver);
|
|
});
|
|
|
|
it("mouseover -> pause shows tooltip", function() {
|
|
mouse('mouseover', 10, 10);
|
|
this.clock.tick(100);
|
|
assert.isTrue(isOver);
|
|
});
|
|
|
|
it("mouseover -> fast mouseout no tooltip", function() {
|
|
mouse('mouseover', 10, 10);
|
|
setTimeout(
|
|
() => mouse('mouseout', 300, 300, { relatedTarget: document.body}),
|
|
30
|
|
);
|
|
this.clock.tick(100);
|
|
assert.isFalse(isOver);
|
|
});
|
|
|
|
|
|
it("mouseover -> slow move -> tooltips", function() {
|
|
mouse('mouseover', 10, 10);
|
|
for(let i=10; i<200; i+= 10) {
|
|
setTimeout(
|
|
() => mouse('mousemove', i/5, 10),
|
|
i
|
|
);
|
|
}
|
|
this.clock.tick(200);
|
|
assert.isTrue(isOver);
|
|
});
|
|
|
|
it("mouseover -> fast move -> no tooltip", function() {
|
|
mouse('mouseover', 10, 10);
|
|
for(let i=10; i<200; i+= 10) {
|
|
setTimeout(
|
|
() => mouse('mousemove', i, 10),
|
|
i
|
|
);
|
|
}
|
|
this.clock.tick(200);
|
|
assert.isFalse(isOver);
|
|
});
|
|
|
|
});
|