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

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: Comments from Reilly 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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 }, reject); 153 }, reject);
154 sensorObject.onactivate = wrapper.callback; 154 sensorObject.onactivate = wrapper.callback;
155 sensorObject.onerror = reject; 155 sensorObject.onerror = reject;
156 }); 156 });
157 }) 157 })
158 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); 158 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
159 159
160 return testPromise; 160 return testPromise;
161 }, 'Test that addConfiguration and removeConfiguration is called.'); 161 }, 'Test that addConfiguration and removeConfiguration is called.');
162 162
163 function checkOnChangeIsCalledAndReadingIsValid(sensor) {
164 let sensorObject = new sensorType({frequency: 60});
165 sensorObject.start();
166 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
167 .then(mockSensor => {
168 return mockSensor.setUpdateSensorReadingFunction(updateReading);
169 })
170 .then((mockSensor) => {
171 return new Promise((resolve, reject) => {
172 let wrapper = new CallbackWrapper(() => {
173 assert_true(verifyReading(sensorObject.reading));
174 sensorObject.stop();
175 assert_equals(sensorObject.reading, null);
176 resolve(mockSensor);
177 }, reject);
178
179 sensorObject.onchange = wrapper.callback;
180 sensorObject.onerror = reject;
181 });
182 })
183 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
184
185 return testPromise;
186 }
187
163 sensor_test(sensor => { 188 sensor_test(sensor => {
164 let sensorObject = new sensorType({frequency: 60}); 189 return checkOnChangeIsCalledAndReadingIsValid(sensor);
165 sensorObject.start(); 190 }, 'Test that onChange is called and sensor reading is valid (onchange reporti ng).');
166 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
167 .then(mockSensor => {
168 return mockSensor.setUpdateSensorReadingFunction(updateReading);
169 })
170 .then((mockSensor) => {
171 return new Promise((resolve, reject) => {
172 let wrapper = new CallbackWrapper(() => {
173 assert_true(verifyReading(sensorObject.reading));
174 sensorObject.stop();
175 assert_equals(sensorObject.reading, null);
176 resolve(mockSensor);
177 }, reject);
178 191
179 sensorObject.onchange = wrapper.callback; 192 sensor_test(sensor => {
180 sensorObject.onerror = reject; 193 sensor.mockSensorProvider.setContinuousReportingMode();
181 }); 194 return checkOnChangeIsCalledAndReadingIsValid(sensor);
182 }) 195 }, 'Test that onChange is called and sensor reading is valid (continuous repor ting).');
183 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
184
185 return testPromise;
186 }, 'Test that onChange is called and sensor reading is valid.');
187 196
188 sensor_test(sensor => { 197 sensor_test(sensor => {
189 let sensorObject = new sensorType; 198 let sensorObject = new sensorType;
190 sensorObject.start(); 199 sensorObject.start();
191 let testPromise = sensor.mockSensorProvider.getCreatedSensor() 200 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
192 .then(mockSensor => { 201 .then(mockSensor => {
193 return mockSensor.setUpdateSensorReadingFunction(updateReading); 202 return mockSensor.setUpdateSensorReadingFunction(updateReading);
194 }) 203 })
195 .then(mockSensor => { 204 .then(mockSensor => {
196 return new Promise((resolve, reject) => { 205 return new Promise((resolve, reject) => {
(...skipping 20 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;
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 => {
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