| Index: third_party/WebKit/LayoutTests/sensor/resources/generic-sensor-tests.js
|
| diff --git a/third_party/WebKit/LayoutTests/sensor/resources/generic-sensor-tests.js b/third_party/WebKit/LayoutTests/sensor/resources/generic-sensor-tests.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..13de62727ec91ca18b605b58a57a449fb3557bf1
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/sensor/resources/generic-sensor-tests.js
|
| @@ -0,0 +1,270 @@
|
| +'use strict';
|
| +
|
| +// Run a set of tests for a given |sensorType|. |updateReading| is
|
| +// a called by the test to provide the mock values for sensor. |verifyReading|
|
| +// is called so that the value read in JavaScript are the values expected (the ones
|
| +// sent by |updateReading|).
|
| +function runGenericSensorTests(sensorType, updateReading, verifyReading) {
|
| + test(() => assert_throws(
|
| + new RangeError(),
|
| + () => new sensorType({frequency: -60})),
|
| + 'Test that negative frequency causes exception from constructor.');
|
| +
|
| + sensor_test(sensor => {
|
| + sensor.mockSensorProvider.setGetSensorShouldFail(true);
|
| + let sensorObject = new sensorType;
|
| + sensorObject.start();
|
| + return new Promise((resolve, reject) => {
|
| + let wrapper = new CallbackWrapper(event => {
|
| + assert_equals(sensorObject.state, 'errored');
|
| + console.log(event.error.message);
|
| + assert_equals(event.error.name, 'NotFoundError');
|
| + sensorObject.onerror = null;
|
| + resolve();
|
| + }, reject);
|
| +
|
| + sensorObject.onerror = wrapper.callback;
|
| + });
|
| + }, 'Test that "onerror" is send when sensor is not supported.');
|
| +
|
| + sensor_test(sensor => {
|
| + let sensorObject = new sensorType({frequency: 560});
|
| + sensorObject.start();
|
| +
|
| + let testPromise = sensor.mockSensorProvider.getCreatedSensor()
|
| + .then(mockSensor => {
|
| + mockSensor.setStartShouldFail(true);
|
| + return mockSensor.addConfigurationCalled(); })
|
| + .then(mockSensor => {
|
| + return new Promise((resolve, reject) => {
|
| + let wrapper = new CallbackWrapper(event => {
|
| + assert_equals(sensorObject.state, 'errored');
|
| + assert_equals(event.error.name, 'OperationError');
|
| + sensorObject.onerror = null;
|
| + resolve();
|
| + }, reject);
|
| +
|
| + sensorObject.onerror = wrapper.callback;
|
| + });
|
| + });
|
| + return testPromise;
|
| + }, 'Test that "onerror" is send when start() call has failed.');
|
| +
|
| + sensor_test(sensor => {
|
| + let sensorObject = new sensorType({frequency: 560});
|
| + sensorObject.start();
|
| +
|
| + let testPromise = sensor.mockSensorProvider.getCreatedSensor()
|
| + .then(mockSensor => { return mockSensor.addConfigurationCalled(); })
|
| + .then(mockSensor => {
|
| + return new Promise((resolve, reject) => {
|
| + let wrapper = new CallbackWrapper(() => {
|
| + let configuration = mockSensor.active_sensor_configurations_[0];
|
| + assert_equals(configuration.frequency, 60);
|
| + sensorObject.stop();
|
| + assert_equals(sensorObject.state, 'idle');
|
| + resolve(mockSensor);
|
| + }, reject);
|
| + sensorObject.onactivate = wrapper.callback;
|
| + sensorObject.onerror = reject;
|
| + });
|
| + })
|
| + .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
|
| + return testPromise;
|
| + }, 'Test that frequency is capped to 60.0 Hz.');
|
| +
|
| + sensor_test(sensor => {
|
| + let maxSupportedFrequency = 15;
|
| + sensor.mockSensorProvider.setMaximumSupportedFrequency(maxSupportedFrequency);
|
| + let sensorObject = new sensorType({frequency: 50});
|
| + sensorObject.start();
|
| + let testPromise = sensor.mockSensorProvider.getCreatedSensor()
|
| + .then(mockSensor => { return mockSensor.addConfigurationCalled(); })
|
| + .then(mockSensor => {
|
| + return new Promise((resolve, reject) => {
|
| + let wrapper = new CallbackWrapper(() => {
|
| + let configuration = mockSensor.active_sensor_configurations_[0];
|
| + assert_equals(configuration.frequency, maxSupportedFrequency);
|
| + sensorObject.stop();
|
| + assert_equals(sensorObject.state, 'idle');
|
| + resolve(mockSensor);
|
| + }, reject);
|
| + sensorObject.onactivate = wrapper.callback;
|
| + sensorObject.onerror = reject;
|
| + });
|
| + })
|
| + .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
|
| + return testPromise;
|
| + }, 'Test that frequency is capped to the maximum supported from frequency.');
|
| +
|
| + sensor_test(sensor => {
|
| + let sensorObject = new sensorType({frequency: 60});
|
| + sensorObject.start();
|
| + let testPromise = sensor.mockSensorProvider.getCreatedSensor()
|
| + .then((mockSensor) => {
|
| + return new Promise((resolve, reject) => {
|
| + let wrapper = new CallbackWrapper(() => {
|
| + assert_equals(sensorObject.state, 'active');
|
| + sensorObject.stop();
|
| + assert_equals(sensorObject.state, 'idle');
|
| + resolve(mockSensor);
|
| + }, reject);
|
| + sensorObject.onactivate = wrapper.callback;
|
| + sensorObject.onerror = reject;
|
| + });
|
| + })
|
| + .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
|
| + return testPromise;
|
| + }, 'Test that sensor can be successfully created if sensor is supported.');
|
| +
|
| + sensor_test(sensor => {
|
| + let sensorObject = new sensorType();
|
| + sensorObject.start();
|
| + let testPromise = sensor.mockSensorProvider.getCreatedSensor()
|
| + .then((mockSensor) => {
|
| + return new Promise((resolve, reject) => {
|
| + let wrapper = new CallbackWrapper(() => {
|
| + assert_equals(sensorObject.state, 'active');
|
| + sensorObject.stop();
|
| + assert_equals(sensorObject.state, 'idle');
|
| + resolve(mockSensor);
|
| + }, reject);
|
| +
|
| + sensorObject.onactivate = wrapper.callback;
|
| + sensorObject.onerror = reject;
|
| + });
|
| + })
|
| + .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
|
| + return testPromise;
|
| + }, 'Test that sensor can be constructed with default configuration.');
|
| +
|
| + sensor_test(sensor => {
|
| + let sensorObject = new sensorType({frequency: 60});
|
| + sensorObject.start();
|
| +
|
| + let testPromise = sensor.mockSensorProvider.getCreatedSensor()
|
| + .then(mockSensor => { return mockSensor.addConfigurationCalled(); })
|
| + .then(mockSensor => {
|
| + return new Promise((resolve, reject) => {
|
| + let wrapper = new CallbackWrapper(() => {
|
| + assert_equals(sensorObject.state, 'active');
|
| + sensorObject.stop();
|
| + assert_equals(sensorObject.state, 'idle');
|
| + resolve(mockSensor);
|
| + }, reject);
|
| + sensorObject.onactivate = wrapper.callback;
|
| + sensorObject.onerror = reject;
|
| + });
|
| + })
|
| + .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
|
| +
|
| + return testPromise;
|
| + }, 'Test that addConfiguration and removeConfiguration is called.');
|
| +
|
| + sensor_test(sensor => {
|
| + let sensorObject = new sensorType({frequency: 60});
|
| + sensorObject.start();
|
| + let testPromise = sensor.mockSensorProvider.getCreatedSensor()
|
| + .then(mockSensor => {
|
| + return mockSensor.setUpdateSensorReadingFunction(updateReading);
|
| + })
|
| + .then((mockSensor) => {
|
| + return new Promise((resolve, reject) => {
|
| + let wrapper = new CallbackWrapper(() => {
|
| + assert_true(verifyReading(sensorObject.reading));
|
| + sensorObject.stop();
|
| + assert_equals(sensorObject.reading, null);
|
| + resolve(mockSensor);
|
| + }, reject);
|
| +
|
| + sensorObject.onchange = wrapper.callback;
|
| + sensorObject.onerror = reject;
|
| + });
|
| + })
|
| + .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
|
| +
|
| + return testPromise;
|
| + }, 'Test that onChange is called and sensor reading is valid.');
|
| +
|
| + sensor_test(sensor => {
|
| + let sensorObject = new sensorType;
|
| + sensorObject.start();
|
| + let testPromise = sensor.mockSensorProvider.getCreatedSensor()
|
| + .then(mockSensor => {
|
| + return mockSensor.setUpdateSensorReadingFunction(updateReading);
|
| + })
|
| + .then(mockSensor => {
|
| + return new Promise((resolve, reject) => {
|
| + sensorObject.onchange = () => {
|
| + if (verifyReading(sensorObject.reading)) {
|
| + resolve(mockSensor);
|
| + }
|
| + }
|
| + sensorObject.onerror = reject;
|
| + });
|
| + })
|
| + .then(mockSensor => {
|
| + testRunner.setPageVisibility('hidden');
|
| + return mockSensor.suspendCalled();
|
| + })
|
| + .then(mockSensor => {
|
| + testRunner.setPageVisibility('visible');
|
| + return mockSensor.resumeCalled();
|
| + })
|
| + .then(mockSensor => {
|
| + return new Promise((resolve, reject) => {
|
| + sensorObject.stop();
|
| + resolve(mockSensor);
|
| + sensorObject.onerror = reject;
|
| + });
|
| + })
|
| + .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
|
| +
|
| + return testPromise;
|
| + }, 'Test that sensor receives suspend / resume notifications when page'
|
| + + ' visibility changes.');
|
| +
|
| +sensor_test(sensor => {
|
| + let sensor1 = new sensorType({frequency: 60});
|
| + sensor1.start();
|
| +
|
| + let sensor2 = new sensorType({frequency: 20});
|
| + sensor2.start();
|
| + let testPromise = sensor.mockSensorProvider.getCreatedSensor()
|
| + .then(mockSensor => {
|
| + return mockSensor.setUpdateSensorReadingFunction(update_sensor_reading);
|
| + })
|
| + .then((mockSensor) => {
|
| + return new Promise((resolve, reject) => {
|
| + let wrapper = new CallbackWrapper(() => {
|
| + // Reading value is correct.
|
| + assert_true(verifyReading(sensor1.reading));
|
| +
|
| + // Both sensors share the same reading instance.
|
| + let reading = sensor1.reading;
|
| + assert_equals(reading, sensor2.reading);
|
| +
|
| + // After first sensor stops its reading is null, reading for second
|
| + // sensor sensor remains.
|
| + sensor1.stop();
|
| + assert_equals(sensor1.reading, null);
|
| + assert_true(verifyReading(sensor2.reading));
|
| +
|
| + sensor2.stop();
|
| + assert_equals(sensor2.reading, null);
|
| +
|
| + // Cached reading remains.
|
| + assert_true(verifyReading(reading));
|
| + resolve(mockSensor);
|
| + }, reject);
|
| +
|
| + sensor1.onchange = wrapper.callback;
|
| + sensor1.onerror = reject;
|
| + sensor2.onerror = reject;
|
| + });
|
| + })
|
| + .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
|
| +
|
| + return testPromise;
|
| +}, 'Test that sensor reading is correct.');
|
| +}
|
|
|