/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ import QtQuick 2.0 import QtTest 1.0 import QtMultimedia 5.4 TestCase { Component { id: cameraComponent Camera { } } Loader { id: cameraLoader } SignalSpy { id: deviceIdSpy target: cameraLoader.item signalName: "deviceIdChanged" } function test_deviceId() { deviceIdSpy.clear(); cameraLoader.sourceComponent = cameraComponent; var camera = cameraLoader.item; // default camera compare(camera.deviceId, "othercamera", "deviceId"); compare(camera.displayName, "othercamera desc", "displayName"); compare(camera.position, Camera.UnspecifiedPosition, "position"); compare(camera.orientation, 0, "orientation"); // setting an invalid camera ID should leave the item unchanged camera.deviceId = "invalidcamera"; compare(camera.deviceId, "othercamera"); compare(deviceIdSpy.count, 0); compare(camera.displayName, "othercamera desc", "displayName"); compare(camera.position, Camera.UnspecifiedPosition, "position"); compare(camera.orientation, 0, "orientation"); // change to another valid camera camera.deviceId = "backcamera"; compare(camera.deviceId, "backcamera"); compare(deviceIdSpy.count, 1); compare(camera.displayName, "backcamera desc", "displayName"); compare(camera.position, Camera.BackFace, "position"); compare(camera.orientation, 90, "orientation"); // setting an empty device ID should load the default camera camera.deviceId = ""; compare(camera.deviceId, "othercamera", "deviceId"); compare(deviceIdSpy.count, 2); cameraLoader.sourceComponent = undefined; } function test_position() { deviceIdSpy.clear(); cameraLoader.sourceComponent = cameraComponent; var camera = cameraLoader.item; // default camera compare(camera.position, Camera.UnspecifiedPosition, "position"); compare(camera.deviceId, "othercamera", "deviceId"); // setting an unavailable camera position should leave the item unchanged camera.position = Camera.FrontFace; compare(camera.position, Camera.UnspecifiedPosition, "position"); compare(camera.deviceId, "othercamera", "deviceId"); compare(deviceIdSpy.count, 0); // change to an available position camera.position = Camera.BackFace; compare(camera.position, Camera.BackFace, "position"); compare(camera.deviceId, "backcamera", "deviceId"); compare(deviceIdSpy.count, 1); // setting UnspecifiedPosition should load the default camera camera.position = Camera.UnspecifiedPosition; compare(camera.position, Camera.UnspecifiedPosition, "position"); compare(camera.deviceId, "othercamera", "deviceId"); compare(deviceIdSpy.count, 2); cameraLoader.sourceComponent = undefined; } SignalSpy { id: cameraStateSpy target: cameraLoader.item signalName: "cameraStateChanged" } function test_cameraState() { deviceIdSpy.clear(); cameraStateSpy.clear(); cameraLoader.sourceComponent = cameraComponent; var camera = cameraLoader.item; // camera should be in ActiveState by default compare(camera.cameraState, Camera.ActiveState, "cameraState"); compare(camera.deviceId, "othercamera", "deviceId"); // Changing the camera device should unload the previous camera and apply the current state // to the new camera camera.deviceId = "backcamera"; compare(camera.deviceId, "backcamera", "deviceId"); compare(camera.cameraState, Camera.ActiveState, "cameraState"); compare(cameraStateSpy.count, 2); compare(cameraStateSpy.signalArguments[0][0], Camera.UnloadedState); compare(cameraStateSpy.signalArguments[1][0], Camera.ActiveState); cameraLoader.sourceComponent = undefined; } function test_supportedViewfinderResolutions_data() { // see mockcameraviewfindersettingscontrol.h for expected values return [ { tag: "all", minimumFrameRate: 0, maximumFrameRate: 0, expectedResolutions: [ { width: 320, height: 240 }, { width: 640, height: 480 }, { width: 1280, height: 720 }, { width: 1920, height: 1080 } ] }, { tag: "invalid minimumFrameRate", minimumFrameRate: 2, maximumFrameRate: 0, expectedResolutions: [ ] }, { tag: "minimumFrameRate=5", minimumFrameRate: 5, maximumFrameRate: 0, expectedResolutions: [ { width: 1920, height: 1080 } ] }, { tag: "minimumFrameRate=10", minimumFrameRate: 10, maximumFrameRate: 0, expectedResolutions: [ { width: 1280, height: 720 } ] }, { tag: "minimumFrameRate=30", minimumFrameRate: 30, maximumFrameRate: 0, expectedResolutions: [ { width: 320, height: 240 }, { width: 640, height: 480 }, { width: 1280, height: 720 } ] }, { tag: "invalid maximumFrameRate", minimumFrameRate: 0, maximumFrameRate: 2, expectedResolutions: [ ] }, { tag: "maximumFrameRate=10", minimumFrameRate: 0, maximumFrameRate: 10, expectedResolutions: [ { width: 1280, height: 720 }, { width: 1920, height: 1080 } ] }, { tag: "minimumFrameRate=10, maximumFrameRate=10", minimumFrameRate: 10, maximumFrameRate: 10, expectedResolutions: [ { width: 1280, height: 720 } ] }, { tag: "minimumFrameRate=30, maximumFrameRate=30", minimumFrameRate: 30, maximumFrameRate: 30, expectedResolutions: [ { width: 320, height: 240 }, { width: 640, height: 480 }, { width: 1280, height: 720 } ] } ] } function test_supportedViewfinderResolutions(data) { cameraLoader.sourceComponent = cameraComponent; var camera = cameraLoader.item; var actualResolutions = camera.supportedViewfinderResolutions(data.minimumFrameRate, data.maximumFrameRate); compare(actualResolutions.length, data.expectedResolutions.length); for (var i = 0; i < actualResolutions.length; ++i) { compare(actualResolutions[i].width, data.expectedResolutions[i].width); compare(actualResolutions[i].height, data.expectedResolutions[i].height); } cameraLoader.sourceComponent = undefined; } function test_supportedViewfinderFrameRateRanges_data() { // see mockcameraviewfindersettingscontrol.h for expected values return [ { tag: "all", expectedFrameRateRanges: [ { minimumFrameRate: 5, maximumFrameRate: 10 }, { minimumFrameRate: 10, maximumFrameRate: 10 }, { minimumFrameRate: 30, maximumFrameRate: 30 } ] }, { tag: "invalid", resolution: { width: 452472, height: 444534 }, expectedFrameRateRanges: [ ] }, { tag: "320, 240", resolution: { width: 320, height: 240 }, expectedFrameRateRanges: [ { minimumFrameRate: 30, maximumFrameRate: 30 } ] }, { tag: "1280, 720", resolution: { width: 1280, height: 720 }, expectedFrameRateRanges: [ { minimumFrameRate: 10, maximumFrameRate: 10 }, { minimumFrameRate: 30, maximumFrameRate: 30 } ] }, { tag: "1920, 1080", resolution: { width: 1920, height: 1080 }, expectedFrameRateRanges: [ { minimumFrameRate: 5, maximumFrameRate: 10 } ] } ] } function test_supportedViewfinderFrameRateRanges(data) { cameraLoader.sourceComponent = cameraComponent; var camera = cameraLoader.item; // Pass the resolution as an object var actualFrameRateRanges = camera.supportedViewfinderFrameRateRanges(data.resolution); compare(actualFrameRateRanges.length, data.expectedFrameRateRanges.length); for (var i = 0; i < actualFrameRateRanges.length; ++i) { compare(actualFrameRateRanges[i].minimumFrameRate, data.expectedFrameRateRanges[i].minimumFrameRate); compare(actualFrameRateRanges[i].maximumFrameRate, data.expectedFrameRateRanges[i].maximumFrameRate); } // Pass the resolution as a size if (typeof data.resolution !== 'undefined') { actualFrameRateRanges = camera.supportedViewfinderFrameRateRanges(Qt.size(data.resolution.width, data.resolution.height)); compare(actualFrameRateRanges.length, data.expectedFrameRateRanges.length); for (i = 0; i < actualFrameRateRanges.length; ++i) { compare(actualFrameRateRanges[i].minimumFrameRate, data.expectedFrameRateRanges[i].minimumFrameRate); compare(actualFrameRateRanges[i].maximumFrameRate, data.expectedFrameRateRanges[i].maximumFrameRate); } } cameraLoader.sourceComponent = undefined; } }