Chromium Code Reviews| 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..c991f7f0109fb7d1f5c6b1ac9138b927723c1bcd |
| --- /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]; |
|
Reilly Grant (use Gerrit)
2016/11/14 18:36:11
nit: Indentation issue.
|
| + 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) => { |
|
Reilly Grant (use Gerrit)
2016/11/14 18:36:11
nit: Parenthesis not necessary around mockSensor h
|
| + return new Promise((resolve, reject) => { |
| + sensorObject.onchange = () => { |
| + if (verifyReading(sensorObject.reading)) { |
| + resolve(mockSensor); |
| + } |
| + } |
| + sensorObject.onerror = reject; |
| + }); |
| + }) |
| + .then((mockSensor) => { |
| + testRunner.setPageVisibility("hidden"); |
|
Reilly Grant (use Gerrit)
2016/11/14 18:36:11
nit: 'hidden'
|
| + return mockSensor.suspendCalled(); |
| + }) |
| + .then((mockSensor) => { |
| + testRunner.setPageVisibility("visible"); |
|
Reilly Grant (use Gerrit)
2016/11/14 18:36:11
nit: '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.'); |
| +} |