diff options
author | Daniel d'Andrada <daniel.dandrada@luxoft.com> | 2017-10-26 09:37:21 +0200 |
---|---|---|
committer | Daniel d'Andrada <daniel.dandrada@luxoft.com> | 2018-02-28 15:58:02 +0100 |
commit | 695ce6f300fd9600fe354050cc628bf6e8f07788 (patch) | |
tree | 53940be7c7011975f8622afe27410e23d1f6a875 /tests | |
parent | 6a550e6664b92643f0c14f1fc1da3de6ecd587c3 (diff) |
Write the first automated qml test for HomePage
Diffstat (limited to 'tests')
-rw-r--r-- | tests/qmltests/TritonTestCase.qml | 101 | ||||
-rw-r--r-- | tests/qmltests/tst_HomePage.qml | 64 |
2 files changed, 162 insertions, 3 deletions
diff --git a/tests/qmltests/TritonTestCase.qml b/tests/qmltests/TritonTestCase.qml new file mode 100644 index 00000000..0b06ad2f --- /dev/null +++ b/tests/qmltests/TritonTestCase.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Triton IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-QTAS$ +** Commercial License Usage +** Licensees holding valid commercial Qt Automotive Suite 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 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** 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$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtTest 1.1 + +/* + Collects some generally useful functions for test cases. + */ +TestCase { + when: windowShown + + function touchDrag(item, x, y, toX, toY, beginTouch, endTouch, timeStep, iterations) { + if (!item) + qtest_fail("no item given", 1); + + // Make sure the item is rendered + waitForRendering(item); + + var root = fetchRootItem(item); + var rootFrom = item.mapToItem(root, x, y); + var rootTo = item.mapToItem(root, toX, toY); + + // Default to true for beginTouch if not present + beginTouch = (beginTouch !== undefined) ? beginTouch : true + + // Default to true for endTouch if not present + endTouch = (endTouch !== undefined) ? endTouch : true + + // Set a default timeStep if not specified + timeStep = (timeStep !== undefined) ? timeStep : 25 + + // Set a default iterations if not specified + var iterations = (iterations !== undefined) ? iterations : 10 + + var diffX = (rootTo.x - rootFrom.x) / iterations + var diffY = (rootTo.y - rootFrom.y) / iterations + if (beginTouch) { + var event = touchEvent(item) + event.press(0 /* touchId */, root, rootFrom.x, rootFrom.y) + event.commit() + } + for (var i = 0; i < iterations; ++i) { + if (i === iterations - 1) { + // Avoid any rounding errors by making the last move be at precisely + // the point specified + wait(timeStep) + var event = touchEvent(item) + event.move(0 /* touchId */, root, rootTo.x, rootTo.y) + event.commit() + } else { + wait(timeStep) + var event = touchEvent(item) + event.move(0 /* touchId */, root, rootFrom.x + (i + 1) * diffX, rootFrom.y + (i + 1) * diffY) + event.commit() + } + } + if (endTouch) { + var event = touchEvent(item) + event.release(0 /* touchId */, root, rootTo.x, rootTo.y) + event.commit() + } + } + + function fetchRootItem(item) { + if (!item) + qtest_fail("no item given", 1); + + if (item.parent) + return fetchRootItem(item.parent) + else + return item + } +} diff --git a/tests/qmltests/tst_HomePage.qml b/tests/qmltests/tst_HomePage.qml index 32654372..acc59bc3 100644 --- a/tests/qmltests/tst_HomePage.qml +++ b/tests/qmltests/tst_HomePage.qml @@ -1,3 +1,34 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Triton IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-QTAS$ +** Commercial License Usage +** Licensees holding valid commercial Qt Automotive Suite 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 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** 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$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + import QtQuick 2.6 import QtTest 1.1 @@ -57,6 +88,7 @@ Item { } HomePage { + id: homePage anchors.fill: parent widgetsList: ListModel { id: listModel } Component.onCompleted: { @@ -66,12 +98,38 @@ Item { } } - TestCase { + TritonTestCase { name: "HomePage" - when: windowShown - function test_foobar() { + /* + While dragging a resize handle, if the widget next to it cannot be + squeezed, squeeze the one after it, if possible. + */ + function test_resizePropagates() { + // check start conditions + compare(listModel.count, 3); + compare(listModel.get(0).appInfo.heightRows, 1); + compare(listModel.get(1).appInfo.heightRows, 2); + compare(listModel.get(2).appInfo.heightRows, 2); + + + // get the resize handle that's under the first (top) widget, redApp. + var resizeHandle = findChild(homePage, "resizeHandle0"); + verify(resizeHandle); + + // drag the top-most resize handle all the way to the bottom of the screen + touchDrag(resizeHandle, + resizeHandle.width/2, resizeHandle.height/2, + resizeHandle.width/2, resizeHandle.height/2 + homePage.height); + + // Both the second and the third widget (top to bottom order) should have shrunk to make space for the + // enlarged top widget + compare(listModel.get(0).appInfo.heightRows, 3); + compare(listModel.get(1).appInfo.heightRows, 1); + compare(listModel.get(2).appInfo.heightRows, 1); + } + } } |