summaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qml_quick/tst_sensors_basic.qml
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qml/qml_quick/tst_sensors_basic.qml')
-rw-r--r--tests/auto/qml/qml_quick/tst_sensors_basic.qml226
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()
+ }
+}