2017-10-01 20:52:50 +00:00
|
|
|
module TK.SpaceTac.UI.Specs {
|
2017-10-26 21:47:13 +00:00
|
|
|
testing("InputManager", test => {
|
2017-10-29 21:08:55 +00:00
|
|
|
let testgame = setupEmptyView(test);
|
2017-10-01 20:52:50 +00:00
|
|
|
|
2017-10-26 21:47:13 +00:00
|
|
|
test.case("handles hover and click on desktops and mobile targets", check => {
|
2017-10-09 21:13:56 +00:00
|
|
|
let inputs = testgame.view.inputs;
|
2017-10-01 20:52:50 +00:00
|
|
|
|
2018-05-15 14:57:45 +00:00
|
|
|
let pointer = new Phaser.Input.Pointer(testgame.view.input.manager, 0);
|
2018-06-12 21:40:33 +00:00
|
|
|
pointer.buttons = 1;
|
2018-05-15 14:57:45 +00:00
|
|
|
function newButton(): [UIImage, { enter: Mock<Function>, leave: Mock<Function>, click: Mock<Function> }] {
|
|
|
|
let button = new UIImage(testgame.view, 0, 0, "fake");
|
2017-10-29 21:08:55 +00:00
|
|
|
let mocks = {
|
|
|
|
enter: check.mockfunc("enter"),
|
|
|
|
leave: check.mockfunc("leave"),
|
|
|
|
click: check.mockfunc("click"),
|
2017-10-01 20:52:50 +00:00
|
|
|
};
|
2017-10-29 21:08:55 +00:00
|
|
|
inputs.setHoverClick(button, mocks.enter.func, mocks.leave.func, mocks.click.func, 50, 100);
|
2017-10-01 20:52:50 +00:00
|
|
|
(<any>inputs).hovered = null;
|
2017-10-29 21:08:55 +00:00
|
|
|
return [button, mocks];
|
2017-10-01 20:52:50 +00:00
|
|
|
}
|
2018-05-15 14:57:45 +00:00
|
|
|
let enter = (button: UIImage) => button.emit("pointerover", pointer);
|
|
|
|
let leave = (button: UIImage) => button.emit("pointerout", pointer);
|
|
|
|
let press = (button: UIImage) => button.emit("pointerdown", pointer);
|
|
|
|
let release = (button: UIImage) => button.emit("pointerup", pointer);
|
|
|
|
let destroy = (button: UIImage) => button.emit("destroy");
|
2017-10-01 20:52:50 +00:00
|
|
|
|
2017-10-29 21:08:55 +00:00
|
|
|
let [button, mocks] = newButton();
|
2018-05-15 14:57:45 +00:00
|
|
|
check.in("Simple click on desktop", check => {
|
|
|
|
enter(button);
|
|
|
|
press(button);
|
|
|
|
release(button);
|
|
|
|
check.called(mocks.enter, 0);
|
|
|
|
check.called(mocks.leave, 0);
|
|
|
|
check.called(mocks.click, 1);
|
|
|
|
});
|
2017-10-01 20:52:50 +00:00
|
|
|
|
2017-10-29 21:08:55 +00:00
|
|
|
[button, mocks] = newButton();
|
2018-05-15 14:57:45 +00:00
|
|
|
check.in("Simple click on mobile", check => {
|
|
|
|
press(button);
|
|
|
|
release(button);
|
|
|
|
check.called(mocks.enter, 1);
|
|
|
|
check.called(mocks.leave, 1);
|
|
|
|
check.called(mocks.click, 1);
|
|
|
|
});
|
2017-10-01 20:52:50 +00:00
|
|
|
|
2017-10-29 21:08:55 +00:00
|
|
|
[button, mocks] = newButton();
|
2018-05-15 14:57:45 +00:00
|
|
|
check.in("Leaves on destroy", check => {
|
|
|
|
press(button);
|
2018-06-07 21:03:22 +00:00
|
|
|
testgame.clockForward(150);
|
2018-05-15 14:57:45 +00:00
|
|
|
check.called(mocks.enter, 1);
|
|
|
|
check.called(mocks.leave, 0);
|
|
|
|
check.called(mocks.click, 0);
|
|
|
|
destroy(button);
|
|
|
|
check.called(mocks.enter, 0);
|
|
|
|
check.called(mocks.leave, 1);
|
|
|
|
check.called(mocks.click, 0);
|
|
|
|
press(button);
|
|
|
|
release(button);
|
|
|
|
check.called(mocks.enter, 0);
|
|
|
|
check.called(mocks.leave, 0);
|
|
|
|
check.called(mocks.click, 0);
|
|
|
|
});
|
|
|
|
|
|
|
|
check.in("Force-leave when hovering another button without clean leaving a first one", check => {
|
|
|
|
let [button1, funcs1] = newButton();
|
|
|
|
let [button2, funcs2] = newButton();
|
|
|
|
enter(button1);
|
2018-06-07 21:03:22 +00:00
|
|
|
testgame.clockForward(150);
|
2018-05-15 14:57:45 +00:00
|
|
|
check.called(funcs1.enter, 1);
|
|
|
|
check.called(funcs1.leave, 0);
|
|
|
|
check.called(funcs1.click, 0);
|
|
|
|
enter(button2);
|
|
|
|
check.called(funcs1.enter, 0);
|
|
|
|
check.called(funcs1.leave, 1);
|
|
|
|
check.called(funcs1.click, 0);
|
|
|
|
check.called(funcs2.enter, 0);
|
|
|
|
check.called(funcs2.leave, 0);
|
|
|
|
check.called(funcs2.click, 0);
|
2018-06-07 21:03:22 +00:00
|
|
|
testgame.clockForward(150);
|
2018-05-15 14:57:45 +00:00
|
|
|
check.called(funcs1.enter, 0);
|
|
|
|
check.called(funcs1.leave, 0);
|
|
|
|
check.called(funcs1.click, 0);
|
|
|
|
check.called(funcs2.enter, 1);
|
|
|
|
check.called(funcs2.leave, 0);
|
|
|
|
check.called(funcs2.click, 0);
|
|
|
|
});
|
2017-10-01 20:52:50 +00:00
|
|
|
|
2017-10-29 21:08:55 +00:00
|
|
|
[button, mocks] = newButton();
|
2018-05-15 14:57:45 +00:00
|
|
|
check.in("Hold to hover on mobile", check => {
|
|
|
|
button.emit("pointerdown", pointer);
|
2018-06-07 21:03:22 +00:00
|
|
|
testgame.clockForward(150);
|
2018-05-15 14:57:45 +00:00
|
|
|
check.called(mocks.enter, 1);
|
|
|
|
check.called(mocks.leave, 0);
|
|
|
|
check.called(mocks.click, 0);
|
|
|
|
button.emit("pointerup", pointer);
|
|
|
|
check.called(mocks.enter, 0);
|
|
|
|
check.called(mocks.leave, 1);
|
|
|
|
check.called(mocks.click, 0);
|
|
|
|
});
|
2018-06-12 21:40:33 +00:00
|
|
|
|
|
|
|
[button, mocks] = newButton();
|
|
|
|
pointer.buttons = 2;
|
|
|
|
check.in("No right button", check => {
|
|
|
|
enter(button);
|
|
|
|
press(button);
|
|
|
|
release(button);
|
|
|
|
check.called(mocks.enter, 0);
|
|
|
|
check.called(mocks.leave, 0);
|
|
|
|
check.called(mocks.click, 0);
|
|
|
|
});
|
2017-10-11 22:28:33 +00:00
|
|
|
});
|
2017-10-01 20:52:50 +00:00
|
|
|
});
|
|
|
|
}
|