blob: 51e926a228140ca394f27da95fa1113f86095aba [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
<script src="file:///gen/services/device/public/interfaces/sensor_provider.mojom.js"></script>
<script src="resources/sensor-helpers.js"></script>
<script src="resources/generic-sensor-tests.js"></script>
<script>
'use strict';
if (!window.testRunner)
debug('This test cannot be run without the TestRunner');
const kQuaternion = [1, 0, 0, 0]; // 180 degrees around X axis.
const kRotationMatrix = [1, 0, 0, 0,
0, -1, 0, 0,
0, 0, -1, 0,
0, 0, 0, 1];
const kRotationDOMMatrix = new DOMMatrix(kRotationMatrix);
function update_sensor_reading(buffer) {
buffer[2] = 1;
buffer[3] = 0;
buffer[4] = 0;
buffer[5] = 0;
}
function verify_sensor_reading(sensor, should_be_null) {
if (should_be_null)
return sensor.quaternion == null && sensor.timestamp == null;
if (sensor.timestamp == null ||
sensor.quaternion.toString() != kQuaternion.toString())
return false;
return true;
}
function checkPopulateMatrix(sensor, sensorType) {
let sensorObject = new sensorType();
// Throws with insufficient buffer space.
assert_throws({ name: 'TypeError' }, () => sensorObject.populateMatrix(new Float32Array(15)));
// Throws if no orientation data available.
assert_throws({ name: 'NotReadableError' }, () => sensorObject.populateMatrix(new Float32Array(16)));
if (window.SharedArrayBuffer) {
// Throws if passed SharedArrayBuffer view.
assert_throws({ name: 'TypeError' }, () => sensorObject.populateMatrix(new Float32Array(new SharedArrayBuffer(16))));
}
sensorObject.start();
return sensor.mockSensorProvider.getCreatedSensor()
.then(mockSensor => {
return mockSensor.setUpdateSensorReadingFunction(update_sensor_reading);
})
.then(mockSensor => {
return new Promise((resolve, reject) => {
let wrapper = new CallbackWrapper(() => {
// Works for all supported types.
let rotationMatrix32 = new Float32Array(16);
sensorObject.populateMatrix(rotationMatrix32);
assert_array_equals(rotationMatrix32, kRotationMatrix);
let rotationMatrix64 = new Float64Array(16);
sensorObject.populateMatrix(rotationMatrix64);
assert_array_equals(rotationMatrix64, kRotationMatrix);
let rotationDOMMatrix = new DOMMatrix();
sensorObject.populateMatrix(rotationDOMMatrix);
assert_array_equals(rotationDOMMatrix.toFloat64Array(),
kRotationMatrix);
// Sets every matrix element.
rotationMatrix64.fill(123);
sensorObject.populateMatrix(rotationMatrix64);
assert_array_equals(rotationMatrix64, kRotationMatrix);
sensorObject.stop();
resolve(mockSensor);
}, reject);
sensorObject.onreading = wrapper.callback;
sensorObject.onerror = reject;
});
})
.then(mockSensor => mockSensor.removeConfigurationCalled());
}
runGenericSensorTests(AbsoluteOrientationSensor, update_sensor_reading, verify_sensor_reading);
sensor_test(sensor => {
return checkPopulateMatrix(sensor, AbsoluteOrientationSensor);
}, 'Test AbsoluteOrientationSensor.populateMatrix() method works correctly.');
runGenericSensorTests(RelativeOrientationSensor, update_sensor_reading, verify_sensor_reading);
sensor_test(sensor => {
return checkPopulateMatrix(sensor, RelativeOrientationSensor);
}, 'Test RelativeOrientationSensor.populateMatrix() method works correctly.');
</script>