|
1 | | -/* global assert, sinon, suite, test */ |
| 1 | +/* global assert, sinon, setup, suite, test */ |
| 2 | +import { entityFactory } from '../helpers.js'; |
2 | 3 | import * as trackedControlsUtils from 'utils/tracked-controls.js'; |
3 | 4 |
|
| 5 | +suite('checkControllerPresentAndSetup', function () { |
| 6 | + var el; |
| 7 | + var system; |
| 8 | + |
| 9 | + setup(function (done) { |
| 10 | + el = entityFactory(); |
| 11 | + setTimeout(() => { |
| 12 | + el.sceneEl.addEventListener('loaded', function () { |
| 13 | + system = el.sceneEl.systems['tracked-controls']; |
| 14 | + el.setAttribute('meta-touch-controls', {hand: 'left', model: false}); |
| 15 | + done(); |
| 16 | + }); |
| 17 | + }); |
| 18 | + }); |
| 19 | + |
| 20 | + test('tracked-controls.controller is set when controllerconnected fires on reconnect', function (done) { |
| 21 | + var controller = { |
| 22 | + handedness: 'left', |
| 23 | + profiles: ['oculus-touch-v3'] |
| 24 | + }; |
| 25 | + |
| 26 | + // Simulate the xrSession inputsourceschange event by setting |
| 27 | + // system.controllers and emitting controllersupdated, which is what |
| 28 | + // the tracked-controls system does in onInputSourcesChange. |
| 29 | + |
| 30 | + // First connection. |
| 31 | + system.controllers = [controller]; |
| 32 | + el.sceneEl.emit('controllersupdated', undefined, false); |
| 33 | + var updateControllerSpy = sinon.spy(el.components['tracked-controls'], 'updateController'); |
| 34 | + |
| 35 | + assert.ok(el.components['tracked-controls'].controller, 'controller set on first connect'); |
| 36 | + |
| 37 | + // Disconnect. |
| 38 | + system.controllers = []; |
| 39 | + el.sceneEl.emit('controllersupdated', undefined, false); |
| 40 | + assert.notOk(el.components['tracked-controls'].controller, 'controller cleared on disconnect'); |
| 41 | + |
| 42 | + // Reconnect. injectTrackedControls calls setAttribute('tracked-controls', ...) |
| 43 | + // with the same data as the first connection, so update/updateController would be |
| 44 | + // skipped without the explicit updateController call in checkControllerPresentAndSetup. |
| 45 | + system.controllers = [controller]; |
| 46 | + el.addEventListener('controllerconnected', function () { |
| 47 | + assert.ok(updateControllerSpy.called, |
| 48 | + 'updateController must be called before controllerconnected fires'); |
| 49 | + assert.ok(el.components['tracked-controls'].controller, |
| 50 | + 'controller must be set when controllerconnected fires on reconnect'); |
| 51 | + done(); |
| 52 | + }); |
| 53 | + el.sceneEl.emit('controllersupdated', undefined, false); |
| 54 | + }); |
| 55 | +}); |
| 56 | + |
4 | 57 | suite('onButtonEvent', function () { |
5 | 58 | test('reemit button event based on mappings', function () { |
6 | 59 | var mockedComponent = { |
|
0 commit comments