| <html>Pages with sensor script</html> |
| <script> |
| let sensor; |
| // Handles one event, pushing it to |values| and calling |
| // |pendingResolve| if set. |
| function handleEvent(event) { |
| if (sensor.illuminance) { |
| // For Ambient Sensor. |
| values.push(sensor.illuminance); |
| } else { |
| values.push(sensor.x); |
| } |
| if (pendingResolve !== null) { |
| pendingResolve('event'); |
| pendingResolve = null; |
| } |
| } |
| // Collects values that have happened so far. |
| var values = []; |
| // If set, will be called by handleEvent. |
| var pendingResolve = null; |
| |
| // Returns a promise that will resolve when the events array has at least |
| // |eventCountMin| elements. Returns the number of elements. |
| function waitForEventsPromise(eventCountMin) { |
| if (values.length >= eventCountMin) { |
| return Promise.resolve(values.length); |
| } |
| return new Promise(resolve => { |
| pendingResolve = resolve; |
| }).then(() => waitForEventsPromise(eventCountMin)); |
| } |
| |
| // Ensure that that |expected| matches all the values. |
| function validateEvents(expected) { |
| if (expected === null) { |
| return "fail expected === null"; |
| } |
| let count = 0; |
| for (value of values) { |
| count++; |
| if (Math.abs(value - expected) > 0.01) { |
| return `fail - ${count}/${values.length}: ` + |
| `${expected} != ${value}`; |
| } |
| } |
| return 'pass'; |
| } |
| </script> |