1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtTest
import QtQuick
import QtQuick.VirtualKeyboard
import "handwriting.js" as Handwriting
import "utils.js" as Utils
HandwritingInputPanel {
id: handwritingInputPanel
z: 99
property var testcase
readonly property var inputMethod: InputContext.inputEngine.inputMethod
readonly property var wordCandidatePopupList: Utils.findChildByProperty(handwritingInputPanel, "objectName", "wordCandidatePopupList", null)
anchors.fill: parent
signal inputMethodResult(var text)
Connections {
target: InputContext
function onPreeditTextChanged() { if (InputContext.preeditText.length > 0) inputMethodResult(InputContext.preeditText) }
}
Connections {
target: InputContext.inputEngine
function onVirtualKeyClicked(key, text, modifiers, isAutoRepeat) { inputMethodResult(text) }
}
SignalSpy {
id: inputMethodResultSpy
target: handwritingInputPanel
signalName: "inputMethodResult"
}
SignalSpy {
id: wordCandidateListChangedSpy
target: wordCandidatePopupList.model
signalName: "dataChanged"
}
function wordCandidatePopupListSearchSuggestion(suggestion, timeout) {
if (wordCandidatePopupList.visible === false)
return false
if (timeout !== undefined && timeout > 0) {
// Note: Not using SignalSpy.wait() since it causes the test case to fail in case the signal is not emitted
wordCandidateListChangedSpy.clear()
var dt = new Date()
var startTime = dt.getTime()
while (wordCandidateListChangedSpy.count == 0) {
dt = new Date()
var elapsedTime = dt.getTime() - startTime
if (elapsedTime >= timeout)
break
var maxWait = Math.min(timeout - elapsedTime, 50)
testcase.wait(maxWait)
}
}
var suggestionFound = false
var origIndex = handwritingInputPanel.wordCandidatePopupList.currentIndex
if (origIndex !== -1) {
while (true) {
if (handwritingInputPanel.wordCandidatePopupList.model.dataAt(handwritingInputPanel.wordCandidatePopupList.currentIndex) === suggestion) {
suggestionFound = true
break
}
if (handwritingInputPanel.wordCandidatePopupList.currentIndex === handwritingInputPanel.wordCandidatePopupList.count - 1)
break
handwritingInputPanel.wordCandidatePopupList.incrementCurrentIndex()
}
if (!suggestionFound) {
while (handwritingInputPanel.wordCandidatePopupList.currentIndex !== origIndex) {
handwritingInputPanel.wordCandidatePopupList.decrementCurrentIndex()
}
}
testcase.waitForRendering(handwritingInputPanel)
}
return suggestionFound
}
function wordCandidatePopupListSelectCurrentItem() {
if (!handwritingInputPanel.wordCandidatePopupList.currentItem)
return false
testcase.wait(200)
var itemPos = handwritingInputPanel.mapFromItem(handwritingInputPanel.wordCandidatePopupList.currentItem,
handwritingInputPanel.wordCandidatePopupList.currentItem.width / 2,
handwritingInputPanel.wordCandidatePopupList.currentItem.height / 2)
testcase.mouseClick(handwritingInputPanel, itemPos.x, itemPos.y, Qt.LeftButton, 0, 20)
testcase.waitForRendering(handwritingInputPanel)
return true
}
function emulateHandwriting(ch, instant) {
if (!available)
return false
active = true
var hwrInputArea = Utils.findChildByProperty(handwritingInputPanel, "objectName", "hwrInputArea", null)
inputMethodResultSpy.clear()
if (!Handwriting.emulate(testcase, hwrInputArea, ch, instant)) {
console.warn("Cannot produce the symbol '%1' in full screen handwriting mode".arg(ch))
return false
}
if (isSuperimposedHandwriting())
return true;
inputMethodResultSpy.wait(3000)
return inputMethodResultSpy.count > 0
}
function isSuperimposedHandwriting() {
if (!available)
return false
return inputMethod != null && inputMethod.hasOwnProperty("superimposed") && inputMethod.superimposed;
}
}
|