Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 'use strict'; | 1 'use strict'; |
| 2 | 2 |
| 3 // Run a set of tests for a given |sensorType|. |updateReading| is | 3 // Run a set of tests for a given |sensorType|. |updateReading| is |
| 4 // a called by the test to provide the mock values for sensor. |verifyReading| | 4 // a called by the test to provide the mock values for sensor. |verifyReading| |
| 5 // is called so that the value read in JavaScript are the values expected (the o nes | 5 // is called so that the value read in JavaScript are the values expected (the o nes |
| 6 // sent by |updateReading|). | 6 // sent by |updateReading|). |
| 7 function runGenericSensorTests(sensorType, updateReading, verifyReading) { | 7 function runGenericSensorTests(sensorType, updateReading, verifyReading) { |
| 8 test(() => assert_throws( | 8 test(() => assert_throws( |
| 9 new RangeError(), | 9 new RangeError(), |
| 10 () => new sensorType({frequency: -60})), | 10 () => new sensorType({frequency: -60})), |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 154 }, reject); | 154 }, reject); |
| 155 sensorObject.onactivate = wrapper.callback; | 155 sensorObject.onactivate = wrapper.callback; |
| 156 sensorObject.onerror = reject; | 156 sensorObject.onerror = reject; |
| 157 }); | 157 }); |
| 158 }) | 158 }) |
| 159 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); | 159 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); |
| 160 | 160 |
| 161 return testPromise; | 161 return testPromise; |
| 162 }, 'Test that addConfiguration and removeConfiguration is called.'); | 162 }, 'Test that addConfiguration and removeConfiguration is called.'); |
| 163 | 163 |
| 164 function checkOnChangeIsCalledAndReadingIsValid(sensor) { | |
| 165 let sensorObject = new sensorType({frequency: 60}); | |
| 166 sensorObject.start(); | |
| 167 let testPromise = sensor.mockSensorProvider.getCreatedSensor() | |
| 168 .then(mockSensor => { | |
| 169 return mockSensor.setUpdateSensorReadingFunction(updateReading); | |
| 170 }) | |
| 171 .then((mockSensor) => { | |
|
Reilly Grant (use Gerrit)
2016/11/28 19:22:53
nit: unnecessary parens
Mikhail
2016/11/30 10:31:30
Done.
| |
| 172 return new Promise((resolve, reject) => { | |
| 173 let wrapper = new CallbackWrapper(() => { | |
| 174 assert_true(verifyReading(sensorObject.reading)); | |
| 175 sensorObject.stop(); | |
| 176 assert_equals(sensorObject.reading, null); | |
| 177 resolve(mockSensor); | |
| 178 }, reject); | |
| 179 | |
| 180 sensorObject.onchange = wrapper.callback; | |
| 181 sensorObject.onerror = reject; | |
| 182 }); | |
| 183 }) | |
| 184 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); | |
| 185 | |
| 186 return testPromise; | |
| 187 } | |
| 188 | |
| 164 sensor_test(sensor => { | 189 sensor_test(sensor => { |
| 165 let sensorObject = new sensorType({frequency: 60}); | 190 return checkOnChangeIsCalledAndReadingIsValid(sensor); |
| 166 sensorObject.start(); | 191 }, 'Test that onChange is called and sensor reading is valid (onchange reporti ng).'); |
| 167 let testPromise = sensor.mockSensorProvider.getCreatedSensor() | |
| 168 .then(mockSensor => { | |
| 169 return mockSensor.setUpdateSensorReadingFunction(updateReading); | |
| 170 }) | |
| 171 .then((mockSensor) => { | |
| 172 return new Promise((resolve, reject) => { | |
| 173 let wrapper = new CallbackWrapper(() => { | |
| 174 assert_true(verifyReading(sensorObject.reading)); | |
| 175 sensorObject.stop(); | |
| 176 assert_equals(sensorObject.reading, null); | |
| 177 resolve(mockSensor); | |
| 178 }, reject); | |
| 179 | 192 |
| 180 sensorObject.onchange = wrapper.callback; | 193 sensor_test(sensor => { |
| 181 sensorObject.onerror = reject; | 194 sensor.mockSensorProvider.setContinuousReportingMode(); |
| 182 }); | 195 return checkOnChangeIsCalledAndReadingIsValid(sensor); |
| 183 }) | 196 }, 'Test that onChange is called and sensor reading is valid (continuous repor ting).'); |
| 184 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); | |
| 185 | |
| 186 return testPromise; | |
| 187 }, 'Test that onChange is called and sensor reading is valid.'); | |
| 188 | 197 |
| 189 sensor_test(sensor => { | 198 sensor_test(sensor => { |
| 190 let sensorObject = new sensorType; | 199 let sensorObject = new sensorType; |
| 191 sensorObject.start(); | 200 sensorObject.start(); |
| 192 let testPromise = sensor.mockSensorProvider.getCreatedSensor() | 201 let testPromise = sensor.mockSensorProvider.getCreatedSensor() |
| 193 .then(mockSensor => { | 202 .then(mockSensor => { |
| 194 return mockSensor.setUpdateSensorReadingFunction(updateReading); | 203 return mockSensor.setUpdateSensorReadingFunction(updateReading); |
| 195 }) | 204 }) |
| 196 .then(mockSensor => { | 205 .then(mockSensor => { |
| 197 return new Promise((resolve, reject) => { | 206 return new Promise((resolve, reject) => { |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 217 resolve(mockSensor); | 226 resolve(mockSensor); |
| 218 sensorObject.onerror = reject; | 227 sensorObject.onerror = reject; |
| 219 }); | 228 }); |
| 220 }) | 229 }) |
| 221 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); | 230 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); |
| 222 | 231 |
| 223 return testPromise; | 232 return testPromise; |
| 224 }, 'Test that sensor receives suspend / resume notifications when page' | 233 }, 'Test that sensor receives suspend / resume notifications when page' |
| 225 + ' visibility changes.'); | 234 + ' visibility changes.'); |
| 226 | 235 |
| 227 sensor_test(sensor => { | 236 sensor_test(sensor => { |
| 228 let sensor1 = new sensorType({frequency: 60}); | 237 let sensor1 = new sensorType({frequency: 60}); |
| 229 sensor1.start(); | 238 sensor1.start(); |
| 230 | 239 |
| 231 let sensor2 = new sensorType({frequency: 20}); | 240 let sensor2 = new sensorType({frequency: 20}); |
| 232 sensor2.start(); | 241 sensor2.start(); |
| 233 let testPromise = sensor.mockSensorProvider.getCreatedSensor() | 242 let testPromise = sensor.mockSensorProvider.getCreatedSensor() |
| 234 .then(mockSensor => { | 243 .then(mockSensor => { |
| 235 return mockSensor.setUpdateSensorReadingFunction(update_sensor_reading); | 244 return mockSensor.setUpdateSensorReadingFunction(updateReading); |
| 236 }) | 245 }) |
| 237 .then((mockSensor) => { | 246 .then((mockSensor) => { |
| 238 return new Promise((resolve, reject) => { | 247 return new Promise((resolve, reject) => { |
| 239 let wrapper = new CallbackWrapper(() => { | 248 let wrapper = new CallbackWrapper(() => { |
| 240 // Reading value is correct. | 249 // Reading value is correct. |
| 241 assert_true(verifyReading(sensor1.reading)); | 250 assert_true(verifyReading(sensor1.reading)); |
| 242 | 251 |
| 243 // Both sensors share the same reading instance. | 252 // Both sensors share the same reading instance. |
| 244 let reading = sensor1.reading; | 253 let reading = sensor1.reading; |
| 245 assert_equals(reading, sensor2.reading); | 254 assert_equals(reading, sensor2.reading); |
| 246 | 255 |
| 247 // After first sensor stops its reading is null, reading for second | 256 // After first sensor stops its reading is null, reading for secon d |
| 248 // sensor sensor remains. | 257 // sensor sensor remains. |
| 249 sensor1.stop(); | 258 sensor1.stop(); |
| 250 assert_equals(sensor1.reading, null); | 259 assert_equals(sensor1.reading, null); |
| 251 assert_true(verifyReading(sensor2.reading)); | 260 assert_true(verifyReading(sensor2.reading)); |
| 252 | 261 |
| 253 sensor2.stop(); | 262 sensor2.stop(); |
| 254 assert_equals(sensor2.reading, null); | 263 assert_equals(sensor2.reading, null); |
| 255 | 264 |
| 256 // Cached reading remains. | 265 // Cached reading remains. |
| 257 assert_true(verifyReading(reading)); | 266 assert_true(verifyReading(reading)); |
| 258 resolve(mockSensor); | 267 resolve(mockSensor); |
| 259 }, reject); | 268 }, reject); |
| 260 | 269 |
| 261 sensor1.onchange = wrapper.callback; | 270 sensor1.onchange = wrapper.callback; |
| 262 sensor1.onerror = reject; | 271 sensor1.onerror = reject; |
| 263 sensor2.onerror = reject; | 272 sensor2.onerror = reject; |
|
Reilly Grant (use Gerrit)
2016/11/28 19:22:53
What about onchange for sensor2?
Mikhail
2016/11/30 10:31:30
This test checks that all sensor instances share t
| |
| 264 }); | 273 }); |
| 265 }) | 274 }) |
| 266 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); | 275 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); |
| 267 | 276 |
| 268 return testPromise; | 277 return testPromise; |
| 269 }, 'Test that sensor reading is correct.'); | 278 }, 'Test that sensor reading is correct.'); |
| 279 | |
| 280 function checkFrequencyHintWorks(sensor) { | |
| 281 let fastSensor = new sensorType({frequency: 30}); | |
| 282 let slowSensor = new sensorType({frequency: 9}); | |
| 283 slowSensor.start(); | |
| 284 | |
| 285 let testPromise = sensor.mockSensorProvider.getCreatedSensor() | |
| 286 .then(mockSensor => { | |
| 287 mockSensor.setExpectsModifiedReading(true); | |
| 288 return mockSensor.setUpdateSensorReadingFunction(updateReading); | |
| 289 }) | |
| 290 .then((mockSensor) => { | |
|
Reilly Grant (use Gerrit)
2016/11/28 19:22:53
nit: unnecessary parens
Mikhail
2016/11/30 10:31:30
Done.
| |
| 291 return new Promise((resolve, reject) => { | |
| 292 let fastSensorNotifiedCounter = 0; | |
| 293 let slowSensorNotifiedCounter = 0; | |
| 294 | |
| 295 let fastSensorWrapper = new CallbackWrapper(() => { | |
| 296 fastSensorNotifiedCounter++; | |
| 297 }, reject); | |
| 298 | |
| 299 let slowSensorWrapper = new CallbackWrapper(() => { | |
| 300 slowSensorNotifiedCounter++; | |
| 301 if (slowSensorNotifiedCounter == 1) { | |
| 302 fastSensor.start(); | |
| 303 } else if (slowSensorNotifiedCounter == 2) { | |
| 304 // By the moment slow sensor (9 Hz) is notified for the | |
| 305 // next time, the fast sensor (30 Hz) has been notified | |
| 306 // for int(30/9) = 3 times. | |
| 307 assert_equals(fastSensorNotifiedCounter, 3); | |
| 308 fastSensor.stop(); | |
| 309 slowSensor.stop(); | |
| 310 resolve(mockSensor); | |
| 311 } | |
| 312 }, reject); | |
| 313 | |
| 314 fastSensor.onchange = fastSensorWrapper.callback; | |
| 315 slowSensor.onchange = slowSensorWrapper.callback; | |
| 316 fastSensor.onerror = reject; | |
| 317 slowSensor.onerror = reject; | |
| 318 }); | |
| 319 }) | |
| 320 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); | |
| 321 | |
| 322 return testPromise; | |
| 323 } | |
| 324 | |
| 325 sensor_test(sensor => { | |
| 326 return checkFrequencyHintWorks(sensor); | |
| 327 }, 'Test that frequency hint works (onchange reporting).'); | |
| 328 | |
| 329 sensor_test(sensor => { | |
| 330 sensor.mockSensorProvider.setContinuousReportingMode(); | |
| 331 return checkFrequencyHintWorks(sensor); | |
| 332 }, 'Test that frequency hint works (continuous reporting).'); | |
| 270 } | 333 } |
| OLD | NEW |