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

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

Issue 2908393002: [Sensors] Bindings for RelativeOrientationSensor (Closed)
Patch Set: updated webexposed tests results Created 3 years, 6 months 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 const prefix = sensorType.name + ': ';
8 sensor_test(sensor => { 9 sensor_test(sensor => {
9 sensor.mockSensorProvider.setGetSensorShouldFail(true); 10 sensor.mockSensorProvider.setGetSensorShouldFail(true);
10 let sensorObject = new sensorType; 11 let sensorObject = new sensorType;
11 sensorObject.start(); 12 sensorObject.start();
12 return new Promise((resolve, reject) => { 13 return new Promise((resolve, reject) => {
13 let wrapper = new CallbackWrapper(event => { 14 let wrapper = new CallbackWrapper(event => {
14 assert_false(sensorObject.activated); 15 assert_false(sensorObject.activated);
15 assert_equals(event.error.name, 'NotReadableError'); 16 assert_equals(event.error.name, 'NotReadableError');
16 sensorObject.onerror = null; 17 sensorObject.onerror = null;
17 resolve(); 18 resolve();
18 }, reject); 19 }, reject);
19 20
20 sensorObject.onerror = wrapper.callback; 21 sensorObject.onerror = wrapper.callback;
21 }); 22 });
22 }, 'Test that "onerror" is send when sensor is not supported.'); 23 }, prefix + 'Test that "onerror" is send when sensor is not supported.');
23 24
24 sensor_test(sensor => { 25 sensor_test(sensor => {
25 let sensorObject = new sensorType({frequency: 560}); 26 let sensorObject = new sensorType({frequency: 560});
26 sensorObject.start(); 27 sensorObject.start();
27 28
28 let testPromise = sensor.mockSensorProvider.getCreatedSensor() 29 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
29 .then(mockSensor => { 30 .then(mockSensor => {
30 mockSensor.setStartShouldFail(true); 31 mockSensor.setStartShouldFail(true);
31 return mockSensor.addConfigurationCalled(); }) 32 return mockSensor.addConfigurationCalled(); })
32 .then(mockSensor => { 33 .then(mockSensor => {
33 return new Promise((resolve, reject) => { 34 return new Promise((resolve, reject) => {
34 let wrapper = new CallbackWrapper(event => { 35 let wrapper = new CallbackWrapper(event => {
35 assert_false(sensorObject.activated); 36 assert_false(sensorObject.activated);
36 assert_equals(event.error.name, 'NotReadableError'); 37 assert_equals(event.error.name, 'NotReadableError');
37 sensorObject.onerror = null; 38 sensorObject.onerror = null;
38 resolve(); 39 resolve();
39 }, reject); 40 }, reject);
40 41
41 sensorObject.onerror = wrapper.callback; 42 sensorObject.onerror = wrapper.callback;
42 }); 43 });
43 }); 44 });
44 return testPromise; 45 return testPromise;
45 }, 'Test that "onerror" is send when start() call has failed.'); 46 }, prefix + 'Test that "onerror" is send when start() call has failed.');
46 47
47 sensor_test(sensor => { 48 sensor_test(sensor => {
48 let sensorObject = new sensorType({frequency: 560}); 49 let sensorObject = new sensorType({frequency: 560});
49 sensorObject.start(); 50 sensorObject.start();
50 51
51 let testPromise = sensor.mockSensorProvider.getCreatedSensor() 52 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
52 .then(mockSensor => { return mockSensor.addConfigurationCalled(); }) 53 .then(mockSensor => { return mockSensor.addConfigurationCalled(); })
53 .then(mockSensor => { 54 .then(mockSensor => {
54 return new Promise((resolve, reject) => { 55 return new Promise((resolve, reject) => {
55 let wrapper = new CallbackWrapper(() => { 56 let wrapper = new CallbackWrapper(() => {
56 let configuration = mockSensor.active_sensor_configurations_[0]; 57 let configuration = mockSensor.active_sensor_configurations_[0];
57 assert_equals(configuration.frequency, 60); 58 assert_equals(configuration.frequency, 60);
58 sensorObject.stop(); 59 sensorObject.stop();
59 assert_false(sensorObject.activated); 60 assert_false(sensorObject.activated);
60 resolve(mockSensor); 61 resolve(mockSensor);
61 }, reject); 62 }, reject);
62 sensorObject.onactivate = wrapper.callback; 63 sensorObject.onactivate = wrapper.callback;
63 sensorObject.onerror = reject; 64 sensorObject.onerror = reject;
64 }); 65 });
65 }) 66 })
66 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); } ); 67 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); } );
67 return testPromise; 68 return testPromise;
68 }, 'Test that frequency is capped to 60.0 Hz.'); 69 }, prefix + 'Test that frequency is capped to 60.0 Hz.');
69 70
70 sensor_test(sensor => { 71 sensor_test(sensor => {
71 let sensorObject = new sensorType(); 72 let sensorObject = new sensorType();
72 sensorObject.start(); 73 sensorObject.start();
73 return sensor.mockSensorProvider.getCreatedSensor() 74 return sensor.mockSensorProvider.getCreatedSensor()
74 .then(mockSensor => mockSensor.addConfigurationCalled()) 75 .then(mockSensor => mockSensor.addConfigurationCalled())
75 .then(mockSensor => { 76 .then(mockSensor => {
76 return new Promise((resolve, reject) => { 77 return new Promise((resolve, reject) => {
77 sensorObject.onactivate = () => { 78 sensorObject.onactivate = () => {
78 // Now sensor proxy is initialized. 79 // Now sensor proxy is initialized.
79 let anotherSensor = new sensorType({frequency: 21}); 80 let anotherSensor = new sensorType({frequency: 21});
80 anotherSensor.start(); 81 anotherSensor.start();
81 anotherSensor.stop(); 82 anotherSensor.stop();
82 resolve(mockSensor); 83 resolve(mockSensor);
83 } 84 }
84 }); 85 });
85 }) 86 })
86 .then(mockSensor => mockSensor.removeConfigurationCalled()) 87 .then(mockSensor => mockSensor.removeConfigurationCalled())
87 .then(mockSensor => { 88 .then(mockSensor => {
88 sensorObject.stop(); 89 sensorObject.stop();
89 return mockSensor; 90 return mockSensor;
90 }) 91 })
91 .then(mockSensor => mockSensor.removeConfigurationCalled()); 92 .then(mockSensor => mockSensor.removeConfigurationCalled());
92 }, 'Test that configuration is removed for a stopped sensor.'); 93 }, prefix + 'Test that configuration is removed for a stopped sensor.');
93 94
94 sensor_test(sensor => { 95 sensor_test(sensor => {
95 let maxSupportedFrequency = 15; 96 let maxSupportedFrequency = 15;
96 sensor.mockSensorProvider.setMaximumSupportedFrequency(maxSupportedFrequency ); 97 sensor.mockSensorProvider.setMaximumSupportedFrequency(maxSupportedFrequency );
97 let sensorObject = new sensorType({frequency: 50}); 98 let sensorObject = new sensorType({frequency: 50});
98 sensorObject.start(); 99 sensorObject.start();
99 let testPromise = sensor.mockSensorProvider.getCreatedSensor() 100 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
100 .then(mockSensor => { return mockSensor.addConfigurationCalled(); }) 101 .then(mockSensor => { return mockSensor.addConfigurationCalled(); })
101 .then(mockSensor => { 102 .then(mockSensor => {
102 return new Promise((resolve, reject) => { 103 return new Promise((resolve, reject) => {
103 let wrapper = new CallbackWrapper(() => { 104 let wrapper = new CallbackWrapper(() => {
104 let configuration = mockSensor.active_sensor_configurations_[0]; 105 let configuration = mockSensor.active_sensor_configurations_[0];
105 assert_equals(configuration.frequency, maxSupportedFrequency); 106 assert_equals(configuration.frequency, maxSupportedFrequency);
106 sensorObject.stop(); 107 sensorObject.stop();
107 assert_false(sensorObject.activated); 108 assert_false(sensorObject.activated);
108 resolve(mockSensor); 109 resolve(mockSensor);
109 }, reject); 110 }, reject);
110 sensorObject.onactivate = wrapper.callback; 111 sensorObject.onactivate = wrapper.callback;
111 sensorObject.onerror = reject; 112 sensorObject.onerror = reject;
112 }); 113 });
113 }) 114 })
114 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); 115 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
115 return testPromise; 116 return testPromise;
116 }, 'Test that frequency is capped to the maximum supported from frequency.'); 117 }, prefix + 'Test that frequency is capped to the maximum supported from frequ ency.');
117 118
118 sensor_test(sensor => { 119 sensor_test(sensor => {
119 let minSupportedFrequency = 2; 120 let minSupportedFrequency = 2;
120 sensor.mockSensorProvider.setMinimumSupportedFrequency(minSupportedFrequency ); 121 sensor.mockSensorProvider.setMinimumSupportedFrequency(minSupportedFrequency );
121 let sensorObject = new sensorType({frequency: -1}); 122 let sensorObject = new sensorType({frequency: -1});
122 sensorObject.start(); 123 sensorObject.start();
123 let testPromise = sensor.mockSensorProvider.getCreatedSensor() 124 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
124 .then(mockSensor => { return mockSensor.addConfigurationCalled(); }) 125 .then(mockSensor => { return mockSensor.addConfigurationCalled(); })
125 .then(mockSensor => { 126 .then(mockSensor => {
126 return new Promise((resolve, reject) => { 127 return new Promise((resolve, reject) => {
127 let wrapper = new CallbackWrapper(() => { 128 let wrapper = new CallbackWrapper(() => {
128 let configuration = mockSensor.active_sensor_configurations_[0]; 129 let configuration = mockSensor.active_sensor_configurations_[0];
129 assert_equals(configuration.frequency, minSupportedFrequency); 130 assert_equals(configuration.frequency, minSupportedFrequency);
130 sensorObject.stop(); 131 sensorObject.stop();
131 assert_false(sensorObject.activated); 132 assert_false(sensorObject.activated);
132 resolve(mockSensor); 133 resolve(mockSensor);
133 }, reject); 134 }, reject);
134 sensorObject.onactivate = wrapper.callback; 135 sensorObject.onactivate = wrapper.callback;
135 sensorObject.onerror = reject; 136 sensorObject.onerror = reject;
136 }); 137 });
137 }) 138 })
138 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); 139 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
139 return testPromise; 140 return testPromise;
140 }, 'Test that frequency is limited to the minimum supported from frequency.'); 141 }, prefix + 'Test that frequency is limited to the minimum supported from freq uency.');
141 142
142 sensor_test(sensor => { 143 sensor_test(sensor => {
143 let sensorObject = new sensorType({frequency: 60}); 144 let sensorObject = new sensorType({frequency: 60});
144 assert_false(sensorObject.activated); 145 assert_false(sensorObject.activated);
145 sensorObject.start(); 146 sensorObject.start();
146 assert_false(sensorObject.activated); 147 assert_false(sensorObject.activated);
147 let testPromise = sensor.mockSensorProvider.getCreatedSensor() 148 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
148 .then((mockSensor) => { 149 .then((mockSensor) => {
149 return new Promise((resolve, reject) => { 150 return new Promise((resolve, reject) => {
150 let wrapper = new CallbackWrapper(() => { 151 let wrapper = new CallbackWrapper(() => {
151 assert_true(sensorObject.activated); 152 assert_true(sensorObject.activated);
152 sensorObject.stop(); 153 sensorObject.stop();
153 assert_false(sensorObject.activated); 154 assert_false(sensorObject.activated);
154 resolve(mockSensor); 155 resolve(mockSensor);
155 }, reject); 156 }, reject);
156 sensorObject.onactivate = wrapper.callback; 157 sensorObject.onactivate = wrapper.callback;
157 sensorObject.onerror = reject; 158 sensorObject.onerror = reject;
158 }); 159 });
159 }) 160 })
160 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); 161 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
161 return testPromise; 162 return testPromise;
162 }, 'Test that sensor can be successfully created and its states are correct.') ; 163 }, prefix + 'Test that sensor can be successfully created and its states are c orrect.');
163 164
164 sensor_test(sensor => { 165 sensor_test(sensor => {
165 let sensorObject = new sensorType(); 166 let sensorObject = new sensorType();
166 sensorObject.start(); 167 sensorObject.start();
167 let testPromise = sensor.mockSensorProvider.getCreatedSensor() 168 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
168 .then((mockSensor) => { 169 .then((mockSensor) => {
169 return new Promise((resolve, reject) => { 170 return new Promise((resolve, reject) => {
170 let wrapper = new CallbackWrapper(() => { 171 let wrapper = new CallbackWrapper(() => {
171 assert_true(sensorObject.activated); 172 assert_true(sensorObject.activated);
172 sensorObject.stop(); 173 sensorObject.stop();
173 assert_false(sensorObject.activated); 174 assert_false(sensorObject.activated);
174 resolve(mockSensor); 175 resolve(mockSensor);
175 }, reject); 176 }, reject);
176 177
177 sensorObject.onactivate = wrapper.callback; 178 sensorObject.onactivate = wrapper.callback;
178 sensorObject.onerror = reject; 179 sensorObject.onerror = reject;
179 }); 180 });
180 }) 181 })
181 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); 182 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
182 return testPromise; 183 return testPromise;
183 }, 'Test that sensor can be constructed with default configuration.'); 184 }, prefix + 'Test that sensor can be constructed with default configuration.') ;
184 185
185 sensor_test(sensor => { 186 sensor_test(sensor => {
186 let sensorObject = new sensorType({frequency: 60}); 187 let sensorObject = new sensorType({frequency: 60});
187 sensorObject.start(); 188 sensorObject.start();
188 189
189 let testPromise = sensor.mockSensorProvider.getCreatedSensor() 190 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
190 .then(mockSensor => { return mockSensor.addConfigurationCalled(); }) 191 .then(mockSensor => { return mockSensor.addConfigurationCalled(); })
191 .then(mockSensor => { 192 .then(mockSensor => {
192 return new Promise((resolve, reject) => { 193 return new Promise((resolve, reject) => {
193 let wrapper = new CallbackWrapper(() => { 194 let wrapper = new CallbackWrapper(() => {
194 assert_true(sensorObject.activated); 195 assert_true(sensorObject.activated);
195 sensorObject.stop(); 196 sensorObject.stop();
196 assert_false(sensorObject.activated); 197 assert_false(sensorObject.activated);
197 resolve(mockSensor); 198 resolve(mockSensor);
198 }, reject); 199 }, reject);
199 sensorObject.onactivate = wrapper.callback; 200 sensorObject.onactivate = wrapper.callback;
200 sensorObject.onerror = reject; 201 sensorObject.onerror = reject;
201 }); 202 });
202 }) 203 })
203 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); 204 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
204 205
205 return testPromise; 206 return testPromise;
206 }, 'Test that addConfiguration and removeConfiguration is called.'); 207 }, prefix + 'Test that addConfiguration and removeConfiguration is called.');
207 208
208 function checkOnChangeIsCalledAndReadingIsValid(sensor) { 209 function checkOnChangeIsCalledAndReadingIsValid(sensor) {
209 let sensorObject = new sensorType({frequency: 60}); 210 let sensorObject = new sensorType({frequency: 60});
210 sensorObject.start(); 211 sensorObject.start();
211 let testPromise = sensor.mockSensorProvider.getCreatedSensor() 212 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
212 .then(mockSensor => { 213 .then(mockSensor => {
213 return mockSensor.setUpdateSensorReadingFunction(updateReading); 214 return mockSensor.setUpdateSensorReadingFunction(updateReading);
214 }) 215 })
215 .then((mockSensor) => { 216 .then((mockSensor) => {
216 return new Promise((resolve, reject) => { 217 return new Promise((resolve, reject) => {
217 let wrapper = new CallbackWrapper(() => { 218 let wrapper = new CallbackWrapper(() => {
218 assert_true(verifyReading(sensorObject)); 219 assert_true(verifyReading(sensorObject));
219 sensorObject.stop(); 220 sensorObject.stop();
220 assert_true(verifyReading(sensorObject, true /*should be null*/)); 221 assert_true(verifyReading(sensorObject, true /*should be null*/));
221 resolve(mockSensor); 222 resolve(mockSensor);
222 }, reject); 223 }, reject);
223 224
224 sensorObject.onchange = wrapper.callback; 225 sensorObject.onchange = wrapper.callback;
225 sensorObject.onerror = reject; 226 sensorObject.onerror = reject;
226 }); 227 });
227 }) 228 })
228 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); 229 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
229 230
230 return testPromise; 231 return testPromise;
231 } 232 }
232 233
233 sensor_test(sensor => { 234 sensor_test(sensor => {
234 return checkOnChangeIsCalledAndReadingIsValid(sensor); 235 return checkOnChangeIsCalledAndReadingIsValid(sensor);
235 }, 'Test that onChange is called and sensor reading is valid (onchange reporti ng).'); 236 }, prefix + 'Test that onChange is called and sensor reading is valid (onchang e reporting).');
236 237
237 sensor_test(sensor => { 238 sensor_test(sensor => {
238 sensor.mockSensorProvider.setContinuousReportingMode(); 239 sensor.mockSensorProvider.setContinuousReportingMode();
239 return checkOnChangeIsCalledAndReadingIsValid(sensor); 240 return checkOnChangeIsCalledAndReadingIsValid(sensor);
240 }, 'Test that onChange is called and sensor reading is valid (continuous repor ting).'); 241 }, prefix + 'Test that onChange is called and sensor reading is valid (continu ous reporting).');
241 242
242 sensor_test(sensor => { 243 sensor_test(sensor => {
243 let sensorObject = new sensorType; 244 let sensorObject = new sensorType;
244 sensorObject.start(); 245 sensorObject.start();
245 let testPromise = sensor.mockSensorProvider.getCreatedSensor() 246 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
246 .then(mockSensor => { 247 .then(mockSensor => {
247 return mockSensor.setUpdateSensorReadingFunction(updateReading); 248 return mockSensor.setUpdateSensorReadingFunction(updateReading);
248 }) 249 })
249 .then(mockSensor => { 250 .then(mockSensor => {
250 return new Promise((resolve, reject) => { 251 return new Promise((resolve, reject) => {
(...skipping 17 matching lines...) Expand all
268 .then(mockSensor => { 269 .then(mockSensor => {
269 return new Promise((resolve, reject) => { 270 return new Promise((resolve, reject) => {
270 sensorObject.stop(); 271 sensorObject.stop();
271 resolve(mockSensor); 272 resolve(mockSensor);
272 sensorObject.onerror = reject; 273 sensorObject.onerror = reject;
273 }); 274 });
274 }) 275 })
275 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); 276 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
276 277
277 return testPromise; 278 return testPromise;
278 }, 'Test that sensor receives suspend / resume notifications when page' 279 }, prefix + 'Test that sensor receives suspend / resume notifications when pag e'
279 + ' visibility changes.'); 280 + ' visibility changes.');
280 281
281 sensor_test(sensor => { 282 sensor_test(sensor => {
282 let sensor1 = new sensorType({frequency: 60}); 283 let sensor1 = new sensorType({frequency: 60});
283 sensor1.start(); 284 sensor1.start();
284 285
285 let sensor2 = new sensorType({frequency: 20}); 286 let sensor2 = new sensorType({frequency: 20});
286 sensor2.start(); 287 sensor2.start();
287 let testPromise = sensor.mockSensorProvider.getCreatedSensor() 288 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
288 .then(mockSensor => { 289 .then(mockSensor => {
(...skipping 19 matching lines...) Expand all
308 }, reject); 309 }, reject);
309 310
310 sensor1.onchange = wrapper.callback; 311 sensor1.onchange = wrapper.callback;
311 sensor1.onerror = reject; 312 sensor1.onerror = reject;
312 sensor2.onerror = reject; 313 sensor2.onerror = reject;
313 }); 314 });
314 }) 315 })
315 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); 316 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
316 317
317 return testPromise; 318 return testPromise;
318 }, 'Test that sensor reading is correct.'); 319 }, prefix + 'Test that sensor reading is correct.');
319 320
320 function checkFrequencyHintWorks(sensor) { 321 function checkFrequencyHintWorks(sensor) {
321 let fastSensor = new sensorType({frequency: 30}); 322 let fastSensor = new sensorType({frequency: 30});
322 let slowSensor = new sensorType({frequency: 9}); 323 let slowSensor = new sensorType({frequency: 9});
323 slowSensor.start(); 324 slowSensor.start();
324 325
325 let testPromise = sensor.mockSensorProvider.getCreatedSensor() 326 let testPromise = sensor.mockSensorProvider.getCreatedSensor()
326 .then(mockSensor => { 327 .then(mockSensor => {
327 return mockSensor.setUpdateSensorReadingFunction(updateReading); 328 return mockSensor.setUpdateSensorReadingFunction(updateReading);
328 }) 329 })
(...skipping 30 matching lines...) Expand all
359 slowSensor.onerror = reject; 360 slowSensor.onerror = reject;
360 }); 361 });
361 }) 362 })
362 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); }); 363 .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
363 364
364 return testPromise; 365 return testPromise;
365 } 366 }
366 367
367 sensor_test(sensor => { 368 sensor_test(sensor => {
368 return checkFrequencyHintWorks(sensor); 369 return checkFrequencyHintWorks(sensor);
369 }, 'Test that frequency hint works (onchange reporting).'); 370 }, prefix + 'Test that frequency hint works (onchange reporting).');
370 371
371 sensor_test(sensor => { 372 sensor_test(sensor => {
372 sensor.mockSensorProvider.setContinuousReportingMode(); 373 sensor.mockSensorProvider.setContinuousReportingMode();
373 return checkFrequencyHintWorks(sensor); 374 return checkFrequencyHintWorks(sensor);
374 }, 'Test that frequency hint works (continuous reporting).'); 375 }, prefix + 'Test that frequency hint works (continuous reporting).');
375 } 376 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698