eric7/PyUnit/UnittestDialog.py

branch
eric7
changeset 8546
52454036c2b2
parent 8542
f8d3b4511358
child 8881
54e42bc2437a
--- a/eric7/PyUnit/UnittestDialog.py	Wed Aug 25 17:44:36 2021 +0200
+++ b/eric7/PyUnit/UnittestDialog.py	Thu Aug 26 18:08:46 2021 +0200
@@ -14,7 +14,7 @@
 import os
 import contextlib
 
-from PyQt6.QtCore import pyqtSignal, QEvent, Qt, pyqtSlot
+from PyQt6.QtCore import pyqtSignal, pyqtSlot, Qt, QEvent, QFileInfo
 from PyQt6.QtGui import QColor
 from PyQt6.QtWidgets import (
     QWidget, QDialog, QApplication, QDialogButtonBox, QListWidgetItem,
@@ -32,6 +32,11 @@
 
 import Preferences
 
+from Globals import (
+    recentNameUnittestDiscoverHistory, recentNameUnittestFileHistory,
+    recentNameUnittestTestnameHistory
+)
+
 
 class UnittestDialog(QWidget, Ui_UnittestDialog):
     """
@@ -77,6 +82,9 @@
             self.setObjectName(name)
         self.setupUi(self)
         
+        self.clearHistoriesButton.setIcon(
+            UI.PixmapCache.getIcon("clearPrivateData"))
+        
         self.testsuitePicker.setMode(EricPathPickerModes.OPEN_FILE_MODE)
         self.testsuitePicker.setInsertPolicy(
             QComboBox.InsertPolicy.InsertAtTop)
@@ -89,6 +97,8 @@
         self.discoveryPicker.setSizeAdjustPolicy(
             QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLengthWithIcon)
         
+        self.testComboBox.lineEdit().setClearButtonEnabled(True)
+        
         self.discoverButton = self.buttonBox.addButton(
             self.tr("Discover"), QDialogButtonBox.ButtonRole.ActionRole)
         self.discoverButton.setToolTip(self.tr(
@@ -98,11 +108,13 @@
             """<p>This button starts a discovery of available tests.</p>"""))
         self.startButton = self.buttonBox.addButton(
             self.tr("Start"), QDialogButtonBox.ButtonRole.ActionRole)
+        
         self.startButton.setToolTip(self.tr(
             "Start the selected testsuite"))
         self.startButton.setWhatsThis(self.tr(
             """<b>Start Test</b>"""
             """<p>This button starts the selected testsuite.</p>"""))
+        
         self.startFailedButton = self.buttonBox.addButton(
             self.tr("Rerun Failed"), QDialogButtonBox.ButtonRole.ActionRole)
         self.startFailedButton.setToolTip(
@@ -111,12 +123,14 @@
             """<b>Rerun Failed</b>"""
             """<p>This button reruns all failed tests of the selected"""
             """ testsuite.</p>"""))
+        
         self.stopButton = self.buttonBox.addButton(
             self.tr("Stop"), QDialogButtonBox.ButtonRole.ActionRole)
         self.stopButton.setToolTip(self.tr("Stop the running unittest"))
         self.stopButton.setWhatsThis(self.tr(
             """<b>Stop Test</b>"""
             """<p>This button stops a running unittest.</p>"""))
+        
         self.discoverButton.setEnabled(False)
         self.stopButton.setEnabled(False)
         self.startButton.setDefault(True)
@@ -163,8 +177,6 @@
         self.savedModulelist = None
         self.savedSysPath = sys.path
         self.savedCwd = os.getcwd()
-        if prog:
-            self.insertProg(prog)
         
         self.rxPatterns = [
             self.tr("^Failure: "),
@@ -191,6 +203,13 @@
                 self.testSucceededUnexpected)
         
         self.__editors = []
+        
+        self.__loadRecent()
+        
+        self.insertProg(prog)
+        self.insertTestName("")
+        
+        self.clearHistoriesButton.clicked.connect(self.clearRecent)
     
     def keyPressEvent(self, evt):
         """
@@ -251,6 +270,8 @@
         @param start start directory name to be inserted
         @type str
         """
+        current = self.discoveryPicker.currentText()
+        
         # prepend the given directory to the discovery picker
         if start is None:
             start = ""
@@ -259,6 +280,9 @@
         self.discoverHistory.insert(0, start)
         self.discoveryPicker.clear()
         self.discoveryPicker.addItems(self.discoverHistory)
+        
+        if current:
+            self.discoveryPicker.setText(current)
     
     def insertProg(self, prog):
         """
@@ -267,6 +291,8 @@
         
         @param prog filename to be inserted (string)
         """
+        current = self.testsuitePicker.currentText()
+        
         # prepend the selected file to the testsuite picker
         if prog is None:
             prog = ""
@@ -275,6 +301,9 @@
         self.fileHistory.insert(0, prog)
         self.testsuitePicker.clear()
         self.testsuitePicker.addItems(self.fileHistory)
+        
+        if current:
+            self.testsuitePicker.setText(current)
     
     def insertTestName(self, testName):
         """
@@ -282,6 +311,8 @@
         
         @param testName name of the test to be inserted (string)
         """
+        current = self.testComboBox.currentText()
+        
         # prepend the selected file to the testsuite combobox
         if testName is None:
             testName = ""
@@ -290,6 +321,9 @@
         self.testNameHistory.insert(0, testName)
         self.testComboBox.clear()
         self.testComboBox.addItems(self.testNameHistory)
+        
+        if current:
+            self.testComboBox.setCurrentText(current)
     
     @pyqtSlot()
     def on_testsuitePicker_aboutToShowPathPickerDialog(self):
@@ -365,13 +399,83 @@
         """
         if button == self.discoverButton:
             self.__discover()
+            self.__saveRecent()
         elif button == self.startButton:
             self.startTests()
+            self.__saveRecent()
         elif button == self.stopButton:
             self.__stopTests()
         elif button == self.startFailedButton:
             self.startTests(failedOnly=True)
     
+    def __loadRecent(self):
+        """
+        Private method to load the most recently used lists.
+        """
+        Preferences.Prefs.rsettings.sync()
+        
+        # 1. discovery history
+        self.discoverHistory = []
+        rs = Preferences.Prefs.rsettings.value(
+            recentNameUnittestDiscoverHistory)
+        if rs is not None:
+            recent = [f
+                      for f in Preferences.toList(rs)
+                      if QFileInfo(f).exists()]
+            self.discoverHistory = recent[
+                :Preferences.getDebugger("RecentNumber")]
+        
+        # 2. test file history
+        self.fileHistory = []
+        rs = Preferences.Prefs.rsettings.value(
+            recentNameUnittestFileHistory)
+        if rs is not None:
+            recent = [f
+                      for f in Preferences.toList(rs)
+                      if QFileInfo(f).exists()]
+            self.fileHistory = recent[
+                :Preferences.getDebugger("RecentNumber")]
+        
+        # 3. test name history
+        self.testNameHistory = []
+        rs = Preferences.Prefs.rsettings.value(
+            recentNameUnittestTestnameHistory)
+        if rs is not None:
+            recent = [n for n in Preferences.toList(rs) if n]
+            self.testNameHistory = recent[
+                :Preferences.getDebugger("RecentNumber")]
+    
+    def __saveRecent(self):
+        """
+        Private method to save the most recently used lists.
+        """
+        Preferences.Prefs.rsettings.setValue(
+            recentNameUnittestDiscoverHistory, self.discoverHistory)
+        Preferences.Prefs.rsettings.setValue(
+            recentNameUnittestFileHistory, self.fileHistory)
+        Preferences.Prefs.rsettings.setValue(
+            recentNameUnittestTestnameHistory, self.testNameHistory)
+        
+        Preferences.Prefs.rsettings.sync()
+    
+    @pyqtSlot()
+    def clearRecent(self):
+        """
+        Public slot to clear the recently used lists.
+        """
+        # clear histories
+        self.discoverHistory = []
+        self.fileHistory = []
+        self.testNameHistory = []
+        
+        # clear widgets with histories
+        self.discoveryPicker.clear()
+        self.testsuitePicker.clear()
+        self.testComboBox.clear()
+        
+        # sync histories
+        self.__saveRecent()
+    
     @pyqtSlot()
     def __discover(self):
         """
@@ -383,6 +487,7 @@
         self.discoveryList.clear()
         
         discoveryStart = self.discoveryPicker.currentText()
+        self.insertDiscovery(discoveryStart)
         self.sbLabel.setText(self.tr("Discovering Tests"))
         QApplication.processEvents()
         
@@ -677,6 +782,9 @@
             discoveryStart = self.discoveryPicker.currentText()
             testFileName = ""
             testName = ""
+            
+            if discoveryStart:
+                self.insertDiscovery(discoveryStart)
         else:
             discoveryStart = ""
             testFileName = self.testsuitePicker.currentText()
@@ -1382,3 +1490,17 @@
             return True
         
         return False
+
+
+def clearSavedHistories(self):
+    """
+    Function to clear the saved history lists.
+    """
+    Preferences.Prefs.rsettings.setValue(
+        recentNameUnittestDiscoverHistory, [])
+    Preferences.Prefs.rsettings.setValue(
+        recentNameUnittestFileHistory, [])
+    Preferences.Prefs.rsettings.setValue(
+        recentNameUnittestTestnameHistory, [])
+    
+    Preferences.Prefs.rsettings.sync()

eric ide

mercurial