| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the test suite of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:BSD$ |
| ** 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. |
| ** |
| ** BSD License Usage |
| ** Alternatively, 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 QtTest 1.0 |
| import QtQuickControlsTests 1.0 |
| import QtQuick.Window 2.1 |
| |
| Item { |
| id: container |
| width: 400 |
| height: 400 |
| |
| TestCase { |
| id: testCase |
| name: "Tests_ApplicationWindow" |
| when:windowShown |
| width:400 |
| height:400 |
| |
| function test_minimumHeight() { |
| var test_control = 'import QtQuick 2.2; \ |
| import QtQuick.Controls 1.2; \ |
| ApplicationWindow { \ |
| visible: true; \ |
| width: 100; height: 100; \ |
| property alias contentArea: rect; \ |
| statusBar: StatusBar { \ |
| visible: false; \ |
| Label { \ |
| text: "Ready"; \ |
| } \ |
| } \ |
| \ |
| toolBar: ToolBar { \ |
| visible: false; \ |
| ToolButton { \ |
| text: "One"; \ |
| } \ |
| } \ |
| Rectangle { \ |
| id: rect; \ |
| anchors.fill: parent; \ |
| } \ |
| } ' |
| |
| var window = Qt.createQmlObject(test_control, container, '') |
| var contentArea = window.contentArea |
| waitForRendering(contentArea) |
| var oldHeight = contentArea.height |
| compare(contentArea.height, 100) |
| window.statusBar.visible = true |
| waitForRendering(window.statusBar) |
| verify(contentArea.height < oldHeight) |
| |
| oldHeight = contentArea.height; |
| window.toolBar.visible = true |
| waitForRendering(window.toolBar) |
| verify(contentArea.height < oldHeight) |
| window.destroy() |
| } |
| |
| |
| function test_defaultContentItemConstraints_data() { |
| return [ |
| { tag: "height", |
| input: {height: 100}, |
| expected: {implicitHeight: 100} }, |
| { tag: "height_y", |
| input: {height: 100, y: 10}, |
| expected: {implicitHeight: 110} }, |
| { tag: "height_implicitHeight_anchorsFill", |
| input: {height: 100, implicitHeight: 10, anchorsFill: true}, |
| expected: {implicitHeight: 10} }, |
| { tag: "height_implicitHeight_anchorsFill_margins", |
| input: {height: 100, implicitHeight: 10, anchorsFill: true, anchors_margins: 20}, |
| expected: {implicitHeight: 50} }, |
| { tag: "height_anchorsFill_margins", |
| input: {height: 100, anchorsFill: true, anchors_margins: 20}, |
| expected: {implicitHeight: 40} }, |
| { tag: "anchorsFill_margins", //Rectangle { anchors.fill: parent; anchors.margins: 20 } |
| input: {anchorsFill: true, anchors_margins: 20}, |
| expected: {implicitHeight: 40} }, |
| { tag: "anchorsFill_margins0", //Rectangle { anchors.fill: parent; anchors.margins: 0 } |
| input: {anchorsFill: true, anchors_margins: 0}, |
| expected: {implicitHeight: 0} }, |
| { tag: "minimum_implicit_maximum_anchorsFill", |
| input: {anchorsFill: true, Layout_minimumHeight: 10, implicitHeight: 100, Layout_maximumHeight: 150}, |
| expected: {minimumHeight: 10, implicitHeight: 100, maximumHeight: Number.POSITIVE_INFINITY} }, |
| { tag: "minimum_implicit_maximum_anchorsFill_margins", |
| input: {anchorsFill: true, anchors_margins: 20, Layout_minimumHeight: 10, implicitHeight: 100, Layout_maximumHeight: 150}, |
| expected: {minimumHeight: 50, implicitHeight: 140, maximumHeight: Number.POSITIVE_INFINITY} }, |
| { tag: "minimum_height_maximum_anchorsFill", |
| input: {anchorsFill: true, Layout_minimumHeight: 0, height: 100, Layout_maximumHeight: 150}, |
| expected: {minimumHeight: 0, implicitHeight: 0, maximumHeight: Number.POSITIVE_INFINITY} }, |
| ]; |
| } |
| function test_defaultContentItemConstraints(data) { |
| var input = data.input |
| var expected = data.expected |
| |
| var str = '' |
| // serialize.... |
| for (var varName in input) { |
| var realName = varName.replace('_', '.') |
| // anchorsFill is special... |
| if (realName === 'anchorsFill') { |
| str += 'anchors.fill:parent;' |
| } else if (input[varName] !== undefined) { |
| // serialize the other properties... |
| str += realName + ':' + input[varName] +';' |
| } |
| } |
| |
| var test_control = 'import QtQuick 2.2; \ |
| import QtQuick.Controls 1.2; \ |
| import QtQuick.Layouts 1.1; \ |
| ApplicationWindow { \ |
| id: window; \ |
| Rectangle { \ |
| id: rect; \ |
| color: \'red\'; \ |
| ' + str + '\ |
| } \ |
| } ' |
| |
| var window = Qt.createQmlObject(test_control, container, '') |
| wait(0) |
| |
| for (var propName in expected) { |
| compare(window.contentItem[propName], expected[propName]) |
| } |
| } |
| |
| function test_minimumSizeLargerThan_MaximumSize() { |
| var test_control = 'import QtQuick 2.2; \ |
| import QtQuick.Controls 1.2; \ |
| import QtQuick.Layouts 1.1; \ |
| ApplicationWindow { \ |
| minimumWidth: 200; \ |
| maximumWidth: 200; \ |
| minimumHeight: 200; \ |
| maximumHeight: 200; \ |
| Rectangle { \ |
| implicitWidth: 1; \ |
| implicitHeight: 20; \ |
| } \ |
| } ' |
| |
| var window = Qt.createQmlObject(test_control, container, '') |
| window.visible = true |
| wait(0) |
| // The following two calls will set the min,max range to be invalid |
| // this should *not* produce a warning |
| compare(window.height, 200) |
| window.maximumHeight -= 10 |
| window.minimumHeight += 10 |
| // Restore min,max range back to sane values |
| window.maximumHeight += 20 |
| compare(window.height, 210) |
| |
| // Do the same test for width |
| compare(window.width, 200) |
| window.maximumWidth-= 10 |
| window.minimumWidth+= 10 |
| // Restore back to sane values |
| window.maximumWidth += 20 |
| compare(window.width, 210) |
| |
| window.destroy() |
| } |
| |
| function test_defaultSizeHints() { |
| var test_control = 'import QtQuick 2.2; \ |
| import QtQuick.Controls 1.2; \ |
| import QtQuick.Layouts 1.1; \ |
| ApplicationWindow { \ |
| Rectangle { \ |
| anchors.fill: parent; \ |
| Layout.minimumWidth: 250; \ |
| Layout.minimumHeight: 250; \ |
| implicitWidth: 300; \ |
| implicitHeight: 300; \ |
| Layout.maximumWidth: 350; \ |
| Layout.maximumHeight: 350; \ |
| } \ |
| } ' |
| |
| var window = Qt.createQmlObject(test_control, container, '') |
| window.visible = true |
| waitForRendering(window.contentItem) |
| compare(window.minimumWidth, 250) |
| compare(window.minimumHeight, 250) |
| compare(window.width, 300) |
| compare(window.height, 300) |
| var maxLimit = Math.pow(2,24)-1 |
| compare(window.maximumWidth, maxLimit) |
| compare(window.maximumHeight, maxLimit) |
| window.destroy() |
| } |
| |
| function test_invisibleContentItemChildren() { |
| var test_control = 'import QtQuick 2.2; \ |
| import QtQuick.Controls 1.2; \ |
| ApplicationWindow { \ |
| Rectangle { \ |
| visible: false; \ |
| implicitWidth: 400; \ |
| implicitHeight: 400; \ |
| } \ |
| Rectangle { \ |
| anchors.fill: parent; \ |
| implicitWidth: 300; \ |
| implicitHeight: 300; \ |
| } \ |
| } ' |
| |
| var window = Qt.createQmlObject(test_control, container, '') |
| window.visible = true |
| waitForRendering(window.contentItem) |
| compare(window.width, 300) |
| compare(window.height, 300) |
| window.destroy() |
| } |
| |
| function test_windowHeight() { |
| var test_control = 'import QtQuick 2.2; \ |
| import QtQuick.Controls 1.2; \ |
| ApplicationWindow { \ |
| toolBar: ToolBar { \ |
| ToolButton { \ |
| text: "Menu" \ |
| } \ |
| } \ |
| statusBar: StatusBar { \ |
| Row { \ |
| Label { \ |
| text: "Window test" \ |
| } \ |
| } \ |
| } \ |
| \ |
| Rectangle { \ |
| anchors.fill: parent; \ |
| implicitWidth: 300; \ |
| implicitHeight: 300; \ |
| } \ |
| } ' |
| |
| var window = Qt.createQmlObject(test_control, container, '') |
| window.visible = true |
| waitForRendering(window.contentItem) |
| compare(window.contentItem.implicitHeight, 300) |
| verify(window.height > 300) |
| window.destroy() |
| } |
| |
| function test_windowHeight2() { |
| var test_control = 'import QtQuick 2.2; \ |
| import QtQuick 2.2; \ |
| import QtQuick.Controls 1.2; \ |
| ApplicationWindow { \ |
| Rectangle { \ |
| anchors.fill: parent; \ |
| color: "red" \ |
| } \ |
| \ |
| menuBar: MenuBar { \ |
| Menu { \ |
| title: qsTr("Menu") \ |
| } \ |
| } \ |
| } ' |
| |
| var window = Qt.createQmlObject(test_control, container, '') |
| window.visible = true |
| waitForRendering(window.contentItem) |
| verify(window.height > 0) |
| window.destroy() |
| } |
| |
| } |
| } |