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
|
############################################################################
#
# Copyright (C) 2016 The Qt Company Ltd.
# Contact: https://www.qt.io/licensing/
#
# This file is part of Qt Creator.
#
# 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.
#
# GNU General Public License Usage
# Alternatively, this file may be used under the terms of the GNU
# General Public License version 3 as published by the Free Software
# Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
# included in the packaging of this file. Please review the following
# information to ensure the GNU General Public License requirements will
# be met: https://www.gnu.org/licenses/gpl-3.0.html.
#
############################################################################
source("../../shared/qtcreator.py")
def main():
startQC()
if not startedWithoutPluginError():
return
# using a temporary directory won't mess up a potentially existing
createNewQtQuickApplication(tempDir(), "untitled")
originalText = prepareQmlFile()
if originalText:
testReIndent(originalText)
invokeMenuItem("File", "Save All")
invokeMenuItem("File", "Exit")
def prepareQmlFile():
if not openDocument("untitled.Resources.qml\.qrc./.main\\.qml"):
test.fatal("Could not open main.qml")
return None
editor = waitForObject(":Qt Creator_QmlJSEditor::QmlJSTextEditorWidget")
isDarwin = platform.system() == 'Darwin'
for i in range(3):
if not placeCursorToLine(editor, 'title: qsTr("Hello World")'):
test.fatal("Couldn't find line(s) I'm looking for - QML file seems to "
"have changed!\nLeaving test...")
return None
# add some copyable code
if i == 0:
code = ["", "MouseArea {", "anchors.fill: parent", "onClicked: {",
"console.log(parent.title)"]
typeLines(editor, code)
# avoid having 'correctly' indented empty line
if isDarwin:
type(editor, "<Command+Shift+Left>")
else:
type(editor, "<Shift+Home>")
type(editor, "<Delete>")
# get back to the first entered line
for _ in range(5):
type(editor, "<Up>")
if isDarwin:
type(editor, "<Command+Right>")
else:
type(editor, "<End>")
else:
type(editor, "<Up>")
type(editor, "<Right>")
# mark until the end of file
if isDarwin:
markText(editor, "End")
else:
markText(editor, "Ctrl+End")
# unmark the closing brace
type(editor, "<Shift+Up>")
type(editor, "<Ctrl+c>")
for _ in range(11):
type(editor, "<Ctrl+v>")
# assume the current editor content to be indented correctly
originalText = "%s" % editor.plainText
indented = editor.plainText
lines = str(indented).splitlines()
test.log("Using %d lines..." % len(lines))
editor.plainText = "\n".join([line.lstrip() for line in lines]) + "\n"
return originalText
def testReIndent(originalText):
editor = waitForObject(":Qt Creator_QmlJSEditor::QmlJSTextEditorWidget")
type(editor, "<Ctrl+a>")
filenameCombo = waitForObject(":Qt Creator_FilenameQComboBox")
test.log("calling re-indent")
starttime = datetime.utcnow()
type(editor, "<Ctrl+i>")
waitFor("str(filenameCombo.currentText).endswith('*')", 25000)
endtime = datetime.utcnow()
test.xverify(originalText == str(editor.plainText),
"Verify that indenting restored the original text. "
"This may fail when empty lines are being indented.")
invokeMenuItem("File", "Save All")
waitFor("originalText == str(editor.plainText)", 25000)
textAfterReIndent = "%s" % editor.plainText
if originalText==textAfterReIndent:
test.passes("Text successfully re-indented after saving (indentation took: %d seconds)" % (endtime-starttime).seconds)
else:
# shrink the texts - it's huge output that takes long time to finish & screenshot is taken as well
originalText = shrinkText(originalText, 20)
textAfterReIndent = shrinkText(textAfterReIndent, 20)
test.fail("Re-indent of text unsuccessful...",
"Original (first 20 lines):\n%s\n\n______________________\nAfter re-indent (first 20 lines):\n%s"
% (originalText, textAfterReIndent))
def shrinkText(txt, lines=10):
return "".join(txt.splitlines(True)[0:lines])
|