blob: d42a25512f565b8cb4ac7d939df20b2a90f6722f [file] [log] [blame]
/****************************************************************************
**
** 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 QtQuick.Controls 1.2
import QtQuick.Controls.Private 1.0
import QtTest 1.0
Item {
id: container
width: 300; height: 300
TestCase {
id: testcase
name: "Tests_SpinBox"
when: windowShown
property int arrowMargin: 4 // the mouse areas for the up/down arrows have margins
property point mainCoord: "0,0"
property point upCoord: "0,0"
property point downCoord: "0,0"
function test_increment_key() {
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {maximumValue: 50}', container, '')
spinbox.forceActiveFocus()
compare(spinbox.maximumValue, 50)
spinbox.value = spinbox.maximumValue - 3
keyPress(Qt.Key_Up)
compare(spinbox.value, spinbox.maximumValue - 2)
keyPress(Qt.Key_Up)
keyPress(Qt.Key_Up)
compare(spinbox.value, spinbox.maximumValue)
keyPress(Qt.Key_Up)
compare(spinbox.value, spinbox.maximumValue)
spinbox.destroy()
}
function test_decrement_key() {
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {minimumValue: 10}', container, '')
spinbox.forceActiveFocus()
compare(spinbox.minimumValue, 10)
spinbox.value = spinbox.minimumValue + 3
keyPress(Qt.Key_Down)
compare(spinbox.value, spinbox.minimumValue + 2)
keyPress(Qt.Key_Down)
keyPress(Qt.Key_Down)
compare(spinbox.value, spinbox.minimumValue)
keyPress(Qt.Key_Down)
compare(spinbox.value, spinbox.minimumValue)
spinbox.destroy()
}
function test_initial_value() {
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {decimals: 3 ; value: 0.25}', container, '')
compare(spinbox.value, 0.25)
spinbox.destroy()
spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {value: 0.25 ; decimals: 3}', container, '')
compare(spinbox.value, 0.25)
spinbox.destroy()
}
function test_keyboard_input_data() {
return [
{tag: "1", input: [Qt.Key_1], value: 1},
{tag: "10", input: [Qt.Key_1, Qt.Key_0], value: 10},
// max 99 -> last '0' ignored
{tag: "100", input: [Qt.Key_1, Qt.Key_0, Qt.Key_0], value: 10},
{tag: "1.1", input: [Qt.Key_1, Qt.locale().decimalPoint, Qt.Key_1], value: 1.1, decimals: 1},
{tag: "10.10", input: [Qt.Key_1, Qt.Key_0, Qt.locale().decimalPoint, Qt.Key_1, Qt.Key_0], value: 10.10, decimals: 2},
// max 99 -> '3' ignored, decimals 2 -> '6' ignored
{tag: "123.456", input: [Qt.Key_1, Qt.Key_2, Qt.Key_3, Qt.locale().decimalPoint, Qt.Key_4, Qt.Key_5, Qt.Key_6], value: 12.45, decimals: 2},
{tag: "-1", input: [Qt.Key_Minus, Qt.Key_1], value: -1, minimumValue: -99},
{tag: "-10", input: [Qt.Key_Minus, Qt.Key_1, Qt.Key_0], value: -10, minimumValue: -99},
// min -99 -> last 0 ignored
{tag: "-100", input: [Qt.Key_Minus, Qt.Key_1, Qt.Key_0, Qt.Key_0], value: -10, minimumValue: -99},
{tag: "-1.1", input: [Qt.Key_Minus, Qt.Key_1, Qt.locale().decimalPoint, Qt.Key_1], value: -1.1, decimals: 1, minimumValue: -99},
{tag: "-10.10", input: [Qt.Key_Minus, Qt.Key_1, Qt.Key_0, Qt.locale().decimalPoint, Qt.Key_1, Qt.Key_0], value: -10.10, decimals: 2, minimumValue: -99},
// min -99 -> '3' ignored, decimals 2 -> '6' ignored
{tag: "-123.456", input: [Qt.Key_Minus, Qt.Key_1, Qt.Key_2, Qt.Key_3, Qt.locale().decimalPoint, Qt.Key_4, Qt.Key_5, Qt.Key_6], value: -12.45, decimals: 2, minimumValue: -99},
{tag: "2.54cm", input: [Qt.Key_2, Qt.locale().decimalPoint, Qt.Key_5, Qt.Key_4, Qt.Key_C, Qt.Key_M], value: 2.54, suffix: "cm", decimals: 2},
{tag: "$100", input: [Qt.Key_Dollar, Qt.Key_1, Qt.Key_0, Qt.Key_0], value: 100, maximumValue: 100},
{tag: "asdf foo", input: [Qt.Key_A, Qt.Key_S, Qt.Key_D, Qt.Key_F, Qt.Key_Space, Qt.Key_F, Qt.Key_O, Qt.Key_O], value: 0},
{tag: "a1b2c3d4e5", input: [Qt.Key_A, Qt.Key_1, Qt.Key_B, Qt.Key_2, Qt.Key_C, Qt.Key_3, Qt.Key_D, Qt.Key_4, Qt.Key_E, Qt.Key_5], value: 1234, maximumValue: 2000},
{tag: "20", input: [Qt.Key_2, Qt.Key_0, Qt.Key_Return], value: 2, maximumValue: 10},
{tag: "200", input: [Qt.Key_2, Qt.Key_0, Qt.Key_0, Qt.Key_Return], value: 20, maximumValue: 100},
{tag: "2000", input: [Qt.Key_2, Qt.Key_0, Qt.Key_0, Qt.Key_0, Qt.Key_Return], value: 200, maximumValue: 1000},
{tag: "0123", input: [Qt.Key_0, Qt.Key_1, Qt.Key_2, Qt.Key_3, Qt.Key_Return], value: 123, maximumValue: 150},
{tag: "-20", input: [Qt.Key_Minus, Qt.Key_2, Qt.Key_0, Qt.Key_Return], value: -2, minimumValue: -10},
{tag: "-200", input: [Qt.Key_Minus, Qt.Key_2, Qt.Key_0, Qt.Key_0, Qt.Key_Return], value: -20, minimumValue: -100},
{tag: "-2000", input: [Qt.Key_Minus, Qt.Key_2, Qt.Key_0, Qt.Key_0, Qt.Key_0, Qt.Key_Return], value: -200, minimumValue: -1000},
{tag: "-0123", input: [Qt.Key_Minus, Qt.Key_0, Qt.Key_1, Qt.Key_2, Qt.Key_3, Qt.Key_Return], value: -123, minimumValue: -150},
{tag: "5", input: [Qt.Key_2, Qt.Key_0, Qt.Key_Return], value: 20, minimumValue: 10, maximumValue: 99},
{tag: "-5", input: [Qt.Key_Minus, Qt.Key_2, Qt.Key_0, Qt.Key_Return], value: -20, minimumValue: -99, maximumValue: -10},
]
}
function test_keyboard_input(data) {
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {}', container, '')
spinbox.forceActiveFocus()
if (data.decimals !== undefined)
spinbox.decimals = data.decimals
if (data.minimumValue !== undefined)
spinbox.minimumValue = data.minimumValue
if (data.maximumValue !== undefined)
spinbox.maximumValue = data.maximumValue
if (data.prefix !== undefined)
spinbox.prefix = data.prefix
if (data.suffix !== undefined)
spinbox.suffix = data.suffix
// select all & input
keyClick(Qt.Key_A, Qt.ControlModifier)
for (var i = 0; i < data.input.length; ++i)
keyClick(data.input[i])
compare(spinbox.value, data.value)
spinbox.destroy()
}
function test_increment_mouse() {
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {maximumValue: 50}', container, '')
spinbox.forceActiveFocus()
setCoordinates(spinbox)
spinbox.value = spinbox.maximumValue - 3
mouseClick(spinbox, upCoord.x, upCoord.y, Qt.LeftButton)
compare(spinbox.value, spinbox.maximumValue - 2)
mouseClick(spinbox, upCoord.x, upCoord.y, Qt.LeftButton)
mouseClick(spinbox, upCoord.x, upCoord.y, Qt.LeftButton)
compare(spinbox.value, spinbox.maximumValue)
mouseClick(spinbox, upCoord.x, upCoord.y, Qt.LeftButton)
compare(spinbox.value, spinbox.maximumValue)
spinbox.destroy()
}
function test_decrement_mouse() {
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {minimumValue: 10}', container, '')
spinbox.forceActiveFocus()
setCoordinates(spinbox)
spinbox.value = spinbox.minimumValue + 3
mouseClick(spinbox, downCoord.x, downCoord.y, Qt.LeftButton)
compare(spinbox.value, spinbox.minimumValue + 2)
mouseClick(spinbox, downCoord.x, downCoord.y, Qt.LeftButton)
mouseClick(spinbox, downCoord.x, downCoord.y, Qt.LeftButton)
compare(spinbox.value, spinbox.minimumValue)
mouseClick(spinbox, downCoord.x, downCoord.y, Qt.LeftButton)
compare(spinbox.value, spinbox.minimumValue)
spinbox.destroy()
}
function test_move_mouse() {
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {}', container, '')
spinbox.forceActiveFocus()
setCoordinates(spinbox)
mouseMove(spinbox, mainCoord.x, mainCoord.y)
compare(spinbox.hovered, true)
compare(spinbox.__styleData.upHovered, false)
compare(spinbox.__styleData.downHovered, false)
mouseMove(spinbox.parent, upCoord.x, upCoord.y)
compare(spinbox.__styleData.upHovered, true)
compare(spinbox.__styleData.downHovered, false)
mouseMove(spinbox, downCoord.x, downCoord.y)
compare(spinbox.__styleData.upHovered, false)
compare(spinbox.__styleData.downHovered, true)
mouseMove(spinbox, mainCoord.x - 2, mainCoord.y - 2)
compare(spinbox.hovered, false)
compare(spinbox.__styleData.upHovered, false)
compare(spinbox.__styleData.downHovered, false)
spinbox.destroy()
}
function test_maxvalue() {
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {}', container, '')
spinbox.value = spinbox.maximumValue + 1
compare(spinbox.value, spinbox.maximumValue)
spinbox.maximumValue = 0;
spinbox.minimumValue = 0;
spinbox.value = 10;
compare(spinbox.value, 0)
spinbox.maximumValue = 5;
spinbox.minimumValue = 0;
spinbox.value = 10;
compare(spinbox.value, 5)
spinbox.destroy()
}
function test_minvalue() {
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {}', container, '')
spinbox.value = spinbox.minimumValue - 1
compare(spinbox.value, spinbox.minimumValue)
spinbox.maximumValue = 0;
spinbox.minimumValue = 6;
spinbox.value = 3;
compare(spinbox.value, 6)
spinbox.maximumValue = 10;
spinbox.minimumValue = 6;
spinbox.value = 0;
compare(spinbox.value, 6)
spinbox.destroy()
}
function test_decimals() {
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {}', container, '')
spinbox.decimals = 0
spinbox.value = 1.00001
compare(spinbox.value, 1)
compare(spinbox.__text, "1")
spinbox.decimals = 1
spinbox.value = 1.00001
compare(spinbox.value, 1)
compare(spinbox.__text, "1" + Qt.locale().decimalPoint + "0")
spinbox.value = 1.1
compare(spinbox.value, 1.1)
compare(spinbox.__text, "1" + Qt.locale().decimalPoint + "1")
spinbox.decimals = 5
spinbox.value = 1.00001
compare(spinbox.value, 1.00001)
compare(spinbox.__text, "1" + Qt.locale().decimalPoint + "00001")
spinbox.decimals = 6
compare(spinbox.value, 1.00001)
compare(spinbox.__text, "1" + Qt.locale().decimalPoint + "000010")
spinbox.destroy()
}
function test_groupSeparators() {
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox { maximumValue: 1000 }', container, '')
spinbox.value = 1000
// QTBUG-31839: SpinBox displays group separators
compare(spinbox.__text.indexOf(Qt.locale().groupSeparator), -1)
spinbox.destroy()
}
function test_stepsize()
{
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {}', container, '')
spinbox.forceActiveFocus()
spinbox.stepSize = 2
spinbox.value = 10
compare(spinbox.value, 10)
keyPress(Qt.Key_Up)
compare(spinbox.value, 10 + spinbox.stepSize)
var previousValue = spinbox.value
keyPress(Qt.Key_Down)
compare(spinbox.value, previousValue - spinbox.stepSize)
spinbox.destroy()
}
function test_negativeStepSize()
{
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {}', container, '')
spinbox.forceActiveFocus()
spinbox.minimumValue = -50
spinbox.maximumValue = 50
spinbox.stepSize = -2
spinbox.value = 5
compare(spinbox.value, 5)
keyPress(Qt.Key_Up)
compare(spinbox.value, 5 + spinbox.stepSize)
var previousValue = spinbox.value
keyPress(Qt.Key_Down)
compare(spinbox.value, previousValue - spinbox.stepSize)
// test on the edges
spinbox.value = -49
keyPress(Qt.Key_Up)
compare(spinbox.value, spinbox.minimumValue)
spinbox.value = 49
keyPress(Qt.Key_Down)
compare(spinbox.value, spinbox.maximumValue)
spinbox.destroy()
}
function test_initialization_order()
{
var spinbox = Qt.createQmlObject("import QtQuick.Controls 1.2; SpinBox { id: spinbox;" +
"maximumValue: 2000; value: 1000; implicitWidth:80}",
container, '')
compare(spinbox.value, 1000);
var spinbox2 = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox { minimumValue: -1000 ; value:-1000}',
container, '')
compare(spinbox2.value, -1000);
spinbox.destroy()
spinbox2.destroy()
}
function test_setFontsize(){
var control = Qt.createQmlObject('import QtQuick.Controls 1.2; import QtQuick.Controls.Styles 1.1; SpinBox {style: SpinBoxStyle{}}', container, '')
var width = control.width;
var height = control.height;
control.font.pixelSize = 40
verify(control.width > width) // ensure that the text field resizes
verify(control.height > height)
control.destroy()
}
function test_get_active_focus_when_up_or_down_was_pressed(){
if (Settings.hasTouchScreen)
skip("Fails with touch screens");
var test_control = 'import QtQuick 2.2; \
import QtQuick.Controls 1.2; \
Column { \
property alias spinbox: _spinbox; \
property alias textfield: _textfield; \
SpinBox { \
id: _spinbox; \
} \
TextField { \
id: _textfield; \
text: "textfile"; \
} \
} '
var control = Qt.createQmlObject(test_control, container, '')
verify(control !== null)
var spinbox = control.spinbox
var textfield = control.textfield
verify(spinbox !== null)
verify(textfield !== null)
waitForRendering(control)
var up = getMouseArea(spinbox, "mouseUp")
verify(up !== null)
var down = getMouseArea(spinbox, "mouseDown")
verify(down !== null)
textfield.forceActiveFocus()
verify(!spinbox.activeFocus)
verify(textfield.activeFocus)
mouseClick(up, up.width/2, up.height/2)
verify(spinbox.activeFocus)
verify(!textfield.activeFocus)
textfield.forceActiveFocus()
verify(!spinbox.activeFocus)
verify(textfield.activeFocus)
mouseClick(down, down.width/2, down.height/2)
verify(spinbox.activeFocus)
verify(!textfield.activeFocus)
textfield.forceActiveFocus()
verify(!spinbox.activeFocus)
verify(textfield.activeFocus)
spinbox.activeFocusOnPress = false
mouseClick(up, up.width/2, up.height/2)
verify(!spinbox.activeFocus)
verify(textfield.activeFocus)
mouseClick(down, down.width/2, down.height/2)
verify(!spinbox.activeFocus)
verify(textfield.activeFocus)
control.destroy()
}
function getMouseArea(control, name) {
for (var i = 0; i < control.children.length; i++) {
if (control.children[i].objectName === name)
return control.children[i]
}
return null
}
function test_activeFocusOnPress(){
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {x: 20; y: 20; width: 100; height: 50}', container, '')
spinbox.activeFocusOnPress = false
verify(!spinbox.activeFocus)
mouseClick(spinbox, 30, 30)
verify(!spinbox.activeFocus)
spinbox.activeFocusOnPress = true
verify(!spinbox.activeFocus)
mouseClick(spinbox, 30, 30)
verify(spinbox.activeFocus)
spinbox.destroy()
}
function test_activeFocusOnTab() {
var test_control = 'import QtQuick 2.2; \
import QtQuick.Controls 1.2; \
Item { \
width: 200; \
height: 200; \
property alias control1: _control1; \
property alias control2: _control2; \
property alias control3: _control3; \
SpinBox { \
y: 20; \
id: _control1; \
activeFocusOnTab: true; \
} \
SpinBox { \
y: 70; \
id: _control2; \
activeFocusOnTab: false; \
} \
SpinBox { \
y: 120; \
id: _control3; \
activeFocusOnTab: true; \
} \
} '
var control = Qt.createQmlObject(test_control, container, '')
control.control1.forceActiveFocus()
verify(control.control1.activeFocus)
verify(!control.control2.activeFocus)
verify(!control.control3.activeFocus)
keyPress(Qt.Key_Tab)
verify(!control.control1.activeFocus)
verify(!control.control2.activeFocus)
verify(control.control3.activeFocus)
keyPress(Qt.Key_Tab)
verify(control.control1.activeFocus)
verify(!control.control2.activeFocus)
verify(!control.control3.activeFocus)
keyPress(Qt.Key_Tab, Qt.ShiftModifier)
verify(!control.control1.activeFocus)
verify(!control.control2.activeFocus)
verify(control.control3.activeFocus)
keyPress(Qt.Key_Tab, Qt.ShiftModifier)
verify(control.control1.activeFocus)
verify(!control.control2.activeFocus)
verify(!control.control3.activeFocus)
control.control2.activeFocusOnTab = true
control.control3.activeFocusOnTab = false
keyPress(Qt.Key_Tab)
verify(!control.control1.activeFocus)
verify(control.control2.activeFocus)
verify(!control.control3.activeFocus)
keyPress(Qt.Key_Tab)
verify(control.control1.activeFocus)
verify(!control.control2.activeFocus)
verify(!control.control3.activeFocus)
keyPress(Qt.Key_Tab, Qt.ShiftModifier)
verify(!control.control1.activeFocus)
verify(control.control2.activeFocus)
verify(!control.control3.activeFocus)
keyPress(Qt.Key_Tab, Qt.ShiftModifier)
verify(control.control1.activeFocus)
verify(!control.control2.activeFocus)
verify(!control.control3.activeFocus)
control.destroy()
}
function test_ImplicitSize() // Verify if we correctly grow and shrink depending on contents
{
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {}', container, '')
spinbox.forceActiveFocus()
spinbox.minimumValue = -50
spinbox.maximumValue = 50
var oldSize = spinbox.implicitWidth
spinbox.maximumValue = 5000
verify(oldSize < spinbox.implicitWidth)
oldSize = spinbox.implicitWidth
spinbox.maximumValue = 50
verify(oldSize > spinbox.implicitWidth)
oldSize = spinbox.implicitWidth
spinbox.minimumValue = -5000
verify(oldSize < spinbox.implicitWidth)
spinbox.minimumValue = -50
oldSize = spinbox.implicitWidth
spinbox.minimumValue = -5000
verify(oldSize < spinbox.implicitWidth)
spinbox.minimumValue = -50
oldSize = spinbox.implicitWidth
spinbox.minimumValue = -5000
verify(oldSize < spinbox.implicitWidth)
spinbox.minimumValue = -50
spinbox.decimals = 0
oldSize = spinbox.implicitWidth
spinbox.decimals = 4
verify(oldSize < spinbox.implicitWidth)
spinbox.destroy()
}
function test_wheel() {
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox {}', container, '')
spinbox.forceActiveFocus()
spinbox.minimumValue = 0
spinbox.maximumValue = 99
spinbox.value = 10
mouseWheel(spinbox, 5, 5, 0, 120)
compare(spinbox.value, 11)
mouseWheel(spinbox, 5, 5, 0, -120)
mouseWheel(spinbox, 5, 5, 0, -120)
compare(spinbox.value, 9)
spinbox.destroy()
}
function test_editingFinished() {
var component = Qt.createComponent("spinbox/sp_editingfinished.qml")
compare(component.status, Component.Ready)
var test = component.createObject(container);
verify(test !== null, "test control created is null")
var control1 = test.control1
verify(control1 !== null)
var control2 = test.control2
verify(control2 !== null)
control1.forceActiveFocus()
verify(control1.activeFocus)
verify(!control2.activeFocus)
verify(control1.myeditingfinished === false)
verify(control2.myeditingfinished === false)
keyPress(Qt.Key_Tab)
verify(!control1.activeFocus)
verify(control2.activeFocus)
verify(control1.myeditingfinished === true)
keyPress(Qt.Key_Enter)
verify(!control1.activeFocus)
verify(control2.activeFocus)
verify(control2.myeditingfinished === true)
test.destroy()
}
function test_construction() {
// onValueChanged should not be emitted during construction.
var root = Qt.createQmlObject("
import QtQuick 2.2
import QtQuick.Controls 1.2
Item {
id: root
property bool ok: true
Item {
SpinBox {
value: 42
onValueChanged: { if (check === null) root.ok = false; }
}
}
Rectangle {
id: check
}
}",
container, "");
verify(root.ok);
}
function setCoordinates(item)
{
mainCoord.x = item.x + 1
mainCoord.y = item.y + 1
upCoord.x = item.x + item.width - arrowMargin
upCoord.y = item.y + arrowMargin
downCoord.x = upCoord.x
downCoord.y = item.y + item.height - arrowMargin
}
function test_fixup() {
var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.2; SpinBox { minimumValue: -1 }', container, '')
verify(spinbox)
spinbox.forceActiveFocus()
verify(spinbox.activeFocus)
keyClick(Qt.Key_Minus)
keyClick(Qt.Key_0)
compare(spinbox.__text, "-0")
// fixup "-0" to "0" on accept
keyClick(Qt.Key_Enter)
compare(spinbox.__text, "0")
spinbox.prefix = "pfx"
spinbox.suffix = "sfx"
keyClick(Qt.Key_A, Qt.ControlModifier)
keyClick(Qt.Key_Minus)
keyClick(Qt.Key_0)
compare(spinbox.__text, "pfx-0sfx")
// fixup "-0" to "0" on defocus
spinbox.focus = false
compare(spinbox.__text, "pfx0sfx")
spinbox.destroy()
}
function test_keys() {
var component = Qt.createComponent("spinbox/sb_keys.qml")
compare(component.status, Component.Ready)
var test = component.createObject(container);
verify(test !== null, "test control created is null")
var control1 = test.control1
verify(control1 !== null)
control1.forceActiveFocus()
verify(control1.activeFocus)
verify(control1.gotit === false)
verify(control1.value === 9)
keyPress(Qt.Key_A)
verify(control1.activeFocus)
verify(control1.gotit === false)
verify(control1.value === 9)
keyPress(Qt.Key_B)
verify(control1.activeFocus)
verify(control1.gotit === true)
verify(control1.value === 7)
keyPress(Qt.Key_B)
verify(control1.activeFocus)
verify(control1.gotit === true)
verify(control1.value === 7)
test.destroy()
}
Component {
id: moveMouseFlickable
Flickable {
property alias spinbox: _spinbox
width: 100
height: 200
contentHeight: 500
contentWidth: 200
SpinBox {
id: _spinbox
x: 20
y: 100
minimumValue: 0
maximumValue: 12500
}
}
}
function test_moveMouseInFlickable() {
var control = createTemporaryObject(moveMouseFlickable, container)
var spinbox = control.spinbox
spinbox.forceActiveFocus()
setCoordinates(spinbox)
mousePress(spinbox, upCoord.x, upCoord.y, Qt.LeftButton)
mouseMove(spinbox.parent, mainCoord.x, mainCoord.y - 50, 500)
compare(spinbox.hovered, false)
compare(spinbox.__styleData.upHovered, false)
compare(spinbox.__styleData.downHovered, false)
mouseRelease(spinbox.parent, mainCoord.x, mainCoord.y - 50, Qt.LeftButton)
var currentVal = spinbox.value
mouseMove(spinbox.parent, upCoord.x, upCoord.y)
compare(spinbox.hovered, true)
compare(spinbox.__styleData.upHovered, true)
compare(spinbox.__styleData.downHovered, false)
compare(spinbox.value, currentVal)
}
}
}