Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: third_party/WebKit/LayoutTests/sensor/resources/generic-sensor-tests.js

Issue 2534703002: [Sensors] Layouts test to check frequency hint (Closed)
Patch Set: fixed MagnetometerReading::isReadingUpdated Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698