mirror of
https://github.com/mapillary/mapillary-js.git
synced 2026-01-18 13:56:53 +00:00
1425 lines
55 KiB
TypeScript
1425 lines
55 KiB
TypeScript
import { switchMap } from "rxjs/operators";
|
|
import { Observable } from "rxjs";
|
|
import { EventHelper } from "../helper/EventHelper";
|
|
import { MouseService } from "../../src/viewer/MouseService";
|
|
|
|
describe("MouseService.ctor", () => {
|
|
test("should be definded", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
expect(mouseService).toBeDefined();
|
|
});
|
|
});
|
|
|
|
describe("MouseService.mouseDown$", () => {
|
|
test("should emit mouse down for mouse pointer type", done => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(
|
|
container,
|
|
canvasContainer,
|
|
domContainer,
|
|
doc);
|
|
|
|
mouseService.mouseDown$
|
|
.subscribe(
|
|
(event: PointerEvent): void => {
|
|
expect(event.type).toBe("pointerdown");
|
|
expect(event.pointerType).toBe("mouse");
|
|
done();
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent(
|
|
"pointerdown",
|
|
{ button: 0, pointerType: "mouse" },
|
|
canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
});
|
|
|
|
test("should emit mouse down for pen pointer type", done => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(
|
|
container,
|
|
canvasContainer,
|
|
domContainer,
|
|
doc);
|
|
|
|
mouseService.mouseDown$
|
|
.subscribe(
|
|
(event: PointerEvent): void => {
|
|
expect(event.type).toBe("pointerdown");
|
|
expect(event.pointerType).toBe("pen");
|
|
done();
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent(
|
|
"pointerdown",
|
|
{ button: 0, pointerType: "pen" },
|
|
canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
});
|
|
|
|
test("should not emit mouse down for touch pointer type", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(
|
|
container,
|
|
canvasContainer,
|
|
domContainer,
|
|
doc);
|
|
|
|
mouseService.mouseDown$
|
|
.subscribe(
|
|
(): void => {
|
|
fail();
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent(
|
|
"pointerdown",
|
|
{ button: 0, pointerType: "touch" },
|
|
canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
});
|
|
});
|
|
|
|
describe("MouseService.mouseDragStart$", () => {
|
|
test("should emit mouse drag start", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let mouseDragStartEmitCount = 0;
|
|
mouseService.mouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
mouseDragStartEmitCount++;
|
|
expect(event.button === 0);
|
|
expect(event.type).toBe("pointerdown");
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, canvasContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(mouseDragStartEmitCount).toBe(1);
|
|
});
|
|
|
|
test("should not emit mouse drag start when not left button", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let mouseDragStartEmitCount = 0;
|
|
mouseService.mouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
mouseDragStartEmitCount++;
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 1 }, canvasContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
});
|
|
});
|
|
|
|
describe("MouseService.mouseDrag$", () => {
|
|
test("should emit mouse drag", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let mouseDragEmitCount = 0;
|
|
mouseService.mouseDrag$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
mouseDragEmitCount++;
|
|
expect(event.type).toBe("pointermove");
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, canvasContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(mouseDragEmitCount).toBe(0);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(mouseDragEmitCount).toBe(1);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(mouseDragEmitCount).toBe(2);
|
|
});
|
|
|
|
test("should emit mouse drag after mouse drag start", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let mouseDragEmitCount = 0;
|
|
mouseService.mouseDrag$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
mouseDragEmitCount++;
|
|
});
|
|
|
|
let mouseDragStartEmitCount = 0;
|
|
mouseService.mouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
expect(mouseDragEmitCount).toBe(0);
|
|
mouseDragStartEmitCount++;
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, canvasContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
expect(mouseDragEmitCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(mouseDragStartEmitCount).toBe(1);
|
|
expect(mouseDragEmitCount).toBe(1);
|
|
});
|
|
|
|
test("should emit mouse drag after switch mapping from mouse drag start", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let emitCount = 0;
|
|
mouseService.mouseDragStart$.pipe(
|
|
switchMap(
|
|
(e: MouseEvent): Observable<MouseEvent> => {
|
|
return mouseService.mouseDrag$;
|
|
}))
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
emitCount++;
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, canvasContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, doc);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(emitCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(emitCount).toBe(1);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(emitCount).toBe(2);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(emitCount).toBe(3);
|
|
});
|
|
|
|
test("should emit filtered mouse drag after switch mapping from filtered mouse drag start", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.claimMouse("test", 1);
|
|
|
|
let emitCount = 0;
|
|
mouseService
|
|
.filtered$("test", mouseService.mouseDragStart$).pipe(
|
|
switchMap(
|
|
(e: MouseEvent): Observable<MouseEvent> => {
|
|
return mouseService.filtered$("test", mouseService.mouseDrag$);
|
|
}))
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
emitCount++;
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, canvasContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(emitCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(emitCount).toBe(1);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(emitCount).toBe(2);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(emitCount).toBe(3);
|
|
});
|
|
});
|
|
|
|
describe("MouseService.mouseDragEnd$", () => {
|
|
test("should emit mouse drag end on mouse up", (done: Function) => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.mouseDragEnd$
|
|
.subscribe(
|
|
(event: Event): void => {
|
|
done();
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, canvasContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
const mouseUpEvent = EventHelper.createMouseEvent("pointerup", {}, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
doc.dispatchEvent(mouseUpEvent);
|
|
});
|
|
|
|
test("should emit mouse drag end on window blur", (done: Function) => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.mouseDragEnd$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
done();
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, canvasContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
const blurEvent: UIEvent = EventHelper.createUIEvent("blur");
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
window.dispatchEvent(blurEvent);
|
|
});
|
|
});
|
|
|
|
describe("MouseService.domMouseDragStart$", () => {
|
|
test("should emit DOM mouse drag start", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let domMouseDragStartEmitCount = 0;
|
|
mouseService.domMouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
domMouseDragStartEmitCount++;
|
|
expect(event.button === 0);
|
|
expect(event.type).toBe("pointerdown");
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, domContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(domMouseDragStartEmitCount).toBe(0);
|
|
|
|
domContainer.dispatchEvent(mouseDownEvent);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(domMouseDragStartEmitCount).toBe(1);
|
|
});
|
|
|
|
test("should not emit DOM mouse drag start when not left button", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let domMouseDragStartEmitCount = 0;
|
|
mouseService.domMouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
domMouseDragStartEmitCount++;
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 1 }, domContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
|
|
domContainer.dispatchEvent(mouseDownEvent);
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
|
|
expect(domMouseDragStartEmitCount).toBe(0);
|
|
});
|
|
});
|
|
|
|
describe("MouseService.domMouseDrag$", () => {
|
|
test("should emit DOM mouse drag", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let domMouseDragEmitCount = 0;
|
|
mouseService.domMouseDrag$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
domMouseDragEmitCount++;
|
|
expect(event.type).toBe("pointermove");
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, domContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(domMouseDragEmitCount).toBe(0);
|
|
|
|
domContainer.dispatchEvent(mouseDownEvent);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(domMouseDragEmitCount).toBe(1);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(domMouseDragEmitCount).toBe(2);
|
|
});
|
|
|
|
test("should emit DOM mouse drag after DOM mouse drag start", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let domMouseDragEmitCount = 0;
|
|
mouseService.domMouseDrag$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
domMouseDragEmitCount++;
|
|
});
|
|
|
|
let domMouseDragStartEmitCount = 0;
|
|
mouseService.domMouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
expect(domMouseDragEmitCount).toBe(0);
|
|
domMouseDragStartEmitCount++;
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, domContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
|
|
domContainer.dispatchEvent(mouseDownEvent);
|
|
expect(domMouseDragStartEmitCount).toBe(0);
|
|
expect(domMouseDragEmitCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(domMouseDragStartEmitCount).toBe(1);
|
|
expect(domMouseDragEmitCount).toBe(1);
|
|
});
|
|
|
|
test("should emit DOM mouse drag after switch mapping from DOM mouse drag start", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let emitCount = 0;
|
|
mouseService.domMouseDragStart$.pipe(
|
|
switchMap(
|
|
(e: MouseEvent): Observable<MouseEvent> => {
|
|
return mouseService.domMouseDrag$;
|
|
}))
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
emitCount++;
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, domContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, doc);
|
|
|
|
domContainer.dispatchEvent(mouseDownEvent);
|
|
expect(emitCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(emitCount).toBe(1);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(emitCount).toBe(2);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(emitCount).toBe(3);
|
|
});
|
|
|
|
test("should emit filtered DOM ouse drag after switch mapping from DOM filtered mouse drag start", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.claimMouse("test", 1);
|
|
|
|
let emitCount = 0;
|
|
mouseService
|
|
.filtered$("test", mouseService.domMouseDragStart$).pipe(
|
|
switchMap(
|
|
(e: MouseEvent): Observable<MouseEvent> => {
|
|
return mouseService.filtered$("test", mouseService.domMouseDrag$);
|
|
}))
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
emitCount++;
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, domContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
|
|
domContainer.dispatchEvent(mouseDownEvent);
|
|
expect(emitCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(emitCount).toBe(1);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(emitCount).toBe(2);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(emitCount).toBe(3);
|
|
});
|
|
});
|
|
|
|
describe("MouseService.domMouseDragEnd$", () => {
|
|
test("should emit DOM mouse drag end on DOM mouse up", (done: Function) => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.domMouseDragEnd$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
done();
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, domContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
const mouseUpEvent = EventHelper.createMouseEvent("pointerup", {}, document);
|
|
|
|
domContainer.dispatchEvent(mouseDownEvent);
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
doc.dispatchEvent(mouseUpEvent);
|
|
});
|
|
|
|
test("should emit DOM mouse drag end on window blur", (done: Function) => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.domMouseDragEnd$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
done();
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, domContainer);
|
|
const mouseMoveEvent = EventHelper.createMouseEvent("pointermove", {}, document);
|
|
const blurEvent: UIEvent = EventHelper.createUIEvent("blur");
|
|
|
|
domContainer.dispatchEvent(mouseDownEvent);
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
window.dispatchEvent(blurEvent);
|
|
});
|
|
});
|
|
|
|
describe("MouseService.claimMouse", () => {
|
|
test("should emit filtered after claiming mouse", (done: Function) => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.claimMouse("test", 0);
|
|
mouseService.filtered$("test", mouseService.mouseDown$)
|
|
.subscribe(
|
|
(mouseDown: MouseEvent): void => {
|
|
expect(mouseDown).toBeDefined();
|
|
done();
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
});
|
|
|
|
test("should not emit filtered if not claimed", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let mouseDownCount = 0;
|
|
mouseService.filtered$("test", mouseService.mouseDown$)
|
|
.subscribe(
|
|
(mouseDown: MouseEvent): void => {
|
|
mouseDownCount++;
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
|
|
expect(mouseDownCount).toBe(0);
|
|
});
|
|
|
|
test("should emit to highest z-index", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let mouseDownCount1 = 0;
|
|
mouseService.claimMouse("test1", 1);
|
|
mouseService.filtered$("test1", mouseService.mouseDown$)
|
|
.subscribe(
|
|
(mouseDown: MouseEvent): void => {
|
|
mouseDownCount1++;
|
|
});
|
|
|
|
let mouseDownCount2 = 0;
|
|
mouseService.claimMouse("test2", 2);
|
|
mouseService.filtered$("test2", mouseService.mouseDown$)
|
|
.subscribe(
|
|
(mouseDown: MouseEvent): void => {
|
|
mouseDownCount2++;
|
|
});
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
|
|
expect(mouseDownCount1).toBe(0);
|
|
expect(mouseDownCount2).toBe(1);
|
|
});
|
|
|
|
test("should emit to lower z-index after higher z-index unclaims", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let mouseDownCount1 = 0;
|
|
mouseService.claimMouse("test1", 1);
|
|
mouseService.filtered$("test1", mouseService.mouseDown$)
|
|
.subscribe(
|
|
(mouseDown: MouseEvent): void => {
|
|
mouseDownCount1++;
|
|
});
|
|
|
|
let mouseDownCount2 = 0;
|
|
mouseService.claimMouse("test2", 2);
|
|
mouseService.filtered$("test2", mouseService.mouseDown$)
|
|
.subscribe(
|
|
(mouseDown: MouseEvent): void => {
|
|
mouseDownCount2++;
|
|
});
|
|
|
|
mouseService.unclaimMouse("test2");
|
|
|
|
const mouseDownEvent = EventHelper.createMouseEvent("pointerdown", { button: 0 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
|
|
expect(mouseDownCount1).toBe(1);
|
|
expect(mouseDownCount2).toBe(0);
|
|
});
|
|
});
|
|
|
|
describe("MouseService.claimWheel", () => {
|
|
test("should emit filtered after claiming wheel", (done: Function) => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.claimWheel("test", 0);
|
|
mouseService.filteredWheel$("test", mouseService.mouseWheel$)
|
|
.subscribe(
|
|
(wheel: WheelEvent): void => {
|
|
expect(wheel).toBeDefined();
|
|
done();
|
|
});
|
|
|
|
const wheelEvent: WheelEvent = EventHelper.createWheelEvent("wheel", { button: 0 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(wheelEvent);
|
|
});
|
|
|
|
test("should not emit filtered if not claimed", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let wheelCount = 0;
|
|
mouseService.filteredWheel$("test", mouseService.mouseWheel$)
|
|
.subscribe(
|
|
(wheel: WheelEvent): void => {
|
|
wheelCount++;
|
|
});
|
|
|
|
const wheelEvent: WheelEvent = EventHelper.createWheelEvent("wheel", { button: 0 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(wheelEvent);
|
|
|
|
expect(wheelCount).toBe(0);
|
|
});
|
|
|
|
test("should emit to highest z-index", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let wheelCount1 = 0;
|
|
mouseService.claimWheel("test1", 1);
|
|
mouseService.filteredWheel$("test1", mouseService.mouseWheel$)
|
|
.subscribe(
|
|
(wheel: WheelEvent): void => {
|
|
wheelCount1++;
|
|
});
|
|
|
|
let wheelCount2 = 0;
|
|
mouseService.claimWheel("test2", 2);
|
|
mouseService.filteredWheel$("test2", mouseService.mouseWheel$)
|
|
.subscribe(
|
|
(wheel: WheelEvent): void => {
|
|
wheelCount2++;
|
|
});
|
|
|
|
const wheelEvent: WheelEvent = EventHelper.createWheelEvent("wheel", { button: 0 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(wheelEvent);
|
|
|
|
expect(wheelCount1).toBe(0);
|
|
expect(wheelCount2).toBe(1);
|
|
});
|
|
|
|
test("should emit to lower z-index after higher z-index unclaims", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let wheelCount1 = 0;
|
|
mouseService.claimWheel("test1", 1);
|
|
mouseService.filteredWheel$("test1", mouseService.mouseWheel$)
|
|
.subscribe(
|
|
(wheel: WheelEvent): void => {
|
|
wheelCount1++;
|
|
});
|
|
|
|
let wheelCount2 = 0;
|
|
mouseService.claimWheel("test2", 2);
|
|
mouseService.filteredWheel$("test2", mouseService.mouseWheel$)
|
|
.subscribe(
|
|
(wheel: WheelEvent): void => {
|
|
wheelCount2++;
|
|
});
|
|
|
|
mouseService.unclaimWheel("test2");
|
|
|
|
const wheelEvent: WheelEvent = EventHelper.createWheelEvent("wheel", { button: 0 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(wheelEvent);
|
|
|
|
expect(wheelCount1).toBe(1);
|
|
expect(wheelCount2).toBe(0);
|
|
});
|
|
});
|
|
|
|
describe("MouseService.deferPixels", () => {
|
|
test("should not defer mouse drag start if not specified", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let mouseDragStartEmitCount = 0;
|
|
mouseService.mouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
mouseDragStartEmitCount++;
|
|
expect(event.type).toBe("pointerdown");
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
const mouseMoveEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 50, clientY: 50 }, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(mouseDragStartEmitCount).toBe(1);
|
|
});
|
|
|
|
test("should not defer mouse drag start if deferring and undeferring", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.deferPixels("test", 10);
|
|
mouseService.undeferPixels("test");
|
|
|
|
let mouseDragStartEmitCount = 0;
|
|
mouseService.mouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
mouseDragStartEmitCount++;
|
|
expect(event.type).toBe("pointerdown");
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
const mouseMoveEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 50, clientY: 50 }, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(mouseDragStartEmitCount).toBe(1);
|
|
});
|
|
|
|
test("should emit when moving more than 1 pixel in x-direction if deferring 1 pixel", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.deferPixels("test", 1);
|
|
|
|
let mouseDragStartEmitCount = 0;
|
|
mouseService.mouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
mouseDragStartEmitCount++;
|
|
expect(event.type).toBe("pointerdown");
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent1: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 50, clientY: 50 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent1);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent2: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 51, clientY: 50 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent2);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent3: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 52, clientY: 50 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent3);
|
|
expect(mouseDragStartEmitCount).toBe(1);
|
|
});
|
|
|
|
test("should emit when moving more than 1 pixel in y-direction if deferring 1 pixel", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.deferPixels("test", 1);
|
|
|
|
let mouseDragStartEmitCount = 0;
|
|
mouseService.mouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
mouseDragStartEmitCount++;
|
|
expect(event.type).toBe("pointerdown");
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent1: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 50, clientY: 50 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent1);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent2: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 50, clientY: 51 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent2);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent3: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 50, clientY: 52 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent3);
|
|
expect(mouseDragStartEmitCount).toBe(1);
|
|
});
|
|
|
|
test("should emit when moving more than 1 pixel in diagonal direction if deferring 1 pixel", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.deferPixels("test", 1);
|
|
|
|
let mouseDragStartEmitCount = 0;
|
|
mouseService.mouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
mouseDragStartEmitCount++;
|
|
expect(event.type).toBe("pointerdown");
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent1: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 50, clientY: 50 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent1);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent2: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 49, clientY: 49 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent2);
|
|
expect(mouseDragStartEmitCount).toBe(1);
|
|
});
|
|
|
|
test("should use largest supplied deferred pixel value", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.deferPixels("test1", 2);
|
|
mouseService.deferPixels("test2", 4);
|
|
|
|
let mouseDragStartEmitCount = 0;
|
|
mouseService.mouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
mouseDragStartEmitCount++;
|
|
expect(event.type).toBe("pointerdown");
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent2: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 53, clientY: 50 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent2);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent3: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 55, clientY: 50 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent3);
|
|
expect(mouseDragStartEmitCount).toBe(1);
|
|
});
|
|
|
|
test("should use the largest value of the remaining after undeferring largest", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.deferPixels("test1", 2);
|
|
mouseService.deferPixels("test2", 4);
|
|
mouseService.undeferPixels("test2");
|
|
|
|
let mouseDragStartEmitCount = 0;
|
|
mouseService.mouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
mouseDragStartEmitCount++;
|
|
expect(event.type).toBe("pointerdown");
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent2: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 53, clientY: 50 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent2);
|
|
expect(mouseDragStartEmitCount).toBe(1);
|
|
});
|
|
|
|
test("should not emit when moving back towards mouse down position", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.deferPixels("test", 5);
|
|
|
|
let mouseDragStartEmitCount = 0;
|
|
mouseService.mouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
mouseDragStartEmitCount++;
|
|
expect(event.type).toBe("pointerdown");
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent1: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 55, clientY: 50 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent1);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent2: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 50, clientY: 50 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent2);
|
|
expect(mouseDragStartEmitCount).toBe(0);
|
|
});
|
|
|
|
test("should emit event of mouse move that passed pixel threshold for mouse drag", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.deferPixels("test", 1);
|
|
|
|
let mouseDragEmitCount = 0;
|
|
mouseService.mouseDrag$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
mouseDragEmitCount++;
|
|
expect(event.type).toBe("pointermove");
|
|
expect(event.clientX).toBe(52);
|
|
expect(event.clientY).toBe(53);
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(mouseDragEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent1: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 51, clientY: 50 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent1);
|
|
expect(mouseDragEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent2: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 52, clientY: 53 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent2);
|
|
expect(mouseDragEmitCount).toBe(1);
|
|
});
|
|
|
|
test("should not defer dom mouse drag start", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.deferPixels("test", 1);
|
|
|
|
let domMouseDragStartEmitCount = 0;
|
|
mouseService.domMouseDragStart$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
domMouseDragStartEmitCount++;
|
|
expect(event.type).toBe("pointerdown");
|
|
expect(event.clientX).toBe(50);
|
|
expect(event.clientY).toBe(50);
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, domContainer);
|
|
|
|
domContainer.dispatchEvent(mouseDownEvent);
|
|
expect(domMouseDragStartEmitCount).toBe(0);
|
|
|
|
const mouseMoveEvent1: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 50, clientY: 50 }, document);
|
|
doc.dispatchEvent(mouseMoveEvent1);
|
|
expect(domMouseDragStartEmitCount).toBe(1);
|
|
});
|
|
});
|
|
|
|
describe("MouseService.staticClick$", () => {
|
|
test("should emit if no mouse move occurs", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let staticClickCount = 0;
|
|
mouseService.staticClick$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
staticClickCount++;
|
|
expect(event.type).toBe("click");
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0 }, canvasContainer);
|
|
const clickEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("click", {}, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(staticClickCount).toBe(0);
|
|
|
|
canvasContainer.dispatchEvent(clickEvent);
|
|
expect(staticClickCount).toBe(1);
|
|
});
|
|
|
|
test("should not emit if mouse move is emitted before click irrespective of coordinates", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let staticClickCount = 0;
|
|
mouseService.staticClick$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
staticClickCount++;
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0 }, canvasContainer);
|
|
const mouseMoveEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", {}, document);
|
|
const clickEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("click", {}, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(staticClickCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(staticClickCount).toBe(0);
|
|
|
|
canvasContainer.dispatchEvent(clickEvent);
|
|
expect(staticClickCount).toBe(0);
|
|
});
|
|
});
|
|
|
|
describe("MouseService.proximateClick$", () => {
|
|
test("should emit if no mouse move occurs if deferred pixels not specified", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let proximateClickCount = 0;
|
|
mouseService.proximateClick$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
proximateClickCount++;
|
|
expect(event.type).toBe("click");
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
const clickEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("click", { clientX: 50, clientY: 50 }, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(proximateClickCount).toBe(0);
|
|
|
|
canvasContainer.dispatchEvent(clickEvent);
|
|
expect(proximateClickCount).toBe(1);
|
|
});
|
|
|
|
test("should emit if deferring and undeferring", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.deferPixels("test", 10);
|
|
mouseService.undeferPixels("test");
|
|
|
|
let proximateClickCount = 0;
|
|
mouseService.proximateClick$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
proximateClickCount++;
|
|
expect(event.type).toBe("click");
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
const clickEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("click", { clientX: 50, clientY: 50 }, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(proximateClickCount).toBe(0);
|
|
|
|
canvasContainer.dispatchEvent(clickEvent);
|
|
expect(proximateClickCount).toBe(1);
|
|
});
|
|
|
|
test("should not emit if mouse move is emitted if deferred pixels not specified", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
let proximateClickCount = 0;
|
|
mouseService.proximateClick$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
proximateClickCount++;
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
const mouseMoveEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 50, clientY: 50 }, document);
|
|
const clickEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("click", { clientX: 50, clientY: 50 }, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(proximateClickCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(proximateClickCount).toBe(0);
|
|
|
|
canvasContainer.dispatchEvent(clickEvent);
|
|
expect(proximateClickCount).toBe(0);
|
|
});
|
|
|
|
test("should emit if not moving outside deferred pixel threshold", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.deferPixels("test", 4);
|
|
|
|
let proximateClickCount = 0;
|
|
mouseService.proximateClick$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
proximateClickCount++;
|
|
expect(event.type).toBe("click");
|
|
expect(event.clientX).toBe(52);
|
|
expect(event.clientY).toBe(51);
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
const mouseMoveEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 52, clientY: 51 }, document);
|
|
const clickEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("click", { clientX: 52, clientY: 51 }, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(proximateClickCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(proximateClickCount).toBe(0);
|
|
|
|
canvasContainer.dispatchEvent(clickEvent);
|
|
expect(proximateClickCount).toBe(1);
|
|
});
|
|
|
|
test("should not emit if moving outside deferred pixel threshold", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.deferPixels("test", 1);
|
|
|
|
let proximateClickCount = 0;
|
|
mouseService.proximateClick$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
proximateClickCount++;
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
const mouseMoveEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 52, clientY: 50 }, document);
|
|
const clickEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("click", { clientX: 52, clientY: 50 }, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(proximateClickCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent);
|
|
expect(proximateClickCount).toBe(0);
|
|
|
|
canvasContainer.dispatchEvent(clickEvent);
|
|
expect(proximateClickCount).toBe(0);
|
|
});
|
|
|
|
test("should not emit if moving outside deferred pixel threshold and then inside again", () => {
|
|
const container = document.createElement("div");
|
|
const canvasContainer = document.createElement("div");
|
|
const domContainer = document.createElement("div");
|
|
const doc = document.createElement("div");
|
|
|
|
const mouseService = new MouseService(container, canvasContainer, domContainer, doc);
|
|
|
|
mouseService.deferPixels("test", 1);
|
|
|
|
let proximateClickCount = 0;
|
|
mouseService.proximateClick$
|
|
.subscribe(
|
|
(event: MouseEvent): void => {
|
|
proximateClickCount++;
|
|
});
|
|
|
|
const mouseDownEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("pointerdown", { button: 0, clientX: 50, clientY: 50 }, canvasContainer);
|
|
const mouseMoveEvent1: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 52, clientY: 50 }, document);
|
|
const mouseMoveEvent2: MouseEvent =
|
|
EventHelper.createMouseEvent("pointermove", { clientX: 50, clientY: 50 }, document);
|
|
const clickEvent: MouseEvent =
|
|
EventHelper.createMouseEvent("click", { clientX: 50, clientY: 50 }, document);
|
|
|
|
canvasContainer.dispatchEvent(mouseDownEvent);
|
|
expect(proximateClickCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent1);
|
|
expect(proximateClickCount).toBe(0);
|
|
|
|
doc.dispatchEvent(mouseMoveEvent2);
|
|
expect(proximateClickCount).toBe(0);
|
|
|
|
canvasContainer.dispatchEvent(clickEvent);
|
|
expect(proximateClickCount).toBe(0);
|
|
});
|
|
});
|