From bf55d2b1659290753641ee862f814ab8781cfa94 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sat, 17 Oct 2015 17:34:31 +0200 Subject: Add Universal style https://dev.windows.com/design Change-Id: I1d8c633ae246724649a6ed71b300a56ba9572405 Reviewed-by: Mitch Curtis --- tests/auto/auto.pro | 3 +- tests/auto/universal/data/tst_universal.qml | 225 +++++++++++++++++++++ tests/auto/universal/tst_universal.cpp | 38 ++++ tests/auto/universal/universal.pro | 12 ++ tests/benchmarks/creationtime/tst_creationtime.cpp | 17 ++ tests/benchmarks/objectcount/tst_objectcount.cpp | 15 ++ tests/manual/testbench/main.qml | 4 +- 7 files changed, 311 insertions(+), 3 deletions(-) create mode 100644 tests/auto/universal/data/tst_universal.qml create mode 100644 tests/auto/universal/tst_universal.cpp create mode 100644 tests/auto/universal/universal.pro (limited to 'tests') diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 6cf2045f..65a43402 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -8,4 +8,5 @@ SUBDIRS += \ pressandhold \ sanity \ snippets \ - theme + theme \ + universal diff --git a/tests/auto/universal/data/tst_universal.qml b/tests/auto/universal/data/tst_universal.qml new file mode 100644 index 00000000..912b2117 --- /dev/null +++ b/tests/auto/universal/data/tst_universal.qml @@ -0,0 +1,225 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.2 +import QtQuick.Window 2.2 +import QtTest 1.0 +import Qt.labs.controls 1.0 +import Qt.labs.controls.universal 1.0 + +TestCase { + id: testCase + width: 200 + height: 200 + visible: true + when: windowShown + name: "Universal" + + Component { + id: button + Button { } + } + + Component { + id: styledButton + Button { + Universal.theme: Universal.Dark + Universal.accent: Universal.Violet + } + } + + Component { + id: window + Window { } + } + + Component { + id: styledWindow + Window { + Universal.theme: Universal.Dark + Universal.accent: Universal.Green + } + } + + Component { + id: loader + Loader { + active: false + sourceComponent: Button { } + } + } + + Component { + id: swipeView + SwipeView { + Universal.theme: Universal.Dark + Button { } + } + } + + function test_defaults() { + var control = button.createObject(testCase) + verify(control) + verify(control.Universal) + compare(control.Universal.accent, Universal.Cobalt) + compare(control.Universal.theme, Universal.Light) + control.destroy() + } + + function test_set() { + var control = button.createObject(testCase) + verify(control) + control.Universal.accent = Universal.Steel + control.Universal.theme = Universal.Dark + compare(control.Universal.accent, Universal.Steel) + compare(control.Universal.theme, Universal.Dark) + control.destroy() + } + + function test_reset() { + var control = styledButton.createObject(testCase) + verify(control) + compare(control.Universal.accent, Universal.Violet) + compare(control.Universal.theme, Universal.Dark) + control.Universal.accent = undefined + control.Universal.theme = undefined + compare(control.Universal.accent, testCase.Universal.accent) + compare(control.Universal.theme, testCase.Universal.theme) + control.destroy() + } + + function test_inheritance_data() { + return [ + { tag: "accent", value1: Universal.Crimson, value2: Universal.Indigo }, + { tag: "theme", value1: Universal.Dark, value2: Universal.Light }, + ] + } + + function test_inheritance(data) { + var prop = data.tag + var parent = button.createObject(testCase) + parent.Universal[prop] = data.value1 + compare(parent.Universal[prop], data.value1) + + var child1 = button.createObject(parent) + compare(child1.Universal[prop], data.value1) + + parent.Universal[prop] = data.value2 + compare(parent.Universal[prop], data.value2) + compare(child1.Universal[prop], data.value2) + + var child2 = button.createObject(parent) + compare(child2.Universal[prop], data.value2) + + child2.Universal[prop] = data.value1 + compare(child2.Universal[prop], data.value1) + compare(child1.Universal[prop], data.value2) + compare(parent.Universal[prop], data.value2) + + parent.Universal[prop] = undefined + verify(parent.Universal[prop] !== data.value1) + verify(parent.Universal[prop] !== undefined) + compare(child1.Universal[prop], parent.Universal[prop]) + verify(child2.Universal[prop] !== parent.Universal[prop]) + + var grandChild1 = button.createObject(child1) + var grandChild2 = button.createObject(child2) + compare(grandChild1.Universal[prop], child1.Universal[prop]) + compare(grandChild2.Universal[prop], child2.Universal[prop]) + + var themelessGrandGrandChild = button.createObject(grandChild1) + var grandGrandGrandChild1 = button.createObject(themelessGrandGrandChild) + compare(grandGrandGrandChild1.Universal[prop], parent.Universal[prop]) + + child1.Universal[prop] = data.value2 + compare(child1.Universal[prop], data.value2) + compare(grandChild1.Universal[prop], data.value2) + compare(grandGrandGrandChild1.Universal[prop], data.value2) + + parent.destroy() + } + + function test_window() { + var parent = window.createObject() + + var control = button.createObject(parent.contentItem) + compare(control.Universal.accent, parent.Universal.accent) + compare(control.Universal.theme, parent.Universal.theme) + + var styledChild = styledWindow.createObject(window) + verify(styledChild.Universal.accent !== parent.Universal.accent) + verify(styledChild.Universal.theme !== parent.Universal.theme) + + var unstyledChild = window.createObject(window) + compare(unstyledChild.Universal.accent, parent.Universal.accent) + compare(unstyledChild.Universal.theme, parent.Universal.theme) + + parent.Universal.accent = Universal.Cyan + compare(control.Universal.accent, Universal.Cyan) + verify(styledChild.Universal.accent !== Universal.Cyan) + // ### TODO: compare(unstyledChild.Universal.accent, Universal.Cyan) + + parent.destroy() + } + + function test_loader() { + var control = loader.createObject(testCase) + control.Universal.accent = Universal.Lime + control.active = true + compare(control.item.Universal.accent, Universal.Lime) + control.Universal.accent = Universal.Pink + compare(control.item.Universal.accent, Universal.Pink) + control.active = false + control.Universal.accent = Universal.Brown + control.active = true + compare(control.item.Universal.accent, Universal.Brown) + control.destroy() + } + + function test_swipeView() { + var control = swipeView.createObject(testCase) + verify(control) + var child = control.itemAt(0) + verify(child) + compare(control.Universal.theme, Universal.Dark) + compare(child.Universal.theme, Universal.Dark) + control.destroy() + } +} diff --git a/tests/auto/universal/tst_universal.cpp b/tests/auto/universal/tst_universal.cpp new file mode 100644 index 00000000..ea42cc5e --- /dev/null +++ b/tests/auto/universal/tst_universal.cpp @@ -0,0 +1,38 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +QUICK_TEST_MAIN(tst_universal) diff --git a/tests/auto/universal/universal.pro b/tests/auto/universal/universal.pro new file mode 100644 index 00000000..3a21957c --- /dev/null +++ b/tests/auto/universal/universal.pro @@ -0,0 +1,12 @@ +TEMPLATE = app +TARGET = tst_universal +CONFIG += qmltestcase + +SOURCES += \ + $$PWD/tst_universal.cpp + +OTHER_FILES += \ + $$PWD/data/* + +TESTDATA += \ + $$PWD/data/tst_* diff --git a/tests/benchmarks/creationtime/tst_creationtime.cpp b/tests/benchmarks/creationtime/tst_creationtime.cpp index 3eccc654..7ce6947b 100644 --- a/tests/benchmarks/creationtime/tst_creationtime.cpp +++ b/tests/benchmarks/creationtime/tst_creationtime.cpp @@ -47,6 +47,9 @@ private slots: void controls(); void controls_data(); + void universal(); + void universal_data(); + void calendar(); void calendar_data(); @@ -93,6 +96,20 @@ void tst_CreationTime::controls_data() addTestRows(QQC2_IMPORT_PATH "/controls"); } +void tst_CreationTime::universal() +{ + QFETCH(QUrl, url); + QQmlComponent component(&engine); + component.loadUrl(url); + doBenchmark(&component); +} + +void tst_CreationTime::universal_data() +{ + QTest::addColumn("url"); + addTestRows(QQC2_IMPORT_PATH "/controls/universal"); +} + void tst_CreationTime::calendar() { QFETCH(QUrl, url); diff --git a/tests/benchmarks/objectcount/tst_objectcount.cpp b/tests/benchmarks/objectcount/tst_objectcount.cpp index 641d78d1..f2998708 100644 --- a/tests/benchmarks/objectcount/tst_objectcount.cpp +++ b/tests/benchmarks/objectcount/tst_objectcount.cpp @@ -69,6 +69,9 @@ private slots: void controls(); void controls_data(); + void universal(); + void universal_data(); + private: QQmlEngine engine; }; @@ -216,6 +219,18 @@ void tst_ObjectCount::controls_data() addTestRows(QQC2_IMPORT_PATH "/controls"); } +void tst_ObjectCount::universal() +{ + QFETCH(QUrl, url); + doBenchmark(&engine, url); +} + +void tst_ObjectCount::universal_data() +{ + QTest::addColumn("url"); + addTestRows(QQC2_IMPORT_PATH "/controls/universal"); +} + QTEST_MAIN(tst_ObjectCount) #include "tst_objectcount.moc" diff --git a/tests/manual/testbench/main.qml b/tests/manual/testbench/main.qml index 4158fbf8..86326dec 100644 --- a/tests/manual/testbench/main.qml +++ b/tests/manual/testbench/main.qml @@ -43,7 +43,7 @@ import QtQuick.Window 2.2 import QtQuick.Layouts 1.0 import Qt.labs.controls 1.0 //import Qt.labs.controls.material 1.0 -//import Qt.labs.controls.universal 1.0 +import Qt.labs.controls.universal 1.0 ApplicationWindow { id: window @@ -58,7 +58,7 @@ ApplicationWindow { Theme.baseColor: themeSwitch.checked ? "#444" : "#eee" // Material.theme: themeSwitch.checked ? Material.Dark : Material.Light -// Universal.theme: themeSwitch.checked ? Universal.Dark : Universal.Light + Universal.theme: themeSwitch.checked ? Universal.Dark : Universal.Light property int controlSpacing: 10 -- cgit v1.2.3