'use strict'; /** * Use this to mock mouse/touch/pointer events * * @class */ class MockPointer { /** * @param {PIXI.Container} stage - The root of the scene tree * @param {number} [width=100] - Width of the renderer * @param {number} [height=100] - Height of the renderer */ constructor(stage, width, height) { this.stage = stage; this.renderer = new PIXI.CanvasRenderer(width || 100, height || 100); this.renderer.sayHello = () => { /* empty */ }; this.interaction = this.renderer.plugins.interaction; } /** * @private * @param {number} x - pointer x position * @param {number} y - pointer y position */ setPosition(x, y) { this.renderer.plugins.interaction.mapPositionToPoint = (point) => { point.x = x; point.y = y; }; } /** * @private */ render() { this.renderer.render(this.stage); } /** * @param {number} x - pointer x position * @param {number} y - pointer y position */ click(x, y) { this.mousedown(x, y); this.mouseup(x, y); } /** * @param {number} x - pointer x position * @param {number} y - pointer y position */ mousedown(x, y) { this.setPosition(x, y); this.render(); this.interaction.onMouseDown({ clientX: 0, clientY: 0, preventDefault: sinon.stub() }); } /** * @param {number} x - pointer x position * @param {number} y - pointer y position */ mouseup(x, y) { this.setPosition(x, y); this.render(); this.interaction.onMouseUp({ clientX: 0, clientY: 0, preventDefault: sinon.stub() }); } /** * @param {number} x - pointer x position * @param {number} y - pointer y position */ tap(x, y) { this.touchstart(x, y); this.touchend(x, y); } /** * @param {number} x - pointer x position * @param {number} y - pointer y position */ touchstart(x, y) { this.setPosition(x, y); this.render(); this.interaction.onTouchStart({ preventDefault: sinon.stub(), changedTouches: [new Touch({ identifier: 0, target: this.renderer.view })], }); } /** * @param {number} x - pointer x position * @param {number} y - pointer y position */ touchend(x, y) { this.setPosition(x, y); this.render(); this.interaction.onTouchEnd({ preventDefault: sinon.stub(), changedTouches: [new Touch({ identifier: 0, target: this.renderer.view })], }); } } module.exports = MockPointer;