summaryrefslogtreecommitdiff
path: root/tests/system/suite_general
diff options
context:
space:
mode:
Diffstat (limited to 'tests/system/suite_general')
-rw-r--r--tests/system/suite_general/suite.conf2
-rw-r--r--tests/system/suite_general/tst_default_settings/test.py236
-rw-r--r--tests/system/suite_general/tst_default_settings/testdata/win_compiler_paths.tsv19
-rw-r--r--tests/system/suite_general/tst_openqt_creator/test.py6
4 files changed, 259 insertions, 4 deletions
diff --git a/tests/system/suite_general/suite.conf b/tests/system/suite_general/suite.conf
index 0eebd931d6..19ee1d31df 100644
--- a/tests/system/suite_general/suite.conf
+++ b/tests/system/suite_general/suite.conf
@@ -7,6 +7,6 @@ HOOK_SUB_PROCESSES=false
IMPLICITAUTSTART=0
LANGUAGE=Python
OBJECTMAP=../objects.map
-TEST_CASES=tst_build_speedcrunch tst_cmake_speedcrunch tst_create_proj_wizard tst_installed_languages tst_openqt_creator
+TEST_CASES=tst_build_speedcrunch tst_cmake_speedcrunch tst_create_proj_wizard tst_default_settings tst_installed_languages tst_openqt_creator
VERSION=2
WRAPPERS=Qt
diff --git a/tests/system/suite_general/tst_default_settings/test.py b/tests/system/suite_general/tst_default_settings/test.py
new file mode 100644
index 0000000000..c7523eba2c
--- /dev/null
+++ b/tests/system/suite_general/tst_default_settings/test.py
@@ -0,0 +1,236 @@
+source("../../shared/qtcreator.py")
+
+import re
+import tempfile
+import __builtin__
+
+currentSelectedTreeItem = None
+warningOrError = re.compile('<p><b>((Error|Warning).*?)</p>')
+
+def main():
+ emptySettings = tempDir()
+ __createMinimumIni__(emptySettings)
+ SettingsPath = ' -settingspath "%s"' % emptySettings
+ startApplication("qtcreator" + SettingsPath)
+ invokeMenuItem("Tools", "Options...")
+ __checkBuildAndRun__()
+ clickButton(waitForObject(":Options.Cancel_QPushButton"))
+ invokeMenuItem("File", "Exit")
+ __checkCreatedSettings__(emptySettings)
+
+def __createMinimumIni__(emptyParent):
+ qtProjDir = os.path.join(emptyParent, "QtProject")
+ os.mkdir(qtProjDir)
+ iniFile = open(os.path.join(qtProjDir, "QtCreator.ini"), "w")
+ iniFile.write("[%General]\n")
+ iniFile.write("OverrideLanguage=C\n")
+ iniFile.close()
+
+def __checkBuildAndRun__():
+ waitForObjectItem(":Options_QListView", "Build & Run")
+ clickItem(":Options_QListView", "Build & Run", 14, 15, 0, Qt.LeftButton)
+ # check compilers
+ expectedCompilers = __getExpectedCompilers__()
+ foundCompilers = []
+ foundCompilerNames = []
+ clickTab(waitForObject(":Options.qt_tabwidget_tabbar_QTabBar"), "Compilers")
+ compilerTV = waitForObject(":Kits_Or_Compilers_QTreeView")
+ __iterateTree__(compilerTV, __compFunc__, foundCompilers, foundCompilerNames)
+ test.verify(__compareCompilers__(foundCompilers, expectedCompilers),
+ "Verifying found and expected compilers are equal.")
+ # check Qt versions
+ qmakePath = which("qmake")
+ foundQt = []
+ clickTab(waitForObject(":Options.qt_tabwidget_tabbar_QTabBar"), "Qt Versions")
+ qtTW = waitForObject(":QtSupport__Internal__QtVersionManager.qtdirList_QTreeWidget")
+ __iterateTree__(qtTW, __qtFunc__, foundQt, qmakePath)
+ if foundQt:
+ foundQt = foundQt[0]
+ # check kits
+ clickTab(waitForObject(":Options.qt_tabwidget_tabbar_QTabBar"), "Kits")
+ kitsTV = waitForObject(":Kits_Or_Compilers_QTreeView")
+ __iterateTree__(kitsTV, __kitFunc__, foundQt, foundCompilerNames)
+
+def __iterateTree__(treeObj, additionalFunc, *additionalParameters):
+ global currentSelectedTreeItem
+ model = treeObj.model()
+ # 1st row: Auto-detected, 2nd row: Manual
+ for sect in dumpIndices(model):
+ sObj = "%s container=%s}" % (objectMap.realName(sect)[:-1], objectMap.realName(treeObj))
+ items = dumpIndices(model, sect)
+ doneItems = []
+ for it in items:
+ indexName = str(it.data().toString())
+ itObj = "%s container=%s}" % (objectMap.realName(it)[:-1], sObj)
+ alreadyDone = doneItems.count(itObj)
+ doneItems.append(itObj)
+ if alreadyDone:
+ itObj = "%s occurrence='%d'}" % (itObj[:-1], alreadyDone + 1)
+ currentSelectedTreeItem = waitForObject(itObj, 3000)
+ mouseClick(currentSelectedTreeItem, 5, 5, 0, Qt.LeftButton)
+ additionalFunc(indexName, *additionalParameters)
+ currentSelectedTreeItem = None
+
+def __compFunc__(it, foundComp, foundCompNames):
+ try:
+ waitFor("object.exists(':CompilerPath.Utils_BaseValidatingLineEdit')", 1000)
+ pathLineEdit = findObject(":CompilerPath.Utils_BaseValidatingLineEdit")
+ foundComp.append(str(pathLineEdit.text))
+ except:
+ label = findObject("{buddy={container=':qt_tabwidget_stackedwidget_QWidget' "
+ "text='Initialization:' type='QLabel' unnamed='1' visible='1'} "
+ "type='QLabel' unnamed='1' visible='1'}")
+ foundComp.append({it:str(label.text)})
+ foundCompNames.append(it)
+
+def __qtFunc__(it, foundQt, qmakePath):
+ foundQt.append(it)
+ qtPath = str(waitForObject(":QtSupport__Internal__QtVersionManager.qmake_QLabel").text)
+ if platform.system() in ('Microsoft', 'Windows'):
+ qtPath = qtPath.lower()
+ qmakePath = qmakePath.lower()
+ test.compare(qtPath, qmakePath, "Verifying found and expected Qt version are equal.")
+ try:
+ errorLabel = findObject(":QtSupport__Internal__QtVersionManager.errorLabel.QLabel")
+ test.warning("Detected error or warning: '%s'" % errorLabel.text)
+ except:
+ pass
+
+def __kitFunc__(it, foundQt, foundCompNames):
+ global currentSelectedTreeItem, warningOrError
+ qtVersionStr = str(waitForObject(":Kits_QtVersion_QComboBox").currentText)
+ test.compare(it, "Desktop (default)", "Verifying whether default Desktop kit has been created.")
+ if foundQt:
+ test.compare(qtVersionStr, foundQt, "Verifying if Qt versions match.")
+ compilerCombo = waitForObject("{occurrence='3' type='QComboBox' unnamed='1' visible='1' "
+ "window=':Qt Creator_Core::Internal::MainWindow'}")
+ test.verify(str(compilerCombo.currentText) in foundCompNames,
+ "Verifying if one of the found compilers had been set.")
+ if currentSelectedTreeItem:
+ foundWarningOrError = warningOrError.search(str(currentSelectedTreeItem.toolTip))
+ if foundWarningOrError:
+ details = str(foundWarningOrError.group(1)).replace("<br>", "\n")
+ details = details.replace("<b>", "").replace("</b>", "")
+ test.warning("Detected error and/or warning: %s" % details)
+
+def __getExpectedCompilers__():
+ expected = []
+ if platform.system() in ('Microsoft', 'Windows'):
+ expected.extend(__getWinCompilers__())
+ compilers = ["g++"]
+ if platform.system() in ('Linux', 'Darwin'):
+ compilers.extend(["g++-4.0", "g++-4.2", "clang++"])
+ for compiler in compilers:
+ compilerPath = which(compiler)
+ if compilerPath:
+ if compiler == 'clang++':
+ if subprocess.call(['clang++', '-dumpmachine']) != 0:
+ test.warning("clang found in PATH, but version is not supported.")
+ continue
+ expected.append(compilerPath)
+ return expected
+
+def __getWinCompilers__():
+ result = []
+ winEnvVars = __getWinEnvVars__()
+ for record in testData.dataset("win_compiler_paths.tsv"):
+ envvar = winEnvVars.get(testData.field(record, "envvar"), "")
+ compiler = os.path.abspath(os.path.join(envvar, testData.field(record, "path"),
+ testData.field(record, "file")))
+ if os.path.exists(compiler):
+ parameters = testData.field(record, "displayedParameters").split(",")
+ usedParameters = testData.field(record, "usedParameters").split(",")
+ if testData.field(record, "isSDK") == "true":
+ for para, used in zip(parameters, usedParameters):
+ result.append(
+ {"%s \(.*?\) \(%s\)" % (testData.field(record, 'displayName'),
+ para)
+ :"%s %s" % (compiler, used)})
+ else:
+ for para, used in zip(parameters, usedParameters):
+ result.append({"%s (%s)" % (testData.field(record, 'displayName'), para)
+ :"%s %s" % (compiler, used)})
+ return result
+
+# using os.getenv() or getOutputFromCmdline() do not work - they would return C:\Program Files (x86)
+# for %ProgramFiles% as well as for %ProgramFiles(x86)% when using Python 32bit on 64bit machines
+def __getWinEnvVars__():
+ result = {}
+ tmpF, tmpFPath = tempfile.mkstemp()
+ envvars = subprocess.call('set', stdout=tmpF, shell=True)
+ os.close(tmpF)
+ tmpF = open(tmpFPath, "r")
+ for line in tmpF:
+ tmp = line.split("=")
+ result[tmp[0]] = tmp[1]
+ tmpF.close()
+ os.remove(tmpFPath)
+ return result
+
+
+def __compareCompilers__(foundCompilers, expectedCompilers):
+ equal = True
+ flags = 0
+ isWin = platform.system() in ('Microsoft', 'Windows')
+ if isWin:
+ flags = re.IGNORECASE
+ for currentFound in foundCompilers:
+ if isinstance(currentFound, dict):
+ foundExp = False
+ for currentExp in expectedCompilers:
+ if isinstance(currentExp, (str, unicode)):
+ continue
+ key = currentExp.keys()[0]
+ # the regex .*? is used for the different possible version strings of the WinSDK
+ # if it's present a regex will be validated otherwise simple string comparison
+ if (((".*?" in key and re.match(key, currentFound.keys()[0], flags))
+ or currentFound.keys() == currentExp.keys())):
+ if ((isWin and os.path.abspath(currentFound.values()[0].lower())
+ == os.path.abspath(currentExp.values()[0].lower()))
+ or currentFound.values() == currentExp.values()):
+ foundExp = True
+ break
+ equal = foundExp
+ else:
+ if isWin:
+ equal = currentFound.lower() in __lowerStrs__(expectedCompilers)
+ else:
+ equal = currentFound in expectedCompilers
+ if not equal:
+ test.fail("Found '%s' but was not expected." % str(currentFound),
+ str(expectedCompilers))
+ break
+ return equal
+
+def __lowerStrs__(iterable):
+ for it in iterable:
+ if isinstance(it, (str, unicode)):
+ yield it.lower()
+ else:
+ yield it
+
+def __checkCreatedSettings__(settingsFolder):
+ qtProj = os.path.join(settingsFolder, "QtProject")
+ folders = []
+ files = [{os.path.join(qtProj, "QtCreator.db"):0},
+ {os.path.join(qtProj, "QtCreator.ini"):30}]
+ folders.append(os.path.join(qtProj, "qtcreator"))
+ files.extend([{os.path.join(folders[0], "devices.xml"):0},
+ {os.path.join(folders[0], "helpcollection.qhc"):0},
+ {os.path.join(folders[0], "profiles.xml"):0},
+ {os.path.join(folders[0], "qtversion.xml"):0},
+ {os.path.join(folders[0], "toolchains.xml"):0}])
+ folders.extend([os.path.join(folders[0], "generic-highlighter"),
+ os.path.join(folders[0], "json"),
+ os.path.join(folders[0], "macros")])
+ for f in folders:
+ test.verify(os.path.isdir(f),
+ "Verifying whether folder '%s' has been created." % os.path.basename(f))
+ for f in files:
+ fName = f.keys()[0]
+ fMinSize = f.values()[0]
+ text = "created non-empty"
+ if fMinSize > 0:
+ text = "modified"
+ test.verify(os.path.isfile(fName) and os.path.getsize(fName) > fMinSize,
+ "Verifying whether file '%s' has been %s." % (os.path.basename(fName), text))
diff --git a/tests/system/suite_general/tst_default_settings/testdata/win_compiler_paths.tsv b/tests/system/suite_general/tst_default_settings/testdata/win_compiler_paths.tsv
new file mode 100644
index 0000000000..0438a4698b
--- /dev/null
+++ b/tests/system/suite_general/tst_default_settings/testdata/win_compiler_paths.tsv
@@ -0,0 +1,19 @@
+"envvar" "path" "file" "displayName" "displayedParameters" "usedParameters" "isSDK"
+"ProgramFiles" "Microsoft SDKs\Windows\v7.0\Bin" "SetEnv.cmd" "Microsoft Windows SDK for Windows 7" "x86,amd64,x86_amd64,ia64,x86_ia64" "/x86,/x64,/x64,/ia64,/ia64" "true"
+"ProgramFiles(x86)" "Microsoft SDKs\Windows\v7.0\Bin" "SetEnv.cmd" "Microsoft Windows SDK for Windows 7" "x86,amd64,x86_amd64,ia64,x86_ia64" "/x86,/x64,/x64,/ia64,/ia64" "true"
+"ProgramFiles" "Microsoft SDKs\Windows\v7.1\Bin" "SetEnv.cmd" "Microsoft Windows SDK for Windows 7" "x86,amd64,x86_amd64,ia64,x86_ia64" "/x86,/x64,/x64,/ia64,/ia64" "true"
+"ProgramFiles(x86)" "Microsoft SDKs\Windows\v7.1\Bin" "SetEnv.cmd" "Microsoft Windows SDK for Windows 7" "x86,amd64,x86_amd64,ia64,x86_ia64" "/x86,/x64,/x64,/ia64,/ia64" "true"
+"VS80COMNTOOLS" "..\..\VC\Bin" "vcvars32.bat" "Microsoft Visual C++ Compiler 8.0" "x86" "" "false"
+"VS80COMNTOOLS" "..\..\VC\Bin\amd64" "vcvarsamd64.bat" "Microsoft Visual C++ Compiler 8.0" "amd64" "amd64" "false"
+"VS80COMNTOOLS" "..\..\VC\Bin" "vcvarsx86_amd64.bat" "Microsoft Visual C++ Compiler 8.0" "x86_amd64" "x86_amd64" "false"
+"VS80COMNTOOLS" "..\..\VC\Bin" "vcvars64.bat" "Microsoft Visual C++ Compiler 8.0" "ia64" "ia64" "false"
+"VS80COMNTOOLS" "..\..\VC\Bin" "vcvarsx86_ia64.bat" "Microsoft Visual C++ Compiler 8.0" "x86_ia64" "x86_ia64" "false"
+"VS90COMNTOOLS" "..\..\VC\Bin" "vcvars32.bat" "Microsoft Visual C++ Compiler 9.0" "x86" "" "false"
+"VS90COMNTOOLS" "..\..\VC\Bin\amd64" "vcvarsamd64.bat" "Microsoft Visual C++ Compiler 9.0" "amd64" "amd64" "false"
+"VS90COMNTOOLS" "..\..\VC\Bin" "vcvarsx86_amd64.bat" "Microsoft Visual C++ Compiler 9.0" "x86_amd64" "x86_amd64" "false"
+"VS90COMNTOOLS" "..\..\VC\Bin" "vcvars64.bat" "Microsoft Visual C++ Compiler 9.0" "ia64" "ia64" "false"
+"VS90COMNTOOLS" "..\..\VC\Bin" "vcvarsx86_ia64.bat" "Microsoft Visual C++ Compiler 9.0" "x86_ia64" "x86_ia64" "false"
+"VS100COMNTOOLS" "..\..\VC\Bin" "vcvars32.bat" "Microsoft Visual C++ Compiler 10.0" "x86" "" "false"
+"VS100COMNTOOLS" "..\..\VC" "vcvarsall.bat" "Microsoft Visual C++ Compiler 10.0" "x86,amd64,x86_amd64,ia64,x86_ia64" "x86,amd64,x86_amd64,ia64,x86_ia64" "false"
+"VS110COMNTOOLS" "..\..\VC\Bin" "vcvars32.bat" "Microsoft Visual C++ Compiler 11.0" "x86" "" "false"
+"VS110COMNTOOLS" "..\..\VC" "vcvarsall.bat" "Microsoft Visual C++ Compiler 11.0" "x86,amd64,x86_amd64,ia64,x86_ia64" "x86,amd64,x86_amd64,ia64,x86_ia64" "false"
diff --git a/tests/system/suite_general/tst_openqt_creator/test.py b/tests/system/suite_general/tst_openqt_creator/test.py
index 8d34cbc100..6708d2c0a7 100644
--- a/tests/system/suite_general/tst_openqt_creator/test.py
+++ b/tests/system/suite_general/tst_openqt_creator/test.py
@@ -15,9 +15,9 @@ def main():
# Wait for parsing to complete
waitForSignal("{type='CppTools::Internal::CppModelManager' unnamed='1'}", "sourceFilesRefreshed(QStringList)", 300000)
- naviTreeView = "{column='0' container=':Qt Creator_Utils::NavigationTreeView' text='%s' type='QModelIndex'}"
- compareProjectTree(naviTreeView % "speedcrunch", "projecttree_speedcrunch.tsv")
- compareProjectTree(naviTreeView % "qtcreator", "projecttree_creator.tsv")
+ naviTreeView = "{column='0' container=':Qt Creator_Utils::NavigationTreeView' text~='%s' type='QModelIndex'}"
+ compareProjectTree(naviTreeView % "speedcrunch( \(\S+\))?", "projecttree_speedcrunch.tsv")
+ compareProjectTree(naviTreeView % "qtcreator( \(\S+\))?", "projecttree_creator.tsv")
# Now check some basic lookups in the search box
selectFromLocator(": Qlist::QList", "QList::QList")