diff options
Diffstat (limited to 'tests/auto/quickcontrols/controls/data/tst_combobox.qml')
-rw-r--r-- | tests/auto/quickcontrols/controls/data/tst_combobox.qml | 94 |
1 files changed, 70 insertions, 24 deletions
diff --git a/tests/auto/quickcontrols/controls/data/tst_combobox.qml b/tests/auto/quickcontrols/controls/data/tst_combobox.qml index 5bb9d61815..4dfe53fcb0 100644 --- a/tests/auto/quickcontrols/controls/data/tst_combobox.qml +++ b/tests/auto/quickcontrols/controls/data/tst_combobox.qml @@ -1,5 +1,5 @@ // Copyright (C) 2017 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only import QtQuick import QtQuick.Window @@ -74,16 +74,7 @@ TestCase { objectName: "ShaderFX" width: rect.width height: rect.height - fragmentShader: " - uniform lowp sampler2D source; // this item - uniform lowp float qt_Opacity; // inherited opacity of this item - varying highp vec2 qt_TexCoord0; - void main() { - lowp vec4 p = texture2D(source, qt_TexCoord0); - lowp float g = dot(p.xyz, vec3(0.344, 0.5, 0.156)); - gl_FragColor = vec4(g, g, g, p.a) * qt_Opacity; - }" - + fragmentShader: "combobox/shader.frag.qsb" } } } @@ -1710,7 +1701,7 @@ TestCase { ComboBox { editable: true property bool gotit: false - Keys.onPressed: { + Keys.onPressed: function (event) { if (!gotit && event.key === Qt.Key_B) { gotit = true event.accepted = true @@ -2004,11 +1995,16 @@ TestCase { compare(currentIndexSpy.count, 1) } + readonly property font testFont: ({ + family: "Arial", + pixelSize: 12 + }) + Component { - id: appFontTextFieldComponent + id: fixedFontTextFieldComponent TextField { objectName: "appFontTextField" - font: Qt.application.font + font: testCase.testFont // We don't want the background's implicit width to interfere with our tests, // which are about implicit width of the contentItem of ComboBox, which is by default TextField. background: null @@ -2016,14 +2012,14 @@ TestCase { } Component { - id: appFontContentItemComboBoxComponent + id: fixedFontContentItemComboBoxComponent ComboBox { // Override the contentItem so that the font doesn't vary between styles. contentItem: TextField { objectName: "appFontContentItemTextField" // We do this just to be extra sure that the font never comes from the control, - // as we want it to match that of the TextField in the appFontTextFieldComponent. - font: Qt.application.font + // as we want it to match that of the TextField in the fixedFontTextFieldComponent. + font: testCase.testFont background: null } } @@ -2077,14 +2073,14 @@ TestCase { function test_implicitContentWidthPolicy_ContentItemImplicitWidth() { // Set ContentItemImplicitWidth and ensure that implicitContentWidth is as wide as the current item // by comparing it against the implicitWidth of an identical TextField - let control = createTemporaryObject(appFontContentItemComboBoxComponent, testCase, { + let control = createTemporaryObject(fixedFontContentItemComboBoxComponent, testCase, { model: ["Short", "Kinda long"], implicitContentWidthPolicy: ComboBox.ContentItemImplicitWidth }) verify(control) compare(control.implicitContentWidthPolicy, ComboBox.ContentItemImplicitWidth) - let textField = createTemporaryObject(appFontTextFieldComponent, testCase) + let textField = createTemporaryObject(fixedFontTextFieldComponent, testCase) verify(textField) // Don't set any text on textField because we're not accounting for the widest // text here, so we want to compare it against an empty TextField. @@ -2103,14 +2099,14 @@ TestCase { } function test_implicitContentWidthPolicy_WidestText(data) { - let control = createTemporaryObject(appFontContentItemComboBoxComponent, testCase, { + let control = createTemporaryObject(fixedFontContentItemComboBoxComponent, testCase, { model: data.model, implicitContentWidthPolicy: ComboBox.WidestText }) verify(control) compare(control.implicitContentWidthPolicy, ComboBox.WidestText) - let textField = createTemporaryObject(appFontTextFieldComponent, testCase) + let textField = createTemporaryObject(fixedFontTextFieldComponent, testCase) verify(textField) textField.text = "Kinda long" // Note that we don't need to change the current index here, as the implicitContentWidth @@ -2137,7 +2133,7 @@ TestCase { // Changes in font should result in the implicitContentWidth being updated. textField.font.pixelSize *= 2 // We have to change the contentItem's font size manually since we break the - // style's binding to the control's font when we set Qt.application.font to it. + // style's binding to the control's font when we set the fixed font on it. control.contentItem.font.pixelSize *= 2 control.font.pixelSize *= 2 compare(Math.ceil(control.implicitContentWidth), Math.ceil(textField.implicitWidth)) @@ -2148,14 +2144,14 @@ TestCase { } function test_implicitContentWidthPolicy_WidestTextWhenCompleted(data) { - let control = createTemporaryObject(appFontContentItemComboBoxComponent, testCase, { + let control = createTemporaryObject(fixedFontContentItemComboBoxComponent, testCase, { model: data.model, implicitContentWidthPolicy: ComboBox.WidestTextWhenCompleted }) verify(control) compare(control.implicitContentWidthPolicy, ComboBox.WidestTextWhenCompleted) - let textField = createTemporaryObject(appFontTextFieldComponent, testCase) + let textField = createTemporaryObject(fixedFontTextFieldComponent, testCase) verify(textField) textField.text = "Kinda long" compare(Math.ceil(control.implicitContentWidth), Math.ceil(textField.implicitWidth)) @@ -2277,6 +2273,35 @@ TestCase { compare(control.currentIndex, 1) } + // QTBUG-109721 - verify that an eaten press event for the space key + // doesn't open the popup when the key is released. + Component { + id: comboboxEatsSpace + ComboBox { + id: nonEditableComboBox + editable: false + model: ["NonEditable", "Delta", "Echo", "Foxtrot"] + Keys.onSpacePressed: (event) => event.accept + } + } + + function test_spacePressEaten() { + let control = createTemporaryObject(comboboxEatsSpace, testCase) + verify(control) + control.forceActiveFocus() + + var visibleChangedSpy = signalSpy.createObject(control, {target: control.popup, signalName: "visibleChanged"}) + verify(visibleChangedSpy.valid) + + // press doesn't open + keyPress(Qt.Key_Space) + verify(!control.pressed) + compare(visibleChangedSpy.count, 0) + // neither does release + keyRelease(Qt.Key_Space) + compare(visibleChangedSpy.count, 0) + } + Component { id: listOfGadgets QtObject { @@ -2295,4 +2320,25 @@ TestCase { control.currentIndex = 1; compare(control.displayText, "7"); } + + function test_contextObject() { + // We use the default delegate with required properties and pass + // an array of objects as model. This should work despite + // ComboBox setting itself as model object for the delegate. + + let control = createTemporaryObject( + comboBox, testCase, {model: fruitarray, textRole: "color"}); + verify(control); + compare(control.popup.contentItem.itemAtIndex(0).text, "red"); + + // Now we pass an AbstractItemModel with 2 roles. Since we use required properties + // the model object should still have the anonymous property, and it should be a + // QQmlDMAbstractItemModelData. + + control = createTemporaryObject(comboBox, testCase, { model: fruitmodel }); + verify(control); + for (var i = 0; i < 3; ++i) + ignoreWarning(/ComboBox\.qml\:[0-9]+\:[0-9]+\: Unable to assign QQmlDMAbstractItemModelData to QString/); + compare(control.popup.contentItem.itemAtIndex(0).text, ""); + } } |