def __OnSaveAs(self, e): # contains some of the same code as in FRunConfigDialog if (not os.path.isdir(RUNS_FOLDER)): print("<FTestSuiteGUI> No test procedures directory... " + "this is weird... returning") return dialog = wx.TextEntryDialog(self, "Name to save test procedure.", "Save Test Procedure As", "", wx.OK | wx.CANCEL | wx.CENTER) while (True): if (dialog.ShowModal() == wx.ID_OK): value = dialog.GetValue() if (value == ""): FUtils.ShowWarning(self, "Enter a non empty name.") continue if (value == self.__testProcedure.GetName()): FUtils.ShowWarning( self, "Entered name is same as current name.") continue if (not FUtils.IsValidFilename(value)): FUtils.ShowWarning( self, "Not valid title for test " + "procedure; cannot contain the following " + "characters: \n" + FUtils.GetInvalidString()) continue if (os.path.isdir(os.path.join(RUNS_FOLDER, value))): message = ("A test procedure with name \"" + value + "\" already exists. Overwrite?") if (not FUtils.ShowConfirmation(self, message, False)): continue break else: return busyInfo = wx.BusyInfo("Saving test procedure. Please wait...") src = os.path.normpath( os.path.join(RUNS_FOLDER, self.__testProcedure.GetName())) dest = os.path.normpath(os.path.join(RUNS_FOLDER, value)) if (os.path.isdir(dest)): try: print "removing " + dest shutil.rmtree(dest) except OSError, e: text = (str(dest) + " is in use. Select another name for " + "the run or close any application using that " + "directory.") self.__ShowWarning(text) return
def OpenTestProcedure(self, filename): testProcedure = self.__BusyInfoOpenTestProcedure(filename) recovered = testProcedure.GetRecoveredTestIds() if (recovered != ""): FUtils.ShowWarning( self, "Encountered unfinished test " + "executions. Recovering to previous finished execution " + "for these tests:\n\n" + recovered) for regExId in testProcedure.GetRegExIdGenerator(): dataSets = self.__BusyInfoCheckForNewTests(testProcedure, regExId) if (len(dataSets) == 0): continue displayDataSets = "" for dataSet in dataSets: displayDataSets = ( displayDataSets + FUtils.GetRelativePath(dataSet, MAIN_FOLDER) + "\n") if (FUtils.ShowConfirmation( self, "Found these missing data sets for " + "Regular Expression " + str(regExId) + ": \n" + testProcedure.GetRegExString(regExId) + "\n\n\n" + displayDataSets + "\n\n" + "Do you want to add them to the test procedure? " + "Selecting \"No\" will also ignore them from future " + "confirmations.", False)): settings = testProcedure.GetRegExSettings(regExId) for dataSet in dataSets: testProcedure.AddTest(dataSet, settings) else: ignored = testProcedure.GetIgnoredRegExList(regExId) if (len(ignored) == 0): ignored.append("") # len(dataSet) != 0 for dataSet in dataSets: displayedFilename = FUtils.GetRelativePath( dataSet, MAIN_FOLDER) regExPath = FUtils.NormalizeRegEx(displayedFilename) newIgnored = ignored[-1] if (newIgnored != ""): newIgnored = newIgnored + "|" newIgnored = newIgnored + regExPath if (len(newIgnored) < 30000): ignored[-1] = newIgnored else: ignored.append(regExPath) testProcedure.SetRegEx(regExId, testProcedure.GetRegExList(regExId), ignored) busyInfo = wx.BusyInfo("Opening test procedure: Creating grid. " + "Please wait...") child = RunTable(self.__MDIparent, wx.ID_ANY, testProcedure) child.Maximize(True) child.Show(True)
def __OnContextDeleteExecution(self, e): keys = self.__grid.GetSelectedKeys() if (len(keys) == 0): return message = ("Permanently delete the latest execution from the " + "following tests?\n") for key in keys: test = self.__testProcedure.GetTest(key) message = (message + " " + test.GetSeparatedFilename() + "\n") if (FUtils.ShowConfirmation(self, message, True)): changed = False for key in keys: test = self.__testProcedure.GetTest(key) if (test.HasCurrentExecution()): self.__grid.PartialRefreshRemove(test) test.DeleteCurrentExecution() self.__grid.ReplaceExecution(key, test, test.GetCurrentExecution()) self.__grid.PartialRefreshAdd(test) self.__grid.PartialRefreshDone()
class FSelectDataSetDialog(wx.wizard.WizardPageSimple, FDataSetParser): """The dialog to select the data set for new tests. private members: self.__iconChecked -- index for the checked image in the ImageList for TreeCtrl. self.__iconUnchecked -- index for the unchecked image in the ImageList for TreeCtrl. self.__treeCtrl -- the TreeCtrl to display the directory structure. """ __CHECKED = True __UNCHECKED = False __FILE = True __FOLDER = False __TREE = 0 __REGEX = 1 def __init__(self, parent, testProcedure, settingsPage): """Creates this dialog. arguments: parent -- the parent frame for this dialog. """ wx.wizard.WizardPageSimple.__init__(self, parent) FDataSetParser.__init__(self) self.__allPaths = [] self.__settingsPage = settingsPage self.__testProcedure = testProcedure topSizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(topSizer) title = wx.StaticText(self, wx.ID_ANY, "Select Data Set") self.__treeRadio = wx.RadioButton(self, style=wx.RB_GROUP) self.__treeRadio.Bind(wx.EVT_RADIOBUTTON, self.__OnTreeButtonClicked) self.__commentsCtrl = None self.__iconUnchecked = None self.__iconChecked = None self.__treeCtrl = wx.TreeCtrl(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(300, 250), wx.TR_HAS_BUTTONS | wx.TR_HIDE_ROOT) self.__treeCtrl.AssignImageList(self.__LoadImages()) self.__PopulateTree(self.__treeCtrl) self.__treeCtrl.Bind(wx.EVT_LEFT_DOWN, self.__OnLeftDown) self.__treeCtrl.Bind(wx.EVT_LEFT_DCLICK, self.__OnLeftDouble) self.__regButton = wx.RadioButton(self) self.__regButton.Bind(wx.EVT_RADIOBUTTON, self.__OnRegExButtonClicked) self.__regExpLabel = wx.StaticText(self, -1, "Regular Expression") self.__regExpCtrl = wx.TextCtrl(self, -1) self.__regExpUpdateButton = wx.Button(self, wx.ID_ANY, "&Update") self.__regExpUpdateButton.Bind(wx.EVT_BUTTON, self.__OnUpdate) self.__regExpExample1 = wx.StaticText( self, wx.ID_ANY, "eg. For everything with \"animation\" in " + "StandardDataSets/Collada section:") self.__regExpExample1.SetOwnForegroundColour(wx.BLUE) self.__regExpExample2 = wx.StaticText( self, wx.ID_ANY, "StandardDataSets\\\\Collada\\\\[\\S]*animation[\\S]*") self.__regExpExample2.SetOwnForegroundColour(wx.BLUE) treeSizer = wx.BoxSizer(wx.HORIZONTAL) treeSizer.Add(self.__treeRadio, 0, wx.ALL, 5) treeSizer.Add(self.__treeCtrl, 1, wx.EXPAND | wx.ALL, 5) bottomOuterSizer = wx.BoxSizer(wx.VERTICAL) bottomSizer = wx.BoxSizer(wx.HORIZONTAL) bottomSizer.Add(self.__regButton, 0, wx.ALL, 5) bottomSizer.Add(self.__regExpLabel, 1, wx.EXPAND | wx.ALL, 5) bottomSizer.Add(self.__regExpCtrl, 2, wx.EXPAND | wx.TOP | wx.RIGHT | wx.LEFT, 5) bottomSizer.Add(self.__regExpUpdateButton, 0, wx.ALL, 5) bottomOuterSizer.Add(bottomSizer) bottomOuterSizer.Add(self.__regExpExample1, 0, wx.ALIGN_CENTER | wx.TOP, 2) bottomOuterSizer.Add(self.__regExpExample2, 0, wx.ALIGN_CENTER | wx.TOP, 2) topSizer.Add(title, 0, wx.ALIGN_CENTER | wx.ALL, 5) topSizer.Add(treeSizer, 1, wx.EXPAND) topSizer.Add(self.__GetCommentsSizer(), 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 20) topSizer.Add(bottomOuterSizer, 0, wx.ALIGN_CENTER) self.__treeRadio.SetValue(True) self.__mode = FSelectDataSetDialog.__TREE self.__OnTreeButtonClicked(None) self.Bind(wx.wizard.EVT_WIZARD_PAGE_CHANGING, self.__OnFinish) def __OnFinish(self, e): settings = self.__settingsPage.GetSettings() regExId = self.__testProcedure.GetRegExId(settings) if (regExId == -1): concatRegEx = [] else: concatRegEx = copy.deepcopy( self.__testProcedure.GetRegExList(regExId)) if (concatRegEx[-1] != ""): concatRegEx[-1] = concatRegEx[-1] + "|" try: paths, regEx = self.__GetDataSets(concatRegEx) except re.error, ex: FUtils.ShowWarning(self, "Bad regular expression.") e.Veto() return if (regEx == []): return if (regExId == -1): self.__testProcedure.AddRegEx(settings, regEx) else: if (FUtils.ShowConfirmation( self, "The following regular " + "expression is already assigned to the selected " + "settings:\n\n" + self.__testProcedure.GetRegExString(regExId) + "\n\n" + "Do you want to overwrite? No will append the new " + "regular expression with the one above.", False)): self.__testProcedure.SetRegEx( regExId, regEx, self.__testProcedure.GetIgnoredRegExList(regExId)) else: self.__testProcedure.SetRegEx( regExId, concatRegEx, self.__testProcedure.GetIgnoredRegExList(regExId))
def __DisplayDeleteTestMessage(self, keys, message): for key in keys: test = self.__testProcedure.GetTest(key) message = (message + " " + test.GetSeparatedFilename() + "\n") return FUtils.ShowConfirmation(self, message, True)