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

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

Issue 2494773004: [sensors] Improve the generic sensors current layout tests. (Closed)
Patch Set: Fix Reilly comments Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/LayoutTests/sensor/ambient-light-sensor.html ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/LayoutTests/sensor/resources/generic-sensor-tests.js
diff --git a/third_party/WebKit/LayoutTests/sensor/resources/generic-sensor-tests.js b/third_party/WebKit/LayoutTests/sensor/resources/generic-sensor-tests.js
new file mode 100644
index 0000000000000000000000000000000000000000..13de62727ec91ca18b605b58a57a449fb3557bf1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/sensor/resources/generic-sensor-tests.js
@@ -0,0 +1,270 @@
+'use strict';
+
+// Run a set of tests for a given |sensorType|. |updateReading| is
+// a called by the test to provide the mock values for sensor. |verifyReading|
+// is called so that the value read in JavaScript are the values expected (the ones
+// sent by |updateReading|).
+function runGenericSensorTests(sensorType, updateReading, verifyReading) {
+ test(() => assert_throws(
+ new RangeError(),
+ () => new sensorType({frequency: -60})),
+ 'Test that negative frequency causes exception from constructor.');
+
+ sensor_test(sensor => {
+ sensor.mockSensorProvider.setGetSensorShouldFail(true);
+ let sensorObject = new sensorType;
+ sensorObject.start();
+ return new Promise((resolve, reject) => {
+ let wrapper = new CallbackWrapper(event => {
+ assert_equals(sensorObject.state, 'errored');
+ console.log(event.error.message);
+ assert_equals(event.error.name, 'NotFoundError');
+ sensorObject.onerror = null;
+ resolve();
+ }, reject);
+
+ sensorObject.onerror = wrapper.callback;
+ });
+ }, 'Test that "onerror" is send when sensor is not supported.');
+
+ sensor_test(sensor => {
+ let sensorObject = new sensorType({frequency: 560});
+ sensorObject.start();
+
+ let testPromise = sensor.mockSensorProvider.getCreatedSensor()
+ .then(mockSensor => {
+ mockSensor.setStartShouldFail(true);
+ return mockSensor.addConfigurationCalled(); })
+ .then(mockSensor => {
+ return new Promise((resolve, reject) => {
+ let wrapper = new CallbackWrapper(event => {
+ assert_equals(sensorObject.state, 'errored');
+ assert_equals(event.error.name, 'OperationError');
+ sensorObject.onerror = null;
+ resolve();
+ }, reject);
+
+ sensorObject.onerror = wrapper.callback;
+ });
+ });
+ return testPromise;
+ }, 'Test that "onerror" is send when start() call has failed.');
+
+ sensor_test(sensor => {
+ let sensorObject = new sensorType({frequency: 560});
+ sensorObject.start();
+
+ let testPromise = sensor.mockSensorProvider.getCreatedSensor()
+ .then(mockSensor => { return mockSensor.addConfigurationCalled(); })
+ .then(mockSensor => {
+ return new Promise((resolve, reject) => {
+ let wrapper = new CallbackWrapper(() => {
+ let configuration = mockSensor.active_sensor_configurations_[0];
+ assert_equals(configuration.frequency, 60);
+ sensorObject.stop();
+ assert_equals(sensorObject.state, 'idle');
+ resolve(mockSensor);
+ }, reject);
+ sensorObject.onactivate = wrapper.callback;
+ sensorObject.onerror = reject;
+ });
+ })
+ .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
+ return testPromise;
+ }, 'Test that frequency is capped to 60.0 Hz.');
+
+ sensor_test(sensor => {
+ let maxSupportedFrequency = 15;
+ sensor.mockSensorProvider.setMaximumSupportedFrequency(maxSupportedFrequency);
+ let sensorObject = new sensorType({frequency: 50});
+ sensorObject.start();
+ let testPromise = sensor.mockSensorProvider.getCreatedSensor()
+ .then(mockSensor => { return mockSensor.addConfigurationCalled(); })
+ .then(mockSensor => {
+ return new Promise((resolve, reject) => {
+ let wrapper = new CallbackWrapper(() => {
+ let configuration = mockSensor.active_sensor_configurations_[0];
+ assert_equals(configuration.frequency, maxSupportedFrequency);
+ sensorObject.stop();
+ assert_equals(sensorObject.state, 'idle');
+ resolve(mockSensor);
+ }, reject);
+ sensorObject.onactivate = wrapper.callback;
+ sensorObject.onerror = reject;
+ });
+ })
+ .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
+ return testPromise;
+ }, 'Test that frequency is capped to the maximum supported from frequency.');
+
+ sensor_test(sensor => {
+ let sensorObject = new sensorType({frequency: 60});
+ sensorObject.start();
+ let testPromise = sensor.mockSensorProvider.getCreatedSensor()
+ .then((mockSensor) => {
+ return new Promise((resolve, reject) => {
+ let wrapper = new CallbackWrapper(() => {
+ assert_equals(sensorObject.state, 'active');
+ sensorObject.stop();
+ assert_equals(sensorObject.state, 'idle');
+ resolve(mockSensor);
+ }, reject);
+ sensorObject.onactivate = wrapper.callback;
+ sensorObject.onerror = reject;
+ });
+ })
+ .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
+ return testPromise;
+ }, 'Test that sensor can be successfully created if sensor is supported.');
+
+ sensor_test(sensor => {
+ let sensorObject = new sensorType();
+ sensorObject.start();
+ let testPromise = sensor.mockSensorProvider.getCreatedSensor()
+ .then((mockSensor) => {
+ return new Promise((resolve, reject) => {
+ let wrapper = new CallbackWrapper(() => {
+ assert_equals(sensorObject.state, 'active');
+ sensorObject.stop();
+ assert_equals(sensorObject.state, 'idle');
+ resolve(mockSensor);
+ }, reject);
+
+ sensorObject.onactivate = wrapper.callback;
+ sensorObject.onerror = reject;
+ });
+ })
+ .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
+ return testPromise;
+ }, 'Test that sensor can be constructed with default configuration.');
+
+ sensor_test(sensor => {
+ let sensorObject = new sensorType({frequency: 60});
+ sensorObject.start();
+
+ let testPromise = sensor.mockSensorProvider.getCreatedSensor()
+ .then(mockSensor => { return mockSensor.addConfigurationCalled(); })
+ .then(mockSensor => {
+ return new Promise((resolve, reject) => {
+ let wrapper = new CallbackWrapper(() => {
+ assert_equals(sensorObject.state, 'active');
+ sensorObject.stop();
+ assert_equals(sensorObject.state, 'idle');
+ resolve(mockSensor);
+ }, reject);
+ sensorObject.onactivate = wrapper.callback;
+ sensorObject.onerror = reject;
+ });
+ })
+ .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
+
+ return testPromise;
+ }, 'Test that addConfiguration and removeConfiguration is called.');
+
+ sensor_test(sensor => {
+ let sensorObject = new sensorType({frequency: 60});
+ sensorObject.start();
+ let testPromise = sensor.mockSensorProvider.getCreatedSensor()
+ .then(mockSensor => {
+ return mockSensor.setUpdateSensorReadingFunction(updateReading);
+ })
+ .then((mockSensor) => {
+ return new Promise((resolve, reject) => {
+ let wrapper = new CallbackWrapper(() => {
+ assert_true(verifyReading(sensorObject.reading));
+ sensorObject.stop();
+ assert_equals(sensorObject.reading, null);
+ resolve(mockSensor);
+ }, reject);
+
+ sensorObject.onchange = wrapper.callback;
+ sensorObject.onerror = reject;
+ });
+ })
+ .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
+
+ return testPromise;
+ }, 'Test that onChange is called and sensor reading is valid.');
+
+ sensor_test(sensor => {
+ let sensorObject = new sensorType;
+ sensorObject.start();
+ let testPromise = sensor.mockSensorProvider.getCreatedSensor()
+ .then(mockSensor => {
+ return mockSensor.setUpdateSensorReadingFunction(updateReading);
+ })
+ .then(mockSensor => {
+ return new Promise((resolve, reject) => {
+ sensorObject.onchange = () => {
+ if (verifyReading(sensorObject.reading)) {
+ resolve(mockSensor);
+ }
+ }
+ sensorObject.onerror = reject;
+ });
+ })
+ .then(mockSensor => {
+ testRunner.setPageVisibility('hidden');
+ return mockSensor.suspendCalled();
+ })
+ .then(mockSensor => {
+ testRunner.setPageVisibility('visible');
+ return mockSensor.resumeCalled();
+ })
+ .then(mockSensor => {
+ return new Promise((resolve, reject) => {
+ sensorObject.stop();
+ resolve(mockSensor);
+ sensorObject.onerror = reject;
+ });
+ })
+ .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
+
+ return testPromise;
+ }, 'Test that sensor receives suspend / resume notifications when page'
+ + ' visibility changes.');
+
+sensor_test(sensor => {
+ let sensor1 = new sensorType({frequency: 60});
+ sensor1.start();
+
+ let sensor2 = new sensorType({frequency: 20});
+ sensor2.start();
+ let testPromise = sensor.mockSensorProvider.getCreatedSensor()
+ .then(mockSensor => {
+ return mockSensor.setUpdateSensorReadingFunction(update_sensor_reading);
+ })
+ .then((mockSensor) => {
+ return new Promise((resolve, reject) => {
+ let wrapper = new CallbackWrapper(() => {
+ // Reading value is correct.
+ assert_true(verifyReading(sensor1.reading));
+
+ // Both sensors share the same reading instance.
+ let reading = sensor1.reading;
+ assert_equals(reading, sensor2.reading);
+
+ // After first sensor stops its reading is null, reading for second
+ // sensor sensor remains.
+ sensor1.stop();
+ assert_equals(sensor1.reading, null);
+ assert_true(verifyReading(sensor2.reading));
+
+ sensor2.stop();
+ assert_equals(sensor2.reading, null);
+
+ // Cached reading remains.
+ assert_true(verifyReading(reading));
+ resolve(mockSensor);
+ }, reject);
+
+ sensor1.onchange = wrapper.callback;
+ sensor1.onerror = reject;
+ sensor2.onerror = reject;
+ });
+ })
+ .then(mockSensor => { return mockSensor.removeConfigurationCalled(); });
+
+ return testPromise;
+}, 'Test that sensor reading is correct.');
+}
« no previous file with comments | « third_party/WebKit/LayoutTests/sensor/ambient-light-sensor.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698