forked from qt-creator/qt-creator
Squish: Add another test for refactoring C++
Change-Id: I3c0e1f6c501a83595e86afaa39e8c543e0b7189c Reviewed-by: Robert Loehning <robert.loehning@digia.com>
This commit is contained in:
@@ -7,6 +7,6 @@ HOOK_SUB_PROCESSES=false
|
||||
IMPLICITAUTSTART=0
|
||||
LANGUAGE=Python
|
||||
OBJECTMAP=../objects.map
|
||||
TEST_CASES=tst_CSUP01 tst_CSUP02 tst_CSUP04 tst_CSUP05
|
||||
TEST_CASES=tst_CSUP01 tst_CSUP02 tst_CSUP03 tst_CSUP04 tst_CSUP05
|
||||
VERSION=2
|
||||
WRAPPERS=Qt
|
||||
|
||||
119
tests/system/suite_CSUP/tst_CSUP03/test.py
Normal file
119
tests/system/suite_CSUP/tst_CSUP03/test.py
Normal file
@@ -0,0 +1,119 @@
|
||||
#############################################################################
|
||||
##
|
||||
## Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
|
||||
## Contact: http://www.qt-project.org/legal
|
||||
##
|
||||
## 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 Digia. For licensing terms and
|
||||
## conditions see http://qt.digia.com/licensing. For further information
|
||||
## use the contact form at http://qt.digia.com/contact-us.
|
||||
##
|
||||
## GNU Lesser General Public License Usage
|
||||
## Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
## General Public License version 2.1 as published by the Free Software
|
||||
## Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
## packaging of this file. Please review the following information to
|
||||
## ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
##
|
||||
## In addition, as a special exception, Digia gives you certain additional
|
||||
## rights. These rights are described in the Digia Qt LGPL Exception
|
||||
## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
##
|
||||
#############################################################################
|
||||
|
||||
source("../../shared/qtcreator.py")
|
||||
|
||||
inputDialog = "{type='QInputDialog' unnamed='1' visible='1'}"
|
||||
|
||||
def revertMainCpp():
|
||||
invokeMenuItem('File', 'Revert "main.cpp" to Saved')
|
||||
clickButton(waitForObject(":Revert to Saved.Proceed_QPushButton"))
|
||||
|
||||
def constructExpectedCode(original, codeLines, funcSuffix):
|
||||
withBraces = 'WithBraces' in funcSuffix
|
||||
myFuncCall = " myFunc%s(dummy);" % funcSuffix
|
||||
if not withBraces:
|
||||
myFuncCall += "\n "
|
||||
tmp = original.splitlines()
|
||||
tmp.insert(tmp.index("{") + 1, "\n".join([" %s" % codeLines[1], myFuncCall]))
|
||||
insertHere = tmp.index("using namespace std;")
|
||||
if insertHere == -1:
|
||||
test.fatal("Template code seems to have changed.")
|
||||
return original
|
||||
generatedFunc = "\nvoid myFunc%s(int dummy)\n{" % funcSuffix
|
||||
for line in codeLines[2:]:
|
||||
if line.endswith(";") and not line.startswith("while"):
|
||||
generatedFunc += "\n %s" % line
|
||||
else:
|
||||
generatedFunc += "\n %s" % line
|
||||
if withBraces:
|
||||
generatedFunc += "\n \n }"
|
||||
# QTCREATORBUG-12118: last line has 4 additional blanks
|
||||
if JIRA.isBugStillOpen(12118):
|
||||
generatedFunc += " "
|
||||
else:
|
||||
test.warning("Remove unnecessary code - QTCREATORBUG-12118 is closed.")
|
||||
generatedFunc += "\n}"
|
||||
tmp.insert(insertHere + 1, generatedFunc)
|
||||
return "\n".join(tmp) + "\n"
|
||||
|
||||
def main():
|
||||
startApplication("qtcreator" + SettingsPath)
|
||||
if not startedWithoutPluginError():
|
||||
return
|
||||
projectName = createNewNonQtProject()
|
||||
if platform.system() == 'Darwin':
|
||||
home = '<Ctrl+Left>'
|
||||
else:
|
||||
home = '<Home>'
|
||||
|
||||
code = {"if" : ["", "int dummy = 0;", "if (dummy < 10)", "++dummy;"],
|
||||
"if with braces" : ["", "int dummy = 0;", "if (dummy < 10) {", "++dummy;"],
|
||||
"if else" : ["", "int dummy = 0;", "if (dummy < 10)", "++dummy;", "else", "--dummy;"],
|
||||
"if else with braces" : ["", "int dummy = 0;", "if (dummy < 10) {",
|
||||
"++dummy;", "} else {", "--dummy;"],
|
||||
"while" : ["", "int dummy = 0;", "while (dummy < 10)", "++dummy;"],
|
||||
"while with braces" : ["", "int dummy = 0;", "while (dummy < 10) {", "++dummy;"],
|
||||
"do while" : ["", "int dummy = 0;", "do", "++dummy;", "while (dummy < 10);"]
|
||||
}
|
||||
editor = getEditorForFileSuffix("main.cpp")
|
||||
if not editor:
|
||||
test.fatal("Failed to get an editor - leaving test.")
|
||||
invokeMenuItem("File", "Exit")
|
||||
return
|
||||
|
||||
originalContent = str(editor.plainText)
|
||||
for case, codeLines in code.items():
|
||||
funcSuffix = case.title().replace(" ", "")
|
||||
test.log("Testing: Extract Function for '%s'" % case)
|
||||
if not placeCursorToLine(editor, "{"):
|
||||
continue
|
||||
typeLines(editor, codeLines)
|
||||
if not placeCursorToLine(editor, codeLines[2]):
|
||||
revertMainCpp()
|
||||
continue
|
||||
type(editor, home)
|
||||
markText(editor, "Right", 2)
|
||||
snooze(1) # avoid timing issue with the parser
|
||||
invokeContextMenuItem(editor, 'Refactor', 'Extract Function')
|
||||
funcEdit = waitForObject("{buddy={text='Enter function name' type='QLabel' unnamed='1' "
|
||||
"visible='1' window=%s} type='QLineEdit' unnamed='1' visible='1'}"
|
||||
% inputDialog)
|
||||
replaceEditorContent(funcEdit, "myFunc%s" % funcSuffix)
|
||||
clickButton(waitForObject("{text='OK' type='QPushButton' unnamed='1' visible='1' window=%s}"
|
||||
% inputDialog))
|
||||
waitFor("'void myFunc%s' in str(editor.plainText)" % funcSuffix, 2500)
|
||||
# verify the change
|
||||
modifiedCode = str(editor.plainText)
|
||||
expectedCode = constructExpectedCode(originalContent, codeLines, funcSuffix)
|
||||
test.compare(modifiedCode, expectedCode, "Verifying whether code matches expected.")
|
||||
# reverting to initial state of main.cpp
|
||||
revertMainCpp()
|
||||
|
||||
invokeMenuItem('File', 'Exit')
|
||||
Reference in New Issue
Block a user