--- a/ProjectDjango/Project.py Sat Nov 04 15:22:22 2017 +0100 +++ b/ProjectDjango/Project.py Sun Nov 12 14:56:13 2017 +0100 @@ -97,6 +97,9 @@ Class implementing the Django project support. """ RecentApplicationsKey = "Django/RecentApplications" +## RecentTestLabelsKey = "Django/RecentTestLabels" +## RecentTestTagsKey = "Django/RecentTestTags" +## RecentTestExcludeTagsKey = "Django/RecentTestExcludeTags" def __init__(self, plugin, parent=None): """ @@ -119,6 +122,13 @@ self.__recentApplications = [] self.__loadRecentApplications() + + self.__recentTestData = { + "RecentTestLabels": [], + "RecentTestTags": [], + "RecentTestExcludeTags": [], + } + self.__loadRecentTestData() def initActions(self): """ @@ -1559,6 +1569,64 @@ self.__recentApplications[:maxRecentApps] self.__saveRecentApplications() + def __loadRecentTestData(self): + """ + Private method to load the recently used test data lists. + """ + self.__recentTestData = { + "RecentTestLabels": [], + "RecentTestTags": [], + "RecentTestExcludeTags": [], + } + Preferences.Prefs.rsettings.sync() + maxRecentTestData = self.__plugin.getPreferences( + "RecentNumberTestData") + for key in self.__recentTestData: + recent = Preferences.Prefs.rsettings.value("Django/" + key) + if recent is not None: + self.__recentTestData[key] = recent[:maxRecentTestData] + + def __saveRecentTestData(self): + """ + Private method to save the list of recently used test data. + """ + for key in self.__recentTestData: + Preferences.Prefs.rsettings.setValue("Django/" + key, + self.__recentTestData[key]) + Preferences.Prefs.rsettings.sync() + + def getRecentTestData(self, key): + """ + Public method to get the list of recent test data. + + @param key key (name) of the test data to get + @type str + @return list of recent test data entries + @rtype list of str + """ + self.__loadRecentTestData() + return self.__recentTestData[key] + + def setMostRecentTestData(self, key, data): + """ + Public method to set the most recently used test data entry. + + @param key key (name) of the test data to set + @type str + @param data test data entry to be set + @type str + """ + if data in self.__recentTestData[key]: + self.__recentTestData[key].remove(data) + self.__recentTestData[key].insert(0, data) + + maxRecentTestData = self.__plugin.getPreferences( + "RecentNumberTestData") + if len(self.__recentTestData[key]) > maxRecentTestData: + self.__recentTestData[key] = \ + self.__recentTestData[key][:maxRecentTestData] + self.__saveRecentTestData() + def getProjectPath(self): """ Public method to get the path of the eric6 project. @@ -1877,8 +1945,9 @@ if self.__currentSite is None: raise DjangoNoSiteSelectedException else: - return os.path.join(self.__e5project.getProjectPath(), + path = os.path.join(self.__e5project.getProjectPath(), self.__currentSite) + return path def __setCurrentSite(self, site): """ @@ -2688,6 +2757,12 @@ except DjangoNoSiteSelectedException: return + from .DjangoTestDataDialog import DjangoTestDataDialog + dlg = DjangoTestDataDialog(self, self.__ui) + if dlg.exec_() == QDialog.Accepted: + labels, pattern, tags, excludeTags, keep, reverse = \ + dlg.getData() + args = Utilities.parseOptionString(consoleCmd) args[0] = Utilities.getExecutablePath(args[0]) args.append(self.__getPythonExecutable()) @@ -2695,7 +2770,20 @@ args.append("-Wall") args.append("manage.py") args.append("test") - args += self.__getApplications() + if pattern: + args.append("--pattern") + args.append(pattern) + for tag in tags: + args.append("--tag") + args.append(tag) + for tag in excludeTags: + args.append("--exclude-tag") + args.append(tag) + if keep: + args.append("--keepdb") + if reverse: + args.append("--reverse") + args.extend(labels) self.__adjustWorkingDirectory(args, wd) started, pid = QProcess.startDetached(args[0], args[1:], wd)