diff options
Diffstat (limited to 'tests/auto/qml/qml_quick/tst_sensors_basic.qml')
-rw-r--r-- | tests/auto/qml/qml_quick/tst_sensors_basic.qml | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/tests/auto/qml/qml_quick/tst_sensors_basic.qml b/tests/auto/qml/qml_quick/tst_sensors_basic.qml new file mode 100644 index 00000000..bcb21232 --- /dev/null +++ b/tests/auto/qml/qml_quick/tst_sensors_basic.qml @@ -0,0 +1,226 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +import QtTest +import QtSensors + +TestCase { + id: testCase + name: "SensorTest" + + SignalSpy { + id: sensorActiveSpy + signalName: "activeChanged" + } + + SignalSpy { + id: sensorReadingSpy + signalName: "readingChanged" + } + + SignalSpy { + id: sensorBusySpy + signalName: "busyChanged" + } + + SignalSpy { + id: sensorIdentifierSpy + signalName: "identifierChanged" + } + + function init() { + TestControl.registerTestBackends() + } + + function cleanup() { + TestControl.unregisterTestBackends() + sensorBusySpy.clear() + sensorActiveSpy.clear() + sensorReadingSpy.clear() + sensorIdentifierSpy.clear() + } + + function test_activate() { + + // create sensor without proper identifier and verify activation fails + var sensor = Qt.createQmlObject("import QtSensors; Accelerometer {identifier: \"nonexistent\"}",testCase); + sensorActiveSpy.target = sensor + sensorIdentifierSpy.target = sensor + verify(!sensor.active) + compare(sensor.identifier, "nonexistent") + sensor.active = true + verify(!sensor.active) + compare(sensorActiveSpy.count, 0) + + // set proper identifier and verify activation succeeds + sensor.identifier = "QAccelerometer" + compare(sensor.identifier, "QAccelerometer") + compare(sensorIdentifierSpy.count, 1) + sensor.active = true + compare(sensorActiveSpy.count, 1) + verify(sensor.active) + compare(sensor.reading.x, 1.0) + + // set identifier again, verify no impact + sensor.identifier = "QAccelerometer" + compare(sensor.identifier, "QAccelerometer") + compare(sensorIdentifierSpy.count, 1) + + // set activate again, verify no impact + sensor.active = true + sensor.start() + compare(sensorActiveSpy.count, 1) + verify(sensor.active) + + // deactivate + sensor.active = false + compare(sensorActiveSpy.count, 2) + verify(!sensor.active) + + // reactivate and stop + sensor.active = true + compare(sensorActiveSpy.count, 3) + verify(sensor.active) + sensor.stop() + compare(sensorActiveSpy.count, 4) + verify(!sensor.active) + + // create sensor with proper id and active 'true' on creation time + var sensor2 = Qt.createQmlObject("import QtSensors; Accelerometer {identifier: \"QAccelerometer\"; active: true}", testCase); + verify(sensor2.active) + + // create sensor with nonexistent id and active 'true' on creation time + var sensor3 = Qt.createQmlObject("import QtSensors; Accelerometer {identifier: \"nonexistent\"; active: true}", testCase); + verify(!sensor3.active) + sensor3.identifier = "QAccelerometer" + sensor3.start() + verify(sensor3.active) + + // create sensor with empty id, and check that a default is used + var sensor4 = Qt.createQmlObject("import QtSensors; Accelerometer {active: true}", testCase); + verify(sensor4.active) + compare(sensor4.identifier, QmlSensors.defaultSensorForType("QAccelerometer")); + + // same as previous but with delayed activation + var sensor5 = Qt.createQmlObject("import QtSensors; Accelerometer {}", testCase); + verify(!sensor5.active) + sensor5.active = true + verify(sensor5.active) + compare(sensor5.identifier, QmlSensors.defaultSensorForType("QAccelerometer")); + + // tidy up + sensor.destroy() + sensor2.destroy() + sensor3.destroy() + sensor4.destroy() + sensor5.destroy() + } + + function test_busy() { + var sensor = Qt.createQmlObject("import QtSensors; Accelerometer {identifier: \"QAccelerometer\"}", testCase); + sensorBusySpy.target = sensor + compare(sensor.busy, false) + verify(sensor.start()) + + // set sensor busy and verify 'busy' property and its signaling + TestControl.setSensorBusy(sensor, true) + compare(sensorBusySpy.count, 1) + TestControl.setSensorBusy(sensor, false) + compare(sensorBusySpy.count, 2) + TestControl.setSensorBusy(sensor, false) + compare(sensorBusySpy.count, 2) + + // tidy up + sensor.destroy() + } + + function test_reading(data) { + + var sensor = Qt.createQmlObject( + "import QtSensors; " + + data.tag + "{" + + "identifier: " + "\"Q" + data.tag + "\"" + + "}" + ,testCase) + sensorActiveSpy.target = sensor + sensorReadingSpy.target = sensor + + // verify initial values of sensor + // note: 'reading' values are 'undefined by design' before activation, and therefore aren't tested + compare(sensor.type, "Q" + data.tag) + compare(sensor.active, false) + compare(sensor.alwaysOn, false ) + compare(sensor.busy, false) + compare(sensor.description, "") + compare(sensor.error, 0) + compare(sensor.skipDuplicates, false) + + // start the sensor and verify activation + sensor.start() + compare(sensor.active, true) + compare(sensorActiveSpy.count, 1) + compare(sensorReadingSpy.count, 1) + + // verify the initial reading values + for (var prop in data.initialReading) + fuzzyCompare(sensor.reading[prop], data.initialReading[prop], 0.0001, data.tag + "::" + prop) + + // change reading values and verify them + TestControl.setSensorReading(sensor, data.newReading) + compare(sensorReadingSpy.count, 2) + for (prop in data.newReading) + fuzzyCompare(sensor.reading[prop], data.newReading[prop], 0.0001, data.tag + "::" + prop) + + // stop the sensor and verify deactivation + sensor.stop() + compare(sensor.active, false) + compare(sensorActiveSpy.count, 2) + compare(sensorReadingSpy.count, 2) + + // tidy up + sensor.destroy() + } + + function test_reading_data() { + return [ + {tag: "Accelerometer", initialReading: {timestamp: 1, x: 1.0, y: 1.0, z: 1.0}, newReading: {timestamp: 2, x: 2.0, y: 3.0, z: 4.0}}, + {tag: "PressureSensor", initialReading: {pressure: 1.0, temperature: 1.0}, newReading: {pressure: 2.0, temperature: 3.0}}, + {tag: "Gyroscope", initialReading: {x : 1.0, y: 1.0, z: 1.0}, newReading: {x : 2.0, y: 3.0, z: 4.0}}, + {tag: "TapSensor", initialReading: {doubleTap: true, tapDirection: TapReading.Z_Both}, newReading: {doubleTap: false, tapDirection: TapReading.X_Both}}, + {tag: "Compass", initialReading: {azimuth: 1.0, calibrationLevel: 1.0}, newReading: {azimuth: 2.0, calibrationLevel: 3.0}}, + {tag: "ProximitySensor", initialReading: {near: true}, newReading: {near: false}}, + {tag: "OrientationSensor", initialReading: {orientation: OrientationReading.LeftUp}, newReading: {orientation: OrientationReading.RightUp}}, + {tag: "AmbientLightSensor", initialReading: {lightLevel: AmbientLightReading.Twilight}, newReading: {lightLevel: AmbientLightReading.Sunny}}, + {tag: "Magnetometer", initialReading: {x : 1.0, y: 1.0, z: 1.0, calibrationLevel: 1.0}, newReading: {x : 2.0, y: 3.0, z: 4.0, calibrationLevel: 5.0}}, + {tag: "LidSensor", initialReading: {backLidClosed:true, frontLidClosed: true}, newReading: {backLidClosed:false, frontLidClosed: false}}, + {tag: "TiltSensor", initialReading: {yRotation: 1.0, xRotation: 1.0}, newReading: {yRotation: 2.0, xRotation: 3.0}}, + {tag: "RotationSensor", initialReading: {x: 1.0, y: 1.0, z: 1.0}, newReading: {x: 2.0, y: 3.0, z: 4.0}}, + {tag: "HumiditySensor", initialReading: {relativeHumidity: 1.0, absoluteHumidity: 1.0}, newReading: {relativeHumidity: 2.0, absoluteHumidity: 3.0}}, + {tag: "AmbientTemperatureSensor", initialReading: {temperature: 30.0}, newReading: {temperature: 40.0}}, + {tag: "LightSensor", initialReading: {illuminance: 1.0}, newReading: {illuminance: 2.0}}, + {tag: "IRProximitySensor", initialReading: {reflectance: 0.5}, newReading: {reflectance: 0.6}} + ]; + } + + function test_SupportedFeatures() + { + var sensor = Qt.createQmlObject("import QtSensors; Accelerometer \ + {identifier: \"QAccelerometer\"}", + testCase); + verify(sensor.start()) + verify(sensor.connectedToBackend) + + // According to isFeatureSupported() override implementation in test_backends.h, + // only SkipDuplicates should be supported afterwards + verify(!sensor.isFeatureSupported(Sensor.Buffering)) + verify(!sensor.isFeatureSupported(Sensor.AlwaysOn)) + verify(!sensor.isFeatureSupported(Sensor.GeoValues)) + verify(!sensor.isFeatureSupported(Sensor.FieldOfView)) + verify(!sensor.isFeatureSupported(Sensor.AccelerationMode)) + verify(sensor.isFeatureSupported(Sensor.SkipDuplicates)) + verify(!sensor.isFeatureSupported(Sensor.AxesOrientation)) + verify(!sensor.isFeatureSupported(Sensor.PressureSensorTemperature)) + + sensor.destroy() + } +} |