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
119
120
121
122
123
124
|
# Copyright (C) 2020 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
source("../../shared/qtcreator.py")
# This tests for QTCREATORBUG-24565
TabBlankTab = '\t \t'
TripleTab = '\t\t\t'
def main():
files = map(lambda record: os.path.join(srcPath, testData.field(record, "filename")),
testData.dataset("files.tsv"))
files = list(filter(lambda x: not x.endswith(".bin"), files))
for currentFile in files:
if not neededFilePresent(currentFile):
return
startQC()
if not startedWithoutPluginError():
return
ignoredFiles = ignoredFilesFromSettings()
directory = tempDir()
for currentFile in files:
baseName = os.path.basename(currentFile)
fileName = os.path.join(directory, baseName)
test.log("Testing file %s" % fileName)
content = readFile(currentFile)
preparedContent, emptyLine, trailingWS = prepareFileExternal(fileName, content)
isIgnored = isIgnoredFile(baseName, ignoredFiles)
test.verify(preparedContent.find('\t') != -1, "Added at least one tab.")
test.log("Expecting file to be cleaned (trailing whitespace): %s" % str(not isIgnored))
invokeMenuItem("File", "Open File or Project...")
selectFromFileDialog(fileName, True)
editor = getEditorForFileSuffix(fileName)
if editor == None:
test.fatal("Could not get the editor for '%s'" % fileName,
"Skipping this file for now.")
continue
fileCombo = waitForObject(":Qt Creator_FilenameQComboBox")
invokeMenuItem("Edit", "Advanced", "Clean Whitespace")
if emptyLine or (trailingWS and not isIgnored):
waitFor("str(fileCombo.currentText).endswith('*')", 2500)
currentContent = str(editor.toPlainText())
if trailingWS and not isIgnored:
test.verify(currentContent.find(TabBlankTab) == -1, "Trailing whitespace cleaned.")
expectedContent = preparedContent.replace(TabBlankTab, '')
if emptyLine:
expectedContent = expectedContent.replace(TripleTab, '')
test.compare(currentContent, expectedContent,
"'%s' vs '%s'" % (currentContent, expectedContent))
else:
test.verify(currentContent.find(TabBlankTab) != -1, "Trailing whitespace still present.")
if emptyLine:
test.compare(currentContent.find(TripleTab), -1, "Indentation cleaned.")
hasBeenCleaned = str(fileCombo.currentText).endswith('*')
test.compare(hasBeenCleaned, emptyLine or (trailingWS and not isIgnored),
"Cleaned as expected.")
if hasBeenCleaned:
invokeMenuItem('File', 'Save "%s"' % os.path.basename(fileName))
invokeMenuItem("File", "Exit")
def prepareFileExternal(fileName, content):
if content.find('\t') != -1:
test.fatal("Tabs present before edit (%s)." % fileName)
modifiedContent = ''
emptyLine = trailingWS = False
lines = content.splitlines(True)
for currentLine in lines:
if not emptyLine:
if len(currentLine) == 1: # just the line break
currentLine = TripleTab + '\n'
emptyLine = True
test.log("Replaced empty line by 3 tabs.")
elif not trailingWS:
if re.match(r"^.*\S+.*$", currentLine) is not None:
currentLine = currentLine[:-1] + TabBlankTab + '\n'
trailingWS = True
test.log("Added trailing whitespace.")
modifiedContent += currentLine
with open(fileName, "w") as f:
f.write(modifiedContent)
if not emptyLine or not trailingWS:
test.warning("Could not completely prepare test file %s." % fileName)
return modifiedContent, emptyLine, trailingWS
def isIgnoredFile(fileName, ignoredFiles):
for filePattern in ignoredFiles:
pattern = filePattern.replace('.', r'\.')
pattern = pattern.replace('*', '.*')
pattern = pattern.replace('?', '.')
pattern = '^' + pattern + '$'
if re.match(pattern, fileName) is not None:
return True
return False
def ignoredFilesFromSettings():
invokeMenuItem("Edit", "Preferences...")
mouseClick(waitForObjectItem(":Options_QListView", "Text Editor"))
waitForObject("{container=':Options.qt_tabwidget_tabbar_QTabBar' type='TabItem' "
"text='Behavior'}")
clickOnTab(":Options.qt_tabwidget_tabbar_QTabBar", "Behavior")
cleanWhiteSpaceCB = "{type='QCheckBox' text='Skip clean whitespace for file types:'}"
ensureChecked(cleanWhiteSpaceCB)
ignoredLE = "{type='QLineEdit' leftWidget=%s}" % cleanWhiteSpaceCB
ignoredLineEdit = waitForObject(ignoredLE)
ignoredFiles = str(ignoredLineEdit.text).split(',')
test.log("Ignored files: %s" % str(ignoredFiles))
clickButton(":Options.Cancel_QPushButton")
return ignoredFiles
|