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 |
index bc955df349d57709f80265e1bf241f8171cebbff..ee5f312333cceab119156d79549531e72f380954 100644 |
--- a/third_party/WebKit/LayoutTests/sensor/resources/generic-sensor-tests.js |
+++ b/third_party/WebKit/LayoutTests/sensor/resources/generic-sensor-tests.js |
@@ -160,30 +160,39 @@ function runGenericSensorTests(sensorType, updateReading, verifyReading) { |
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); |
+ function checkOnChangeIsCalledAndReadingIsValid(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(); }); |
+ sensorObject.onchange = wrapper.callback; |
+ sensorObject.onerror = reject; |
+ }); |
+ }) |
+ .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); |
- return testPromise; |
- }, 'Test that onChange is called and sensor reading is valid.'); |
+ return testPromise; |
+ } |
+ |
+ sensor_test(sensor => { |
+ return checkOnChangeIsCalledAndReadingIsValid(sensor); |
+ }, 'Test that onChange is called and sensor reading is valid (onchange reporting).'); |
+ |
+ sensor_test(sensor => { |
+ sensor.mockSensorProvider.setContinuousReportingMode(); |
+ return checkOnChangeIsCalledAndReadingIsValid(sensor); |
+ }, 'Test that onChange is called and sensor reading is valid (continuous reporting).'); |
sensor_test(sensor => { |
let sensorObject = new sensorType; |
@@ -224,47 +233,101 @@ function runGenericSensorTests(sensorType, updateReading, verifyReading) { |
}, 'Test that sensor receives suspend / resume notifications when page' |
+ ' visibility changes.'); |
-sensor_test(sensor => { |
- let sensor1 = new sensorType({frequency: 60}); |
- sensor1.start(); |
+ 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)); |
+ let sensor2 = new sensorType({frequency: 20}); |
+ sensor2.start(); |
+ let testPromise = sensor.mockSensorProvider.getCreatedSensor() |
+ .then(mockSensor => { |
+ return mockSensor.setUpdateSensorReadingFunction(updateReading); |
+ }) |
+ .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); |
+ // 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)); |
+ // 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); |
+ sensor2.stop(); |
+ assert_equals(sensor2.reading, null); |
- // Cached reading remains. |
- assert_true(verifyReading(reading)); |
- resolve(mockSensor); |
- }, reject); |
+ // 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(); }); |
+ sensor1.onchange = wrapper.callback; |
+ sensor1.onerror = reject; |
+ sensor2.onerror = reject; |
+ }); |
+ }) |
+ .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); |
- return testPromise; |
-}, 'Test that sensor reading is correct.'); |
+ return testPromise; |
+ }, 'Test that sensor reading is correct.'); |
+ |
+ function checkFrequencyHintWorks(sensor) { |
+ let fastSensor = new sensorType({frequency: 30}); |
+ let slowSensor = new sensorType({frequency: 9}); |
+ slowSensor.start(); |
+ |
+ let testPromise = sensor.mockSensorProvider.getCreatedSensor() |
+ .then(mockSensor => { |
+ mockSensor.setExpectsModifiedReading(true); |
+ return mockSensor.setUpdateSensorReadingFunction(updateReading); |
+ }) |
+ .then(mockSensor => { |
+ return new Promise((resolve, reject) => { |
+ let fastSensorNotifiedCounter = 0; |
+ let slowSensorNotifiedCounter = 0; |
+ |
+ let fastSensorWrapper = new CallbackWrapper(() => { |
+ fastSensorNotifiedCounter++; |
+ }, reject); |
+ |
+ let slowSensorWrapper = new CallbackWrapper(() => { |
+ slowSensorNotifiedCounter++; |
+ if (slowSensorNotifiedCounter == 1) { |
+ fastSensor.start(); |
+ } else if (slowSensorNotifiedCounter == 2) { |
+ // By the moment slow sensor (9 Hz) is notified for the |
+ // next time, the fast sensor (30 Hz) has been notified |
+ // for int(30/9) = 3 times. |
+ assert_equals(fastSensorNotifiedCounter, 3); |
+ fastSensor.stop(); |
+ slowSensor.stop(); |
+ resolve(mockSensor); |
+ } |
+ }, reject); |
+ |
+ fastSensor.onchange = fastSensorWrapper.callback; |
+ slowSensor.onchange = slowSensorWrapper.callback; |
+ fastSensor.onerror = reject; |
+ slowSensor.onerror = reject; |
+ }); |
+ }) |
+ .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); |
+ |
+ return testPromise; |
+ } |
+ |
+ sensor_test(sensor => { |
+ return checkFrequencyHintWorks(sensor); |
+ }, 'Test that frequency hint works (onchange reporting).'); |
+ |
+ sensor_test(sensor => { |
+ sensor.mockSensorProvider.setContinuousReportingMode(); |
+ return checkFrequencyHintWorks(sensor); |
+ }, 'Test that frequency hint works (continuous reporting).'); |
} |