Extended the unit test interface to support skipped tests, expected failures and unexpected successes and to better cope with Python2 scripts when run from the eric IDE.

Sun, 03 Jul 2011 18:01:53 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 03 Jul 2011 18:01:53 +0200
changeset 1166
a94b0a2fafd7
parent 1163
0155e7aa345d
child 1167
8beb6bacd874

Extended the unit test interface to support skipped tests, expected failures and unexpected successes and to better cope with Python2 scripts when run from the eric IDE.

APIs/Python3/eric5.api file | annotate | diff | comparison | revisions
DebugClients/Python/DCTestResult.py file | annotate | diff | comparison | revisions
DebugClients/Python/DebugProtocol.py file | annotate | diff | comparison | revisions
DebugClients/Python3/DCTestResult.py file | annotate | diff | comparison | revisions
DebugClients/Python3/DebugProtocol.py file | annotate | diff | comparison | revisions
Debugger/DebugProtocol.py file | annotate | diff | comparison | revisions
Debugger/DebugServer.py file | annotate | diff | comparison | revisions
Debugger/DebuggerInterfacePython.py file | annotate | diff | comparison | revisions
Debugger/DebuggerInterfacePython3.py file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric5.DebugClients.Python.DCTestResult.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.DebugClients.Python.DebugProtocol.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.DebugClients.Python3.DCTestResult.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.DebugClients.Python3.DebugProtocol.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Debugger.DebugProtocol.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Debugger.DebugServer.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.PyUnit.UnittestDialog.html file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Utilities.__init__.html file | annotate | diff | comparison | revisions
PyUnit/UnittestDialog.py file | annotate | diff | comparison | revisions
PyUnit/UnittestDialog.ui file | annotate | diff | comparison | revisions
Utilities/__init__.py file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
i18n/eric5_cs.ts file | annotate | diff | comparison | revisions
i18n/eric5_de.qm file | annotate | diff | comparison | revisions
i18n/eric5_de.ts file | annotate | diff | comparison | revisions
i18n/eric5_en.ts file | annotate | diff | comparison | revisions
i18n/eric5_es.ts file | annotate | diff | comparison | revisions
i18n/eric5_fr.ts file | annotate | diff | comparison | revisions
i18n/eric5_it.ts file | annotate | diff | comparison | revisions
i18n/eric5_ru.ts file | annotate | diff | comparison | revisions
i18n/eric5_tr.ts file | annotate | diff | comparison | revisions
i18n/eric5_zh_CN.GB2312.ts file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric5.api	Sat Jul 02 18:19:03 2011 +0200
+++ b/APIs/Python3/eric5.api	Sun Jul 03 18:01:53 2011 +0200
@@ -139,7 +139,10 @@
 eric5.DebugClients.Python.AsyncIO.AsyncIO.writeReady?4(fd)
 eric5.DebugClients.Python.AsyncIO.AsyncIO?1()
 eric5.DebugClients.Python.DCTestResult.DCTestResult.addError?4(test, err)
+eric5.DebugClients.Python.DCTestResult.DCTestResult.addExpectedFailure?4(test, err)
 eric5.DebugClients.Python.DCTestResult.DCTestResult.addFailure?4(test, err)
+eric5.DebugClients.Python.DCTestResult.DCTestResult.addSkip?4(test, reason)
+eric5.DebugClients.Python.DCTestResult.DCTestResult.addUnexpectedSuccess?4(test)
 eric5.DebugClients.Python.DCTestResult.DCTestResult.startTest?4(test)
 eric5.DebugClients.Python.DCTestResult.DCTestResult.stopTest?4(test)
 eric5.DebugClients.Python.DCTestResult.DCTestResult?1(parent)
@@ -284,6 +287,9 @@
 eric5.DebugClients.Python.DebugProtocol.ResponseUTStopTest?7
 eric5.DebugClients.Python.DebugProtocol.ResponseUTTestErrored?7
 eric5.DebugClients.Python.DebugProtocol.ResponseUTTestFailed?7
+eric5.DebugClients.Python.DebugProtocol.ResponseUTTestFailedExpected?7
+eric5.DebugClients.Python.DebugProtocol.ResponseUTTestSkipped?7
+eric5.DebugClients.Python.DebugProtocol.ResponseUTTestSucceededUnexpected?7
 eric5.DebugClients.Python.DebugProtocol.ResponseVariable?7
 eric5.DebugClients.Python.DebugProtocol.ResponseVariables?7
 eric5.DebugClients.Python.DebugProtocol.ResponseWPConditionError?7
@@ -344,7 +350,10 @@
 eric5.DebugClients.Python3.AsyncIO.AsyncIO.writeReady?4(fd)
 eric5.DebugClients.Python3.AsyncIO.AsyncIO?1()
 eric5.DebugClients.Python3.DCTestResult.DCTestResult.addError?4(test, err)
+eric5.DebugClients.Python3.DCTestResult.DCTestResult.addExpectedFailure?4(test, err)
 eric5.DebugClients.Python3.DCTestResult.DCTestResult.addFailure?4(test, err)
+eric5.DebugClients.Python3.DCTestResult.DCTestResult.addSkip?4(test, reason)
+eric5.DebugClients.Python3.DCTestResult.DCTestResult.addUnexpectedSuccess?4(test)
 eric5.DebugClients.Python3.DCTestResult.DCTestResult.startTest?4(test)
 eric5.DebugClients.Python3.DCTestResult.DCTestResult.stopTest?4(test)
 eric5.DebugClients.Python3.DCTestResult.DCTestResult?1(parent)
@@ -487,6 +496,9 @@
 eric5.DebugClients.Python3.DebugProtocol.ResponseUTStopTest?7
 eric5.DebugClients.Python3.DebugProtocol.ResponseUTTestErrored?7
 eric5.DebugClients.Python3.DebugProtocol.ResponseUTTestFailed?7
+eric5.DebugClients.Python3.DebugProtocol.ResponseUTTestFailedExpected?7
+eric5.DebugClients.Python3.DebugProtocol.ResponseUTTestSkipped?7
+eric5.DebugClients.Python3.DebugProtocol.ResponseUTTestSucceededUnexpected?7
 eric5.DebugClients.Python3.DebugProtocol.ResponseVariable?7
 eric5.DebugClients.Python3.DebugProtocol.ResponseVariables?7
 eric5.DebugClients.Python3.DebugProtocol.ResponseWPConditionError?7
@@ -612,6 +624,9 @@
 eric5.Debugger.DebugProtocol.ResponseUTStopTest?7
 eric5.Debugger.DebugProtocol.ResponseUTTestErrored?7
 eric5.Debugger.DebugProtocol.ResponseUTTestFailed?7
+eric5.Debugger.DebugProtocol.ResponseUTTestFailedExpected?7
+eric5.Debugger.DebugProtocol.ResponseUTTestSkipped?7
+eric5.Debugger.DebugProtocol.ResponseUTTestSucceededUnexpected?7
 eric5.Debugger.DebugProtocol.ResponseVariable?7
 eric5.Debugger.DebugProtocol.ResponseVariables?7
 eric5.Debugger.DebugProtocol.ResponseWPConditionError?7
@@ -641,6 +656,9 @@
 eric5.Debugger.DebugServer.DebugServer.clientUtStopTest?4()
 eric5.Debugger.DebugServer.DebugServer.clientUtTestErrored?4(testname, traceback)
 eric5.Debugger.DebugServer.DebugServer.clientUtTestFailed?4(testname, traceback)
+eric5.Debugger.DebugServer.DebugServer.clientUtTestFailedExpected?4(testname, traceback)
+eric5.Debugger.DebugServer.DebugServer.clientUtTestSkipped?4(testname, reason)
+eric5.Debugger.DebugServer.DebugServer.clientUtTestSucceededUnexpected?4(testname)
 eric5.Debugger.DebugServer.DebugServer.clientVariable?7
 eric5.Debugger.DebugServer.DebugServer.clientVariables?7
 eric5.Debugger.DebugServer.DebugServer.clientWatchConditionError?7
@@ -677,7 +695,7 @@
 eric5.Debugger.DebugServer.DebugServer.remoteStepOver?4()
 eric5.Debugger.DebugServer.DebugServer.remoteStepQuit?4()
 eric5.Debugger.DebugServer.DebugServer.remoteThreadList?4()
-eric5.Debugger.DebugServer.DebugServer.remoteUTPrepare?4(fn, tn, tfn, cov, covname, coverase)
+eric5.Debugger.DebugServer.DebugServer.remoteUTPrepare?4(fn, tn, tfn, cov, covname, coverase, clientType="")
 eric5.Debugger.DebugServer.DebugServer.remoteUTRun?4()
 eric5.Debugger.DebugServer.DebugServer.remoteUTStop?4()
 eric5.Debugger.DebugServer.DebugServer.shutdownServer?4()
@@ -707,6 +725,9 @@
 eric5.Debugger.DebugServer.DebugServer.utStopTest?7
 eric5.Debugger.DebugServer.DebugServer.utTestErrored?7
 eric5.Debugger.DebugServer.DebugServer.utTestFailed?7
+eric5.Debugger.DebugServer.DebugServer.utTestFailedExpected?7
+eric5.Debugger.DebugServer.DebugServer.utTestSkipped?7
+eric5.Debugger.DebugServer.DebugServer.utTestSucceededUnexpected?7
 eric5.Debugger.DebugServer.DebugServer?1()
 eric5.Debugger.DebugServer.DebuggerInterfaces?7
 eric5.Debugger.DebugUI.DebugUI.appendStdout?7
@@ -5303,7 +5324,10 @@
 eric5.Project.UserPropertiesDialog.UserPropertiesDialog.storeData?4()
 eric5.Project.UserPropertiesDialog.UserPropertiesDialog?1(project, parent=None, name=None)
 eric5.PyUnit.UnittestDialog.QtTestResult.addError?4(test, err)
+eric5.PyUnit.UnittestDialog.QtTestResult.addExpectedFailure?4(test, err)
 eric5.PyUnit.UnittestDialog.QtTestResult.addFailure?4(test, err)
+eric5.PyUnit.UnittestDialog.QtTestResult.addSkip?4(test, reason)
+eric5.PyUnit.UnittestDialog.QtTestResult.addUnexpectedSuccess?4(test)
 eric5.PyUnit.UnittestDialog.QtTestResult.startTest?4(test)
 eric5.PyUnit.UnittestDialog.QtTestResult.stopTest?4(test)
 eric5.PyUnit.UnittestDialog.QtTestResult?1(parent)
@@ -5318,8 +5342,11 @@
 eric5.PyUnit.UnittestDialog.UnittestDialog.on_testsuiteComboBox_editTextChanged?4(txt)
 eric5.PyUnit.UnittestDialog.UnittestDialog.testErrored?4(test, exc)
 eric5.PyUnit.UnittestDialog.UnittestDialog.testFailed?4(test, exc)
+eric5.PyUnit.UnittestDialog.UnittestDialog.testFailedExpected?4(test, exc)
 eric5.PyUnit.UnittestDialog.UnittestDialog.testFinished?4()
+eric5.PyUnit.UnittestDialog.UnittestDialog.testSkipped?4(test, reason)
 eric5.PyUnit.UnittestDialog.UnittestDialog.testStarted?4(test, doc)
+eric5.PyUnit.UnittestDialog.UnittestDialog.testSucceededUnexpected?4(test)
 eric5.PyUnit.UnittestDialog.UnittestDialog.unittestFile?7
 eric5.PyUnit.UnittestDialog.UnittestDialog?1(prog=None, dbs=None, ui=None, parent=None, name=None)
 eric5.PyUnit.UnittestDialog.UnittestWindow.eventFilter?4(obj, event)
@@ -6688,6 +6715,7 @@
 eric5.Utilities.escape_entities?4(m, map=_escape_map)
 eric5.Utilities.escape_uentities?4(m)
 eric5.Utilities.extractFlags?4(text)
+eric5.Utilities.extractFlagsFromFile?4(filename)
 eric5.Utilities.fromNativeSeparators?4(path)
 eric5.Utilities.generateDistroInfo?4(linesep='\n')
 eric5.Utilities.generatePluginsVersionInfo?4(linesep='\n')
--- a/DebugClients/Python/DCTestResult.py	Sat Jul 02 18:19:03 2011 +0200
+++ b/DebugClients/Python/DCTestResult.py	Sun Jul 03 18:01:53 2011 +0200
@@ -8,12 +8,12 @@
 """
 
 import select
-import traceback
 from unittest import TestResult
 
 
 from DebugProtocol import ResponseUTTestFailed, ResponseUTTestErrored, \
-    ResponseUTStartTest, ResponseUTStopTest
+    ResponseUTStartTest, ResponseUTStopTest, ResponseUTTestSkipped, \
+    ResponseUTTestFailedExpected, ResponseUTTestSucceededUnexpected
 
 
 class DCTestResult(TestResult):
@@ -39,7 +39,7 @@
         @param err The error traceback
         """
         TestResult.addFailure(self, test, err)
-        tracebackLines = traceback.format_exception(*(err + (10,)))
+        tracebackLines = self._exc_info_to_string(err, test)
         self.parent.write('%s%s\n' % (ResponseUTTestFailed,
             unicode((unicode(test), tracebackLines))))
         
@@ -51,10 +51,42 @@
         @param err The error traceback
         """
         TestResult.addError(self, test, err)
-        tracebackLines = traceback.format_exception(*(err + (10,)))
+        tracebackLines = self._exc_info_to_string(err, test)
         self.parent.write('%s%s\n' % (ResponseUTTestErrored,
             unicode((unicode(test), tracebackLines))))
         
+    def addSkip(self, test, reason):
+        """
+        Method called if a test was skipped.
+        
+        @param test reference to the test object
+        @param reason reason for skipping the test (string)
+        """
+        TestResult.addSkip(self, test, reason)
+        self.parent.write('%s%s\n' % (ResponseUTTestSkipped,
+            str((str(test), reason))))
+        
+    def addExpectedFailure(self, test, err):
+        """
+        Method called if a test failed expected.
+        
+        @param test reference to the test object
+        @param err error traceback
+        """
+        TestResult.addExpectedFailure(self, test, err)
+        tracebackLines = self._exc_info_to_string(err, test)
+        self.parent.write('%s%s\n' % (ResponseUTTestFailedExpected,
+            str((str(test), tracebackLines))))
+        
+    def addUnexpectedSuccess(self, test):
+        """
+        Method called if a test succeeded expectedly.
+        
+        @param test reference to the test object
+        """
+        TestResult.addUnexpectedSuccess(self, test)
+        self.parent.write('%s%s\n' % (ResponseUTTestSucceededUnexpected, str(test)))
+        
     def startTest(self, test):
         """
         Method called at the start of a test.
--- a/DebugClients/Python/DebugProtocol.py	Sat Jul 02 18:19:03 2011 +0200
+++ b/DebugClients/Python/DebugProtocol.py	Sun Jul 03 18:01:53 2011 +0200
@@ -69,6 +69,9 @@
 ResponseUTStopTest = '>UTStopTest<'
 ResponseUTTestFailed = '>UTTestFailed<'
 ResponseUTTestErrored = '>UTTestErrored<'
+ResponseUTTestSkipped = '>UTTestSkipped<'
+ResponseUTTestFailedExpected = '>UTTestFailedExpected<'
+ResponseUTTestSucceededUnexpected = '>UTTestSucceededUnexpected<'
 ResponseUTFinished = '>UTFinished<'
 ResponseForkTo = RequestForkTo
 
--- a/DebugClients/Python3/DCTestResult.py	Sat Jul 02 18:19:03 2011 +0200
+++ b/DebugClients/Python3/DCTestResult.py	Sun Jul 03 18:01:53 2011 +0200
@@ -8,12 +8,12 @@
 """
 
 import select
-import traceback
 from unittest import TestResult
 
 
 from DebugProtocol import ResponseUTTestFailed, ResponseUTTestErrored, \
-    ResponseUTStartTest, ResponseUTStopTest
+    ResponseUTStartTest, ResponseUTStopTest, ResponseUTTestSkipped, \
+    ResponseUTTestFailedExpected, ResponseUTTestSucceededUnexpected
 
 
 class DCTestResult(TestResult):
@@ -39,7 +39,7 @@
         @param err The error traceback
         """
         TestResult.addFailure(self, test, err)
-        tracebackLines = traceback.format_exception(*(err + (10,)))
+        tracebackLines = self._exc_info_to_string(err, test)
         self.parent.write('{0}{1}\n'.format(ResponseUTTestFailed,
             str((str(test), tracebackLines))))
         
@@ -51,10 +51,42 @@
         @param err The error traceback
         """
         TestResult.addError(self, test, err)
-        tracebackLines = traceback.format_exception(*(err + (10,)))
+        tracebackLines = self._exc_info_to_string(err, test)
         self.parent.write('{0}{1}\n'.format(ResponseUTTestErrored,
             str((str(test), tracebackLines))))
         
+    def addSkip(self, test, reason):
+        """
+        Method called if a test was skipped.
+        
+        @param test reference to the test object
+        @param reason reason for skipping the test (string)
+        """
+        TestResult.addSkip(self, test, reason)
+        self.parent.write('{0}{1}\n'.format(ResponseUTTestSkipped,
+            str((str(test), reason))))
+        
+    def addExpectedFailure(self, test, err):
+        """
+        Method called if a test failed expected.
+        
+        @param test reference to the test object
+        @param err error traceback
+        """
+        TestResult.addExpectedFailure(self, test, err)
+        tracebackLines = self._exc_info_to_string(err, test)
+        self.parent.write('{0}{1}\n'.format(ResponseUTTestFailedExpected,
+            str((str(test), tracebackLines))))
+        
+    def addUnexpectedSuccess(self, test):
+        """
+        Method called if a test succeeded expectedly.
+        
+        @param test reference to the test object
+        """
+        TestResult.addUnexpectedSuccess(self, test)
+        self.parent.write('{0}{1}\n'.format(ResponseUTTestSucceededUnexpected, str(test)))
+        
     def startTest(self, test):
         """
         Method called at the start of a test.
--- a/DebugClients/Python3/DebugProtocol.py	Sat Jul 02 18:19:03 2011 +0200
+++ b/DebugClients/Python3/DebugProtocol.py	Sun Jul 03 18:01:53 2011 +0200
@@ -69,6 +69,9 @@
 ResponseUTStopTest = '>UTStopTest<'
 ResponseUTTestFailed = '>UTTestFailed<'
 ResponseUTTestErrored = '>UTTestErrored<'
+ResponseUTTestSkipped = '>UTTestSkipped<'
+ResponseUTTestFailedExpected = '>UTTestFailedExpected<'
+ResponseUTTestSucceededUnexpected = '>UTTestSucceededUnexpected<'
 ResponseUTFinished = '>UTFinished<'
 ResponseForkTo = RequestForkTo
 
--- a/Debugger/DebugProtocol.py	Sat Jul 02 18:19:03 2011 +0200
+++ b/Debugger/DebugProtocol.py	Sun Jul 03 18:01:53 2011 +0200
@@ -66,6 +66,9 @@
 ResponseUTStopTest = '>UTStopTest<'
 ResponseUTTestFailed = '>UTTestFailed<'
 ResponseUTTestErrored = '>UTTestErrored<'
+ResponseUTTestSkipped = '>UTTestSkipped<'
+ResponseUTTestFailedExpected = '>UTTestFailedExpected<'
+ResponseUTTestSucceededUnexpected = '>UTTestSucceededUnexpected<'
 ResponseUTFinished = '>UTFinished<'
 ResponseForkTo = RequestForkTo
 
--- a/Debugger/DebugServer.py	Sat Jul 02 18:19:03 2011 +0200
+++ b/Debugger/DebugServer.py	Sun Jul 03 18:01:53 2011 +0200
@@ -89,6 +89,12 @@
             a failed test
     @signal utTestErrored(testname, exc_info) emitted after the client reported
             an errored test
+    @signal utTestSkipped(testname, reason) emitted after the client reported
+            a skipped test
+    @signal utTestFailedExpected(testname, exc_info) emitted after the client reported
+            an expected test failure
+    @signal utTestSucceededUnexpected(testname) emitted after the client reported
+            an unexpected test success
     """
     clientClearBreak = pyqtSignal(str, int)
     clientClearWatch = pyqtSignal(str)
@@ -116,8 +122,11 @@
     utPrepared = pyqtSignal(int, str, str)
     utStartTest = pyqtSignal(str, str)
     utStopTest = pyqtSignal()
-    utTestFailed = pyqtSignal(str, list)
-    utTestErrored = pyqtSignal(str, list)
+    utTestFailed = pyqtSignal(str, str)
+    utTestErrored = pyqtSignal(str, str)
+    utTestSkipped = pyqtSignal(str, str)
+    utTestFailedExpected = pyqtSignal(str, str)
+    utTestSucceededUnexpected = pyqtSignal(str)
     utFinished = pyqtSignal()
     passiveDebugStarted = pyqtSignal(str, bool)
     
@@ -981,7 +990,7 @@
         """
         self.debuggerInterface.remoteCompletion(text)
 
-    def remoteUTPrepare(self, fn, tn, tfn, cov, covname, coverase):
+    def remoteUTPrepare(self, fn, tn, tfn, cov, covname, coverase, clientType=""):
         """
         Public method to prepare a new unittest run.
         
@@ -992,10 +1001,14 @@
         @param covname filename to be used to assemble the coverage caches
                 filename (string)
         @param coverase flag indicating erasure of coverage data is requested (boolean)
+        @keyparam clientType client type to be used (string)
         """
         # Restart the client if there is already a program loaded.
         try:
-            self.__setClientType(self.__clientAssociations[os.path.splitext(fn)[1]])
+            if clientType:
+                self.__setClientType(clientType)
+            else:
+                self.__setClientType(self.__clientAssociations[os.path.splitext(fn)[1]])
         except KeyError:
             self.__setClientType('Python3')    # assume it is a Python3 file
         self.startClient(False)
@@ -1241,6 +1254,32 @@
         """
         self.utTestErrored.emit(testname, traceback)
         
+    def clientUtTestSkipped(self, testname, reason):
+        """
+        Public method to process the client test skipped info.
+        
+        @param testname name of the test (string)
+        @param reason reason for skipping the test (string)
+        """
+        self.utTestSkipped.emit(testname, reason)
+        
+    def clientUtTestFailedExpected(self, testname, traceback):
+        """
+        Public method to process the client test failed expected info.
+        
+        @param testname name of the test (string)
+        @param traceback lines of traceback info (list of strings)
+        """
+        self.utTestFailedExpected.emit(testname, traceback)
+        
+    def clientUtTestSucceededUnexpected(self, testname):
+        """
+        Public method to process the client test succeeded unexpected info.
+        
+        @param testname name of the test (string)
+        """
+        self.utTestSucceededUnexpected.emit(testname)
+        
     def clientUtFinished(self):
         """
         Public method to process the client unit test finished info.
--- a/Debugger/DebuggerInterfacePython.py	Sat Jul 02 18:19:03 2011 +0200
+++ b/Debugger/DebuggerInterfacePython.py	Sun Jul 03 18:01:53 2011 +0200
@@ -938,6 +938,21 @@
                     self.debugServer.clientUtTestErrored(testname, traceback)
                     continue
                 
+                if resp == DebugProtocol.ResponseUTTestSkipped:
+                    testname, reason = eval(line[eoc:-1])
+                    self.debugServer.clientUtTestSkipped(testname, reason)
+                    continue
+                
+                if resp == DebugProtocol.ResponseUTTestFailedExpected:
+                    testname, traceback = eval(line[eoc:-1])
+                    self.debugServer.clientUtTestFailedExpected(testname, traceback)
+                    continue
+                
+                if resp == DebugProtocol.ResponseUTTestSucceededUnexpected:
+                    testname = line[eoc:-1]
+                    self.debugServer.clientUtTestSucceededUnexpected(testname)
+                    continue
+                
                 if resp == DebugProtocol.ResponseUTFinished:
                     self.debugServer.clientUtFinished()
                     continue
--- a/Debugger/DebuggerInterfacePython3.py	Sat Jul 02 18:19:03 2011 +0200
+++ b/Debugger/DebuggerInterfacePython3.py	Sun Jul 03 18:01:53 2011 +0200
@@ -937,6 +937,21 @@
                     self.debugServer.clientUtTestErrored(testname, traceback)
                     continue
                 
+                if resp == DebugProtocol.ResponseUTTestSkipped:
+                    testname, reason = eval(line[eoc:-1])
+                    self.debugServer.clientUtTestSkipped(testname, reason)
+                    continue
+                
+                if resp == DebugProtocol.ResponseUTTestFailedExpected:
+                    testname, traceback = eval(line[eoc:-1])
+                    self.debugServer.clientUtTestFailedExpected(testname, traceback)
+                    continue
+                
+                if resp == DebugProtocol.ResponseUTTestSucceededUnexpected:
+                    testname = line[eoc:-1]
+                    self.debugServer.clientUtTestSucceededUnexpected(testname)
+                    continue
+                
                 if resp == DebugProtocol.ResponseUTFinished:
                     self.debugServer.clientUtFinished()
                     continue
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Sat Jul 02 18:19:03 2011 +0200
+++ b/Documentation/Help/source.qhp	Sun Jul 03 18:01:53 2011 +0200
@@ -1256,7 +1256,10 @@
       <keyword name="UnittestWindow" id="UnittestWindow" ref="eric5.PyUnit.UnittestDialog.html#UnittestWindow" />
       <keyword name="QtTestResult (Constructor)" id="QtTestResult (Constructor)" ref="eric5.PyUnit.UnittestDialog.html#QtTestResult.__init__" />
       <keyword name="QtTestResult.addError" id="QtTestResult.addError" ref="eric5.PyUnit.UnittestDialog.html#QtTestResult.addError" />
+      <keyword name="QtTestResult.addExpectedFailure" id="QtTestResult.addExpectedFailure" ref="eric5.PyUnit.UnittestDialog.html#QtTestResult.addExpectedFailure" />
       <keyword name="QtTestResult.addFailure" id="QtTestResult.addFailure" ref="eric5.PyUnit.UnittestDialog.html#QtTestResult.addFailure" />
+      <keyword name="QtTestResult.addSkip" id="QtTestResult.addSkip" ref="eric5.PyUnit.UnittestDialog.html#QtTestResult.addSkip" />
+      <keyword name="QtTestResult.addUnexpectedSuccess" id="QtTestResult.addUnexpectedSuccess" ref="eric5.PyUnit.UnittestDialog.html#QtTestResult.addUnexpectedSuccess" />
       <keyword name="QtTestResult.startTest" id="QtTestResult.startTest" ref="eric5.PyUnit.UnittestDialog.html#QtTestResult.startTest" />
       <keyword name="QtTestResult.stopTest" id="QtTestResult.stopTest" ref="eric5.PyUnit.UnittestDialog.html#QtTestResult.stopTest" />
       <keyword name="UnittestDialog (Constructor)" id="UnittestDialog (Constructor)" ref="eric5.PyUnit.UnittestDialog.html#UnittestDialog.__init__" />
@@ -1276,8 +1279,11 @@
       <keyword name="UnittestDialog.on_testsuiteComboBox_editTextChanged" id="UnittestDialog.on_testsuiteComboBox_editTextChanged" ref="eric5.PyUnit.UnittestDialog.html#UnittestDialog.on_testsuiteComboBox_editTextChanged" />
       <keyword name="UnittestDialog.testErrored" id="UnittestDialog.testErrored" ref="eric5.PyUnit.UnittestDialog.html#UnittestDialog.testErrored" />
       <keyword name="UnittestDialog.testFailed" id="UnittestDialog.testFailed" ref="eric5.PyUnit.UnittestDialog.html#UnittestDialog.testFailed" />
+      <keyword name="UnittestDialog.testFailedExpected" id="UnittestDialog.testFailedExpected" ref="eric5.PyUnit.UnittestDialog.html#UnittestDialog.testFailedExpected" />
       <keyword name="UnittestDialog.testFinished" id="UnittestDialog.testFinished" ref="eric5.PyUnit.UnittestDialog.html#UnittestDialog.testFinished" />
+      <keyword name="UnittestDialog.testSkipped" id="UnittestDialog.testSkipped" ref="eric5.PyUnit.UnittestDialog.html#UnittestDialog.testSkipped" />
       <keyword name="UnittestDialog.testStarted" id="UnittestDialog.testStarted" ref="eric5.PyUnit.UnittestDialog.html#UnittestDialog.testStarted" />
+      <keyword name="UnittestDialog.testSucceededUnexpected" id="UnittestDialog.testSucceededUnexpected" ref="eric5.PyUnit.UnittestDialog.html#UnittestDialog.testSucceededUnexpected" />
       <keyword name="UnittestWindow (Constructor)" id="UnittestWindow (Constructor)" ref="eric5.PyUnit.UnittestDialog.html#UnittestWindow.__init__" />
       <keyword name="UnittestWindow.eventFilter" id="UnittestWindow.eventFilter" ref="eric5.PyUnit.UnittestDialog.html#UnittestWindow.eventFilter" />
       <keyword name="DataViews (Package)" id="DataViews (Package)" ref="index-eric5.DataViews.html" />
@@ -2078,6 +2084,9 @@
       <keyword name="DebugServer.clientUtStopTest" id="DebugServer.clientUtStopTest" ref="eric5.Debugger.DebugServer.html#DebugServer.clientUtStopTest" />
       <keyword name="DebugServer.clientUtTestErrored" id="DebugServer.clientUtTestErrored" ref="eric5.Debugger.DebugServer.html#DebugServer.clientUtTestErrored" />
       <keyword name="DebugServer.clientUtTestFailed" id="DebugServer.clientUtTestFailed" ref="eric5.Debugger.DebugServer.html#DebugServer.clientUtTestFailed" />
+      <keyword name="DebugServer.clientUtTestFailedExpected" id="DebugServer.clientUtTestFailedExpected" ref="eric5.Debugger.DebugServer.html#DebugServer.clientUtTestFailedExpected" />
+      <keyword name="DebugServer.clientUtTestSkipped" id="DebugServer.clientUtTestSkipped" ref="eric5.Debugger.DebugServer.html#DebugServer.clientUtTestSkipped" />
+      <keyword name="DebugServer.clientUtTestSucceededUnexpected" id="DebugServer.clientUtTestSucceededUnexpected" ref="eric5.Debugger.DebugServer.html#DebugServer.clientUtTestSucceededUnexpected" />
       <keyword name="DebugServer.getBreakPointModel" id="DebugServer.getBreakPointModel" ref="eric5.Debugger.DebugServer.html#DebugServer.getBreakPointModel" />
       <keyword name="DebugServer.getClientCapabilities" id="DebugServer.getClientCapabilities" ref="eric5.Debugger.DebugServer.html#DebugServer.getClientCapabilities" />
       <keyword name="DebugServer.getExtensions" id="DebugServer.getExtensions" ref="eric5.Debugger.DebugServer.html#DebugServer.getExtensions" />
@@ -2428,6 +2437,7 @@
       <keyword name="escape_entities" id="escape_entities" ref="eric5.Utilities.__init__.html#escape_entities" />
       <keyword name="escape_uentities" id="escape_uentities" ref="eric5.Utilities.__init__.html#escape_uentities" />
       <keyword name="extractFlags" id="extractFlags" ref="eric5.Utilities.__init__.html#extractFlags" />
+      <keyword name="extractFlagsFromFile" id="extractFlagsFromFile" ref="eric5.Utilities.__init__.html#extractFlagsFromFile" />
       <keyword name="fromNativeSeparators" id="fromNativeSeparators" ref="eric5.Utilities.__init__.html#fromNativeSeparators" />
       <keyword name="generateDistroInfo" id="generateDistroInfo" ref="eric5.Utilities.__init__.html#generateDistroInfo" />
       <keyword name="generatePluginsVersionInfo" id="generatePluginsVersionInfo" ref="eric5.Utilities.__init__.html#generatePluginsVersionInfo" />
@@ -6576,7 +6586,10 @@
       <keyword name="DCTestResult" id="DCTestResult" ref="eric5.DebugClients.Python.DCTestResult.html#DCTestResult" />
       <keyword name="DCTestResult (Constructor)" id="DCTestResult (Constructor)" ref="eric5.DebugClients.Python.DCTestResult.html#DCTestResult.__init__" />
       <keyword name="DCTestResult.addError" id="DCTestResult.addError" ref="eric5.DebugClients.Python.DCTestResult.html#DCTestResult.addError" />
+      <keyword name="DCTestResult.addExpectedFailure" id="DCTestResult.addExpectedFailure" ref="eric5.DebugClients.Python.DCTestResult.html#DCTestResult.addExpectedFailure" />
       <keyword name="DCTestResult.addFailure" id="DCTestResult.addFailure" ref="eric5.DebugClients.Python.DCTestResult.html#DCTestResult.addFailure" />
+      <keyword name="DCTestResult.addSkip" id="DCTestResult.addSkip" ref="eric5.DebugClients.Python.DCTestResult.html#DCTestResult.addSkip" />
+      <keyword name="DCTestResult.addUnexpectedSuccess" id="DCTestResult.addUnexpectedSuccess" ref="eric5.DebugClients.Python.DCTestResult.html#DCTestResult.addUnexpectedSuccess" />
       <keyword name="DCTestResult.startTest" id="DCTestResult.startTest" ref="eric5.DebugClients.Python.DCTestResult.html#DCTestResult.startTest" />
       <keyword name="DCTestResult.stopTest" id="DCTestResult.stopTest" ref="eric5.DebugClients.Python.DCTestResult.html#DCTestResult.stopTest" />
       <keyword name="AsyncFile (Module)" id="AsyncFile (Module)" ref="eric5.DebugClients.Python.AsyncFile.html" />
@@ -6744,7 +6757,10 @@
       <keyword name="DCTestResult" id="DCTestResult" ref="eric5.DebugClients.Python3.DCTestResult.html#DCTestResult" />
       <keyword name="DCTestResult (Constructor)" id="DCTestResult (Constructor)" ref="eric5.DebugClients.Python3.DCTestResult.html#DCTestResult.__init__" />
       <keyword name="DCTestResult.addError" id="DCTestResult.addError" ref="eric5.DebugClients.Python3.DCTestResult.html#DCTestResult.addError" />
+      <keyword name="DCTestResult.addExpectedFailure" id="DCTestResult.addExpectedFailure" ref="eric5.DebugClients.Python3.DCTestResult.html#DCTestResult.addExpectedFailure" />
       <keyword name="DCTestResult.addFailure" id="DCTestResult.addFailure" ref="eric5.DebugClients.Python3.DCTestResult.html#DCTestResult.addFailure" />
+      <keyword name="DCTestResult.addSkip" id="DCTestResult.addSkip" ref="eric5.DebugClients.Python3.DCTestResult.html#DCTestResult.addSkip" />
+      <keyword name="DCTestResult.addUnexpectedSuccess" id="DCTestResult.addUnexpectedSuccess" ref="eric5.DebugClients.Python3.DCTestResult.html#DCTestResult.addUnexpectedSuccess" />
       <keyword name="DCTestResult.startTest" id="DCTestResult.startTest" ref="eric5.DebugClients.Python3.DCTestResult.html#DCTestResult.startTest" />
       <keyword name="DCTestResult.stopTest" id="DCTestResult.stopTest" ref="eric5.DebugClients.Python3.DCTestResult.html#DCTestResult.stopTest" />
       <keyword name="AsyncFile (Module)" id="AsyncFile (Module)" ref="eric5.DebugClients.Python3.AsyncFile.html" />
--- a/Documentation/Source/eric5.DebugClients.Python.DCTestResult.html	Sat Jul 02 18:19:03 2011 +0200
+++ b/Documentation/Source/eric5.DebugClients.Python.DCTestResult.html	Sun Jul 03 18:01:53 2011 +0200
@@ -62,9 +62,18 @@
 <td><a href="#DCTestResult.addError">addError</a></td>
 <td>Method called if a test errored.</td>
 </tr><tr>
+<td><a href="#DCTestResult.addExpectedFailure">addExpectedFailure</a></td>
+<td>Method called if a test failed expected.</td>
+</tr><tr>
 <td><a href="#DCTestResult.addFailure">addFailure</a></td>
 <td>Method called if a test failed.</td>
 </tr><tr>
+<td><a href="#DCTestResult.addSkip">addSkip</a></td>
+<td>Method called if a test was skipped.</td>
+</tr><tr>
+<td><a href="#DCTestResult.addUnexpectedSuccess">addUnexpectedSuccess</a></td>
+<td>Method called if a test succeeded expectedly.</td>
+</tr><tr>
 <td><a href="#DCTestResult.startTest">startTest</a></td>
 <td>Method called at the start of a test.</td>
 </tr><tr>
@@ -95,6 +104,19 @@
 <dd>
 The error traceback
 </dd>
+</dl><a NAME="DCTestResult.addExpectedFailure" ID="DCTestResult.addExpectedFailure"></a>
+<h4>DCTestResult.addExpectedFailure</h4>
+<b>addExpectedFailure</b>(<i>test, err</i>)
+<p>
+        Method called if a test failed expected.
+</p><dl>
+<dt><i>test</i></dt>
+<dd>
+reference to the test object
+</dd><dt><i>err</i></dt>
+<dd>
+error traceback
+</dd>
 </dl><a NAME="DCTestResult.addFailure" ID="DCTestResult.addFailure"></a>
 <h4>DCTestResult.addFailure</h4>
 <b>addFailure</b>(<i>test, err</i>)
@@ -108,6 +130,29 @@
 <dd>
 The error traceback
 </dd>
+</dl><a NAME="DCTestResult.addSkip" ID="DCTestResult.addSkip"></a>
+<h4>DCTestResult.addSkip</h4>
+<b>addSkip</b>(<i>test, reason</i>)
+<p>
+        Method called if a test was skipped.
+</p><dl>
+<dt><i>test</i></dt>
+<dd>
+reference to the test object
+</dd><dt><i>reason</i></dt>
+<dd>
+reason for skipping the test (string)
+</dd>
+</dl><a NAME="DCTestResult.addUnexpectedSuccess" ID="DCTestResult.addUnexpectedSuccess"></a>
+<h4>DCTestResult.addUnexpectedSuccess</h4>
+<b>addUnexpectedSuccess</b>(<i>test</i>)
+<p>
+        Method called if a test succeeded expectedly.
+</p><dl>
+<dt><i>test</i></dt>
+<dd>
+reference to the test object
+</dd>
 </dl><a NAME="DCTestResult.startTest" ID="DCTestResult.startTest"></a>
 <h4>DCTestResult.startTest</h4>
 <b>startTest</b>(<i>test</i>)
--- a/Documentation/Source/eric5.DebugClients.Python.DebugProtocol.html	Sat Jul 02 18:19:03 2011 +0200
+++ b/Documentation/Source/eric5.DebugClients.Python.DebugProtocol.html	Sun Jul 03 18:01:53 2011 +0200
@@ -26,7 +26,7 @@
 </p>
 <h3>Global Attributes</h3>
 <table>
-<tr><td>DebugAddress</td></tr><tr><td>EOT</td></tr><tr><td>PassiveStartup</td></tr><tr><td>RequestBanner</td></tr><tr><td>RequestBreak</td></tr><tr><td>RequestBreakEnable</td></tr><tr><td>RequestBreakIgnore</td></tr><tr><td>RequestCapabilities</td></tr><tr><td>RequestCompletion</td></tr><tr><td>RequestContinue</td></tr><tr><td>RequestCoverage</td></tr><tr><td>RequestEnv</td></tr><tr><td>RequestEval</td></tr><tr><td>RequestExec</td></tr><tr><td>RequestForkMode</td></tr><tr><td>RequestForkTo</td></tr><tr><td>RequestLoad</td></tr><tr><td>RequestOK</td></tr><tr><td>RequestProfile</td></tr><tr><td>RequestRun</td></tr><tr><td>RequestSetFilter</td></tr><tr><td>RequestShutdown</td></tr><tr><td>RequestStep</td></tr><tr><td>RequestStepOut</td></tr><tr><td>RequestStepOver</td></tr><tr><td>RequestStepQuit</td></tr><tr><td>RequestThreadList</td></tr><tr><td>RequestThreadSet</td></tr><tr><td>RequestUTPrepare</td></tr><tr><td>RequestUTRun</td></tr><tr><td>RequestUTStop</td></tr><tr><td>RequestVariable</td></tr><tr><td>RequestVariables</td></tr><tr><td>RequestWatch</td></tr><tr><td>RequestWatchEnable</td></tr><tr><td>RequestWatchIgnore</td></tr><tr><td>ResponseBPConditionError</td></tr><tr><td>ResponseBanner</td></tr><tr><td>ResponseCapabilities</td></tr><tr><td>ResponseClearBreak</td></tr><tr><td>ResponseClearWatch</td></tr><tr><td>ResponseCompletion</td></tr><tr><td>ResponseContinue</td></tr><tr><td>ResponseException</td></tr><tr><td>ResponseExit</td></tr><tr><td>ResponseForkTo</td></tr><tr><td>ResponseLine</td></tr><tr><td>ResponseOK</td></tr><tr><td>ResponseRaw</td></tr><tr><td>ResponseStack</td></tr><tr><td>ResponseSyntax</td></tr><tr><td>ResponseThreadList</td></tr><tr><td>ResponseThreadSet</td></tr><tr><td>ResponseUTFinished</td></tr><tr><td>ResponseUTPrepared</td></tr><tr><td>ResponseUTStartTest</td></tr><tr><td>ResponseUTStopTest</td></tr><tr><td>ResponseUTTestErrored</td></tr><tr><td>ResponseUTTestFailed</td></tr><tr><td>ResponseVariable</td></tr><tr><td>ResponseVariables</td></tr><tr><td>ResponseWPConditionError</td></tr>
+<tr><td>DebugAddress</td></tr><tr><td>EOT</td></tr><tr><td>PassiveStartup</td></tr><tr><td>RequestBanner</td></tr><tr><td>RequestBreak</td></tr><tr><td>RequestBreakEnable</td></tr><tr><td>RequestBreakIgnore</td></tr><tr><td>RequestCapabilities</td></tr><tr><td>RequestCompletion</td></tr><tr><td>RequestContinue</td></tr><tr><td>RequestCoverage</td></tr><tr><td>RequestEnv</td></tr><tr><td>RequestEval</td></tr><tr><td>RequestExec</td></tr><tr><td>RequestForkMode</td></tr><tr><td>RequestForkTo</td></tr><tr><td>RequestLoad</td></tr><tr><td>RequestOK</td></tr><tr><td>RequestProfile</td></tr><tr><td>RequestRun</td></tr><tr><td>RequestSetFilter</td></tr><tr><td>RequestShutdown</td></tr><tr><td>RequestStep</td></tr><tr><td>RequestStepOut</td></tr><tr><td>RequestStepOver</td></tr><tr><td>RequestStepQuit</td></tr><tr><td>RequestThreadList</td></tr><tr><td>RequestThreadSet</td></tr><tr><td>RequestUTPrepare</td></tr><tr><td>RequestUTRun</td></tr><tr><td>RequestUTStop</td></tr><tr><td>RequestVariable</td></tr><tr><td>RequestVariables</td></tr><tr><td>RequestWatch</td></tr><tr><td>RequestWatchEnable</td></tr><tr><td>RequestWatchIgnore</td></tr><tr><td>ResponseBPConditionError</td></tr><tr><td>ResponseBanner</td></tr><tr><td>ResponseCapabilities</td></tr><tr><td>ResponseClearBreak</td></tr><tr><td>ResponseClearWatch</td></tr><tr><td>ResponseCompletion</td></tr><tr><td>ResponseContinue</td></tr><tr><td>ResponseException</td></tr><tr><td>ResponseExit</td></tr><tr><td>ResponseForkTo</td></tr><tr><td>ResponseLine</td></tr><tr><td>ResponseOK</td></tr><tr><td>ResponseRaw</td></tr><tr><td>ResponseStack</td></tr><tr><td>ResponseSyntax</td></tr><tr><td>ResponseThreadList</td></tr><tr><td>ResponseThreadSet</td></tr><tr><td>ResponseUTFinished</td></tr><tr><td>ResponseUTPrepared</td></tr><tr><td>ResponseUTStartTest</td></tr><tr><td>ResponseUTStopTest</td></tr><tr><td>ResponseUTTestErrored</td></tr><tr><td>ResponseUTTestFailed</td></tr><tr><td>ResponseUTTestFailedExpected</td></tr><tr><td>ResponseUTTestSkipped</td></tr><tr><td>ResponseUTTestSucceededUnexpected</td></tr><tr><td>ResponseVariable</td></tr><tr><td>ResponseVariables</td></tr><tr><td>ResponseWPConditionError</td></tr>
 </table>
 <h3>Classes</h3>
 <table>
--- a/Documentation/Source/eric5.DebugClients.Python3.DCTestResult.html	Sat Jul 02 18:19:03 2011 +0200
+++ b/Documentation/Source/eric5.DebugClients.Python3.DCTestResult.html	Sun Jul 03 18:01:53 2011 +0200
@@ -62,9 +62,18 @@
 <td><a href="#DCTestResult.addError">addError</a></td>
 <td>Method called if a test errored.</td>
 </tr><tr>
+<td><a href="#DCTestResult.addExpectedFailure">addExpectedFailure</a></td>
+<td>Method called if a test failed expected.</td>
+</tr><tr>
 <td><a href="#DCTestResult.addFailure">addFailure</a></td>
 <td>Method called if a test failed.</td>
 </tr><tr>
+<td><a href="#DCTestResult.addSkip">addSkip</a></td>
+<td>Method called if a test was skipped.</td>
+</tr><tr>
+<td><a href="#DCTestResult.addUnexpectedSuccess">addUnexpectedSuccess</a></td>
+<td>Method called if a test succeeded expectedly.</td>
+</tr><tr>
 <td><a href="#DCTestResult.startTest">startTest</a></td>
 <td>Method called at the start of a test.</td>
 </tr><tr>
@@ -95,6 +104,19 @@
 <dd>
 The error traceback
 </dd>
+</dl><a NAME="DCTestResult.addExpectedFailure" ID="DCTestResult.addExpectedFailure"></a>
+<h4>DCTestResult.addExpectedFailure</h4>
+<b>addExpectedFailure</b>(<i>test, err</i>)
+<p>
+        Method called if a test failed expected.
+</p><dl>
+<dt><i>test</i></dt>
+<dd>
+reference to the test object
+</dd><dt><i>err</i></dt>
+<dd>
+error traceback
+</dd>
 </dl><a NAME="DCTestResult.addFailure" ID="DCTestResult.addFailure"></a>
 <h4>DCTestResult.addFailure</h4>
 <b>addFailure</b>(<i>test, err</i>)
@@ -108,6 +130,29 @@
 <dd>
 The error traceback
 </dd>
+</dl><a NAME="DCTestResult.addSkip" ID="DCTestResult.addSkip"></a>
+<h4>DCTestResult.addSkip</h4>
+<b>addSkip</b>(<i>test, reason</i>)
+<p>
+        Method called if a test was skipped.
+</p><dl>
+<dt><i>test</i></dt>
+<dd>
+reference to the test object
+</dd><dt><i>reason</i></dt>
+<dd>
+reason for skipping the test (string)
+</dd>
+</dl><a NAME="DCTestResult.addUnexpectedSuccess" ID="DCTestResult.addUnexpectedSuccess"></a>
+<h4>DCTestResult.addUnexpectedSuccess</h4>
+<b>addUnexpectedSuccess</b>(<i>test</i>)
+<p>
+        Method called if a test succeeded expectedly.
+</p><dl>
+<dt><i>test</i></dt>
+<dd>
+reference to the test object
+</dd>
 </dl><a NAME="DCTestResult.startTest" ID="DCTestResult.startTest"></a>
 <h4>DCTestResult.startTest</h4>
 <b>startTest</b>(<i>test</i>)
--- a/Documentation/Source/eric5.DebugClients.Python3.DebugProtocol.html	Sat Jul 02 18:19:03 2011 +0200
+++ b/Documentation/Source/eric5.DebugClients.Python3.DebugProtocol.html	Sun Jul 03 18:01:53 2011 +0200
@@ -26,7 +26,7 @@
 </p>
 <h3>Global Attributes</h3>
 <table>
-<tr><td>DebugAddress</td></tr><tr><td>EOT</td></tr><tr><td>PassiveStartup</td></tr><tr><td>RequestBanner</td></tr><tr><td>RequestBreak</td></tr><tr><td>RequestBreakEnable</td></tr><tr><td>RequestBreakIgnore</td></tr><tr><td>RequestCapabilities</td></tr><tr><td>RequestCompletion</td></tr><tr><td>RequestContinue</td></tr><tr><td>RequestCoverage</td></tr><tr><td>RequestEnv</td></tr><tr><td>RequestEval</td></tr><tr><td>RequestExec</td></tr><tr><td>RequestForkMode</td></tr><tr><td>RequestForkTo</td></tr><tr><td>RequestLoad</td></tr><tr><td>RequestOK</td></tr><tr><td>RequestProfile</td></tr><tr><td>RequestRun</td></tr><tr><td>RequestSetFilter</td></tr><tr><td>RequestShutdown</td></tr><tr><td>RequestStep</td></tr><tr><td>RequestStepOut</td></tr><tr><td>RequestStepOver</td></tr><tr><td>RequestStepQuit</td></tr><tr><td>RequestThreadList</td></tr><tr><td>RequestThreadSet</td></tr><tr><td>RequestUTPrepare</td></tr><tr><td>RequestUTRun</td></tr><tr><td>RequestUTStop</td></tr><tr><td>RequestVariable</td></tr><tr><td>RequestVariables</td></tr><tr><td>RequestWatch</td></tr><tr><td>RequestWatchEnable</td></tr><tr><td>RequestWatchIgnore</td></tr><tr><td>ResponseBPConditionError</td></tr><tr><td>ResponseBanner</td></tr><tr><td>ResponseCapabilities</td></tr><tr><td>ResponseClearBreak</td></tr><tr><td>ResponseClearWatch</td></tr><tr><td>ResponseCompletion</td></tr><tr><td>ResponseContinue</td></tr><tr><td>ResponseException</td></tr><tr><td>ResponseExit</td></tr><tr><td>ResponseForkTo</td></tr><tr><td>ResponseLine</td></tr><tr><td>ResponseOK</td></tr><tr><td>ResponseRaw</td></tr><tr><td>ResponseStack</td></tr><tr><td>ResponseSyntax</td></tr><tr><td>ResponseThreadList</td></tr><tr><td>ResponseThreadSet</td></tr><tr><td>ResponseUTFinished</td></tr><tr><td>ResponseUTPrepared</td></tr><tr><td>ResponseUTStartTest</td></tr><tr><td>ResponseUTStopTest</td></tr><tr><td>ResponseUTTestErrored</td></tr><tr><td>ResponseUTTestFailed</td></tr><tr><td>ResponseVariable</td></tr><tr><td>ResponseVariables</td></tr><tr><td>ResponseWPConditionError</td></tr>
+<tr><td>DebugAddress</td></tr><tr><td>EOT</td></tr><tr><td>PassiveStartup</td></tr><tr><td>RequestBanner</td></tr><tr><td>RequestBreak</td></tr><tr><td>RequestBreakEnable</td></tr><tr><td>RequestBreakIgnore</td></tr><tr><td>RequestCapabilities</td></tr><tr><td>RequestCompletion</td></tr><tr><td>RequestContinue</td></tr><tr><td>RequestCoverage</td></tr><tr><td>RequestEnv</td></tr><tr><td>RequestEval</td></tr><tr><td>RequestExec</td></tr><tr><td>RequestForkMode</td></tr><tr><td>RequestForkTo</td></tr><tr><td>RequestLoad</td></tr><tr><td>RequestOK</td></tr><tr><td>RequestProfile</td></tr><tr><td>RequestRun</td></tr><tr><td>RequestSetFilter</td></tr><tr><td>RequestShutdown</td></tr><tr><td>RequestStep</td></tr><tr><td>RequestStepOut</td></tr><tr><td>RequestStepOver</td></tr><tr><td>RequestStepQuit</td></tr><tr><td>RequestThreadList</td></tr><tr><td>RequestThreadSet</td></tr><tr><td>RequestUTPrepare</td></tr><tr><td>RequestUTRun</td></tr><tr><td>RequestUTStop</td></tr><tr><td>RequestVariable</td></tr><tr><td>RequestVariables</td></tr><tr><td>RequestWatch</td></tr><tr><td>RequestWatchEnable</td></tr><tr><td>RequestWatchIgnore</td></tr><tr><td>ResponseBPConditionError</td></tr><tr><td>ResponseBanner</td></tr><tr><td>ResponseCapabilities</td></tr><tr><td>ResponseClearBreak</td></tr><tr><td>ResponseClearWatch</td></tr><tr><td>ResponseCompletion</td></tr><tr><td>ResponseContinue</td></tr><tr><td>ResponseException</td></tr><tr><td>ResponseExit</td></tr><tr><td>ResponseForkTo</td></tr><tr><td>ResponseLine</td></tr><tr><td>ResponseOK</td></tr><tr><td>ResponseRaw</td></tr><tr><td>ResponseStack</td></tr><tr><td>ResponseSyntax</td></tr><tr><td>ResponseThreadList</td></tr><tr><td>ResponseThreadSet</td></tr><tr><td>ResponseUTFinished</td></tr><tr><td>ResponseUTPrepared</td></tr><tr><td>ResponseUTStartTest</td></tr><tr><td>ResponseUTStopTest</td></tr><tr><td>ResponseUTTestErrored</td></tr><tr><td>ResponseUTTestFailed</td></tr><tr><td>ResponseUTTestFailedExpected</td></tr><tr><td>ResponseUTTestSkipped</td></tr><tr><td>ResponseUTTestSucceededUnexpected</td></tr><tr><td>ResponseVariable</td></tr><tr><td>ResponseVariables</td></tr><tr><td>ResponseWPConditionError</td></tr>
 </table>
 <h3>Classes</h3>
 <table>
--- a/Documentation/Source/eric5.Debugger.DebugProtocol.html	Sat Jul 02 18:19:03 2011 +0200
+++ b/Documentation/Source/eric5.Debugger.DebugProtocol.html	Sun Jul 03 18:01:53 2011 +0200
@@ -26,7 +26,7 @@
 </p>
 <h3>Global Attributes</h3>
 <table>
-<tr><td>EOT</td></tr><tr><td>PassiveStartup</td></tr><tr><td>RequestBanner</td></tr><tr><td>RequestBreak</td></tr><tr><td>RequestBreakEnable</td></tr><tr><td>RequestBreakIgnore</td></tr><tr><td>RequestCapabilities</td></tr><tr><td>RequestCompletion</td></tr><tr><td>RequestContinue</td></tr><tr><td>RequestCoverage</td></tr><tr><td>RequestEnv</td></tr><tr><td>RequestEval</td></tr><tr><td>RequestExec</td></tr><tr><td>RequestForkMode</td></tr><tr><td>RequestForkTo</td></tr><tr><td>RequestLoad</td></tr><tr><td>RequestOK</td></tr><tr><td>RequestProfile</td></tr><tr><td>RequestRun</td></tr><tr><td>RequestSetFilter</td></tr><tr><td>RequestShutdown</td></tr><tr><td>RequestStep</td></tr><tr><td>RequestStepOut</td></tr><tr><td>RequestStepOver</td></tr><tr><td>RequestStepQuit</td></tr><tr><td>RequestThreadList</td></tr><tr><td>RequestThreadSet</td></tr><tr><td>RequestUTPrepare</td></tr><tr><td>RequestUTRun</td></tr><tr><td>RequestUTStop</td></tr><tr><td>RequestVariable</td></tr><tr><td>RequestVariables</td></tr><tr><td>RequestWatch</td></tr><tr><td>RequestWatchEnable</td></tr><tr><td>RequestWatchIgnore</td></tr><tr><td>ResponseBPConditionError</td></tr><tr><td>ResponseBanner</td></tr><tr><td>ResponseCapabilities</td></tr><tr><td>ResponseClearBreak</td></tr><tr><td>ResponseClearWatch</td></tr><tr><td>ResponseCompletion</td></tr><tr><td>ResponseContinue</td></tr><tr><td>ResponseException</td></tr><tr><td>ResponseExit</td></tr><tr><td>ResponseForkTo</td></tr><tr><td>ResponseLine</td></tr><tr><td>ResponseOK</td></tr><tr><td>ResponseRaw</td></tr><tr><td>ResponseStack</td></tr><tr><td>ResponseSyntax</td></tr><tr><td>ResponseThreadList</td></tr><tr><td>ResponseThreadSet</td></tr><tr><td>ResponseUTFinished</td></tr><tr><td>ResponseUTPrepared</td></tr><tr><td>ResponseUTStartTest</td></tr><tr><td>ResponseUTStopTest</td></tr><tr><td>ResponseUTTestErrored</td></tr><tr><td>ResponseUTTestFailed</td></tr><tr><td>ResponseVariable</td></tr><tr><td>ResponseVariables</td></tr><tr><td>ResponseWPConditionError</td></tr>
+<tr><td>EOT</td></tr><tr><td>PassiveStartup</td></tr><tr><td>RequestBanner</td></tr><tr><td>RequestBreak</td></tr><tr><td>RequestBreakEnable</td></tr><tr><td>RequestBreakIgnore</td></tr><tr><td>RequestCapabilities</td></tr><tr><td>RequestCompletion</td></tr><tr><td>RequestContinue</td></tr><tr><td>RequestCoverage</td></tr><tr><td>RequestEnv</td></tr><tr><td>RequestEval</td></tr><tr><td>RequestExec</td></tr><tr><td>RequestForkMode</td></tr><tr><td>RequestForkTo</td></tr><tr><td>RequestLoad</td></tr><tr><td>RequestOK</td></tr><tr><td>RequestProfile</td></tr><tr><td>RequestRun</td></tr><tr><td>RequestSetFilter</td></tr><tr><td>RequestShutdown</td></tr><tr><td>RequestStep</td></tr><tr><td>RequestStepOut</td></tr><tr><td>RequestStepOver</td></tr><tr><td>RequestStepQuit</td></tr><tr><td>RequestThreadList</td></tr><tr><td>RequestThreadSet</td></tr><tr><td>RequestUTPrepare</td></tr><tr><td>RequestUTRun</td></tr><tr><td>RequestUTStop</td></tr><tr><td>RequestVariable</td></tr><tr><td>RequestVariables</td></tr><tr><td>RequestWatch</td></tr><tr><td>RequestWatchEnable</td></tr><tr><td>RequestWatchIgnore</td></tr><tr><td>ResponseBPConditionError</td></tr><tr><td>ResponseBanner</td></tr><tr><td>ResponseCapabilities</td></tr><tr><td>ResponseClearBreak</td></tr><tr><td>ResponseClearWatch</td></tr><tr><td>ResponseCompletion</td></tr><tr><td>ResponseContinue</td></tr><tr><td>ResponseException</td></tr><tr><td>ResponseExit</td></tr><tr><td>ResponseForkTo</td></tr><tr><td>ResponseLine</td></tr><tr><td>ResponseOK</td></tr><tr><td>ResponseRaw</td></tr><tr><td>ResponseStack</td></tr><tr><td>ResponseSyntax</td></tr><tr><td>ResponseThreadList</td></tr><tr><td>ResponseThreadSet</td></tr><tr><td>ResponseUTFinished</td></tr><tr><td>ResponseUTPrepared</td></tr><tr><td>ResponseUTStartTest</td></tr><tr><td>ResponseUTStopTest</td></tr><tr><td>ResponseUTTestErrored</td></tr><tr><td>ResponseUTTestFailed</td></tr><tr><td>ResponseUTTestFailedExpected</td></tr><tr><td>ResponseUTTestSkipped</td></tr><tr><td>ResponseUTTestSucceededUnexpected</td></tr><tr><td>ResponseVariable</td></tr><tr><td>ResponseVariables</td></tr><tr><td>ResponseWPConditionError</td></tr>
 </table>
 <h3>Classes</h3>
 <table>
--- a/Documentation/Source/eric5.Debugger.DebugServer.html	Sat Jul 02 18:19:03 2011 +0200
+++ b/Documentation/Source/eric5.Debugger.DebugServer.html	Sun Jul 03 18:01:53 2011 +0200
@@ -160,6 +160,18 @@
 <dd>
 emitted after the client reported
             a failed test
+</dd><dt>utTestFailedExpected(testname, exc_info)</dt>
+<dd>
+emitted after the client reported
+            an expected test failure
+</dd><dt>utTestSkipped(testname, reason)</dt>
+<dd>
+emitted after the client reported
+            a skipped test
+</dd><dt>utTestSucceededUnexpected(testname)</dt>
+<dd>
+emitted after the client reported
+            an unexpected test success
 </dd>
 </dl>
 <h3>Derived from</h3>
@@ -270,6 +282,15 @@
 <td><a href="#DebugServer.clientUtTestFailed">clientUtTestFailed</a></td>
 <td>Public method to process the client test failed info.</td>
 </tr><tr>
+<td><a href="#DebugServer.clientUtTestFailedExpected">clientUtTestFailedExpected</a></td>
+<td>Public method to process the client test failed expected info.</td>
+</tr><tr>
+<td><a href="#DebugServer.clientUtTestSkipped">clientUtTestSkipped</a></td>
+<td>Public method to process the client test skipped info.</td>
+</tr><tr>
+<td><a href="#DebugServer.clientUtTestSucceededUnexpected">clientUtTestSucceededUnexpected</a></td>
+<td>Public method to process the client test succeeded unexpected info.</td>
+</tr><tr>
 <td><a href="#DebugServer.getBreakPointModel">getBreakPointModel</a></td>
 <td>Public slot to get a reference to the breakpoint model object.</td>
 </tr><tr>
@@ -808,6 +829,42 @@
 <dd>
 lines of traceback info (list of strings)
 </dd>
+</dl><a NAME="DebugServer.clientUtTestFailedExpected" ID="DebugServer.clientUtTestFailedExpected"></a>
+<h4>DebugServer.clientUtTestFailedExpected</h4>
+<b>clientUtTestFailedExpected</b>(<i>testname, traceback</i>)
+<p>
+        Public method to process the client test failed expected info.
+</p><dl>
+<dt><i>testname</i></dt>
+<dd>
+name of the test (string)
+</dd><dt><i>traceback</i></dt>
+<dd>
+lines of traceback info (list of strings)
+</dd>
+</dl><a NAME="DebugServer.clientUtTestSkipped" ID="DebugServer.clientUtTestSkipped"></a>
+<h4>DebugServer.clientUtTestSkipped</h4>
+<b>clientUtTestSkipped</b>(<i>testname, reason</i>)
+<p>
+        Public method to process the client test skipped info.
+</p><dl>
+<dt><i>testname</i></dt>
+<dd>
+name of the test (string)
+</dd><dt><i>reason</i></dt>
+<dd>
+reason for skipping the test (string)
+</dd>
+</dl><a NAME="DebugServer.clientUtTestSucceededUnexpected" ID="DebugServer.clientUtTestSucceededUnexpected"></a>
+<h4>DebugServer.clientUtTestSucceededUnexpected</h4>
+<b>clientUtTestSucceededUnexpected</b>(<i>testname</i>)
+<p>
+        Public method to process the client test succeeded unexpected info.
+</p><dl>
+<dt><i>testname</i></dt>
+<dd>
+name of the test (string)
+</dd>
 </dl><a NAME="DebugServer.getBreakPointModel" ID="DebugServer.getBreakPointModel"></a>
 <h4>DebugServer.getBreakPointModel</h4>
 <b>getBreakPointModel</b>(<i></i>)
@@ -1265,7 +1322,7 @@
         Public method to request the list of threads from the client.
 </p><a NAME="DebugServer.remoteUTPrepare" ID="DebugServer.remoteUTPrepare"></a>
 <h4>DebugServer.remoteUTPrepare</h4>
-<b>remoteUTPrepare</b>(<i>fn, tn, tfn, cov, covname, coverase</i>)
+<b>remoteUTPrepare</b>(<i>fn, tn, tfn, cov, covname, coverase, clientType=""</i>)
 <p>
         Public method to prepare a new unittest run.
 </p><dl>
@@ -1288,6 +1345,9 @@
 </dd><dt><i>coverase</i></dt>
 <dd>
 flag indicating erasure of coverage data is requested (boolean)
+</dd><dt><i>clientType=</i></dt>
+<dd>
+client type to be used (string)
 </dd>
 </dl><a NAME="DebugServer.remoteUTRun" ID="DebugServer.remoteUTRun"></a>
 <h4>DebugServer.remoteUTRun</h4>
--- a/Documentation/Source/eric5.PyUnit.UnittestDialog.html	Sat Jul 02 18:19:03 2011 +0200
+++ b/Documentation/Source/eric5.PyUnit.UnittestDialog.html	Sun Jul 03 18:01:53 2011 +0200
@@ -68,9 +68,18 @@
 <td><a href="#QtTestResult.addError">addError</a></td>
 <td>Method called if a test errored.</td>
 </tr><tr>
+<td><a href="#QtTestResult.addExpectedFailure">addExpectedFailure</a></td>
+<td>Method called if a test failed expected.</td>
+</tr><tr>
 <td><a href="#QtTestResult.addFailure">addFailure</a></td>
 <td>Method called if a test failed.</td>
 </tr><tr>
+<td><a href="#QtTestResult.addSkip">addSkip</a></td>
+<td>Method called if a test was skipped.</td>
+</tr><tr>
+<td><a href="#QtTestResult.addUnexpectedSuccess">addUnexpectedSuccess</a></td>
+<td>Method called if a test succeeded expectedly.</td>
+</tr><tr>
 <td><a href="#QtTestResult.startTest">startTest</a></td>
 <td>Method called at the start of a test.</td>
 </tr><tr>
@@ -96,10 +105,23 @@
 </p><dl>
 <dt><i>test</i></dt>
 <dd>
-Reference to the test object
+reference to the test object
 </dd><dt><i>err</i></dt>
 <dd>
-The error traceback
+error traceback
+</dd>
+</dl><a NAME="QtTestResult.addExpectedFailure" ID="QtTestResult.addExpectedFailure"></a>
+<h4>QtTestResult.addExpectedFailure</h4>
+<b>addExpectedFailure</b>(<i>test, err</i>)
+<p>
+        Method called if a test failed expected.
+</p><dl>
+<dt><i>test</i></dt>
+<dd>
+reference to the test object
+</dd><dt><i>err</i></dt>
+<dd>
+error traceback
 </dd>
 </dl><a NAME="QtTestResult.addFailure" ID="QtTestResult.addFailure"></a>
 <h4>QtTestResult.addFailure</h4>
@@ -109,10 +131,33 @@
 </p><dl>
 <dt><i>test</i></dt>
 <dd>
-Reference to the test object
+reference to the test object
 </dd><dt><i>err</i></dt>
 <dd>
-The error traceback
+error traceback
+</dd>
+</dl><a NAME="QtTestResult.addSkip" ID="QtTestResult.addSkip"></a>
+<h4>QtTestResult.addSkip</h4>
+<b>addSkip</b>(<i>test, reason</i>)
+<p>
+        Method called if a test was skipped.
+</p><dl>
+<dt><i>test</i></dt>
+<dd>
+reference to the test object
+</dd><dt><i>reason</i></dt>
+<dd>
+reason for skipping the test (string)
+</dd>
+</dl><a NAME="QtTestResult.addUnexpectedSuccess" ID="QtTestResult.addUnexpectedSuccess"></a>
+<h4>QtTestResult.addUnexpectedSuccess</h4>
+<b>addUnexpectedSuccess</b>(<i>test</i>)
+<p>
+        Method called if a test succeeded expectedly.
+</p><dl>
+<dt><i>test</i></dt>
+<dd>
+reference to the test object
 </dd>
 </dl><a NAME="QtTestResult.startTest" ID="QtTestResult.startTest"></a>
 <h4>QtTestResult.startTest</h4>
@@ -208,11 +253,20 @@
 <td><a href="#UnittestDialog.testFailed">testFailed</a></td>
 <td>Public method called if a test fails.</td>
 </tr><tr>
+<td><a href="#UnittestDialog.testFailedExpected">testFailedExpected</a></td>
+<td>Public method called if a test fails expected.</td>
+</tr><tr>
 <td><a href="#UnittestDialog.testFinished">testFinished</a></td>
 <td>Public method called if a test has finished.</td>
 </tr><tr>
+<td><a href="#UnittestDialog.testSkipped">testSkipped</a></td>
+<td>Public method called if a test was skipped.</td>
+</tr><tr>
 <td><a href="#UnittestDialog.testStarted">testStarted</a></td>
 <td>Public method called if a test is about to be run.</td>
+</tr><tr>
+<td><a href="#UnittestDialog.testSucceededUnexpected">testSucceededUnexpected</a></td>
+<td>Public method called if a test succeeds unexpectedly.</td>
 </tr>
 </table>
 <a NAME="UnittestDialog.__init__" ID="UnittestDialog.__init__"></a>
@@ -373,7 +427,7 @@
 name of the failed test (string)
 </dd><dt><i>exc</i></dt>
 <dd>
-string representation of the exception (list of strings)
+string representation of the exception (string)
 </dd>
 </dl><a NAME="UnittestDialog.testFailed" ID="UnittestDialog.testFailed"></a>
 <h4>UnittestDialog.testFailed</h4>
@@ -386,7 +440,20 @@
 name of the failed test (string)
 </dd><dt><i>exc</i></dt>
 <dd>
-string representation of the exception (list of strings)
+string representation of the exception (string)
+</dd>
+</dl><a NAME="UnittestDialog.testFailedExpected" ID="UnittestDialog.testFailedExpected"></a>
+<h4>UnittestDialog.testFailedExpected</h4>
+<b>testFailedExpected</b>(<i>test, exc</i>)
+<p>
+        Public method called if a test fails expected.
+</p><dl>
+<dt><i>test</i></dt>
+<dd>
+name of the failed test (string)
+</dd><dt><i>exc</i></dt>
+<dd>
+string representation of the exception (string)
 </dd>
 </dl><a NAME="UnittestDialog.testFinished" ID="UnittestDialog.testFinished"></a>
 <h4>UnittestDialog.testFinished</h4>
@@ -395,7 +462,20 @@
         Public method called if a test has finished.
 </p><p>
         <b>Note</b>: It is also called if it has already failed or errored.
-</p><a NAME="UnittestDialog.testStarted" ID="UnittestDialog.testStarted"></a>
+</p><a NAME="UnittestDialog.testSkipped" ID="UnittestDialog.testSkipped"></a>
+<h4>UnittestDialog.testSkipped</h4>
+<b>testSkipped</b>(<i>test, reason</i>)
+<p>
+        Public method called if a test was skipped.
+</p><dl>
+<dt><i>test</i></dt>
+<dd>
+name of the failed test (string)
+</dd><dt><i>reason</i></dt>
+<dd>
+reason for skipping the test (string)
+</dd>
+</dl><a NAME="UnittestDialog.testStarted" ID="UnittestDialog.testStarted"></a>
 <h4>UnittestDialog.testStarted</h4>
 <b>testStarted</b>(<i>test, doc</i>)
 <p>
@@ -408,6 +488,16 @@
 <dd>
 documentation of the started test (string)
 </dd>
+</dl><a NAME="UnittestDialog.testSucceededUnexpected" ID="UnittestDialog.testSucceededUnexpected"></a>
+<h4>UnittestDialog.testSucceededUnexpected</h4>
+<b>testSucceededUnexpected</b>(<i>test</i>)
+<p>
+        Public method called if a test succeeds unexpectedly.
+</p><dl>
+<dt><i>test</i></dt>
+<dd>
+name of the failed test (string)
+</dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
--- a/Documentation/Source/eric5.Utilities.__init__.html	Sat Jul 02 18:19:03 2011 +0200
+++ b/Documentation/Source/eric5.Utilities.__init__.html	Sun Jul 03 18:01:53 2011 +0200
@@ -83,6 +83,9 @@
 <td><a href="#extractFlags">extractFlags</a></td>
 <td>Function to extract eric specific flags out of the given text.</td>
 </tr><tr>
+<td><a href="#extractFlagsFromFile">extractFlagsFromFile</a></td>
+<td>Function to extract eric specific flags out of the given file.</td>
+</tr><tr>
 <td><a href="#fromNativeSeparators">fromNativeSeparators</a></td>
 <td>Function returning a path, that is using "/" separator characters.</td>
 </tr><tr>
@@ -593,6 +596,24 @@
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
+<a NAME="extractFlagsFromFile" ID="extractFlagsFromFile"></a>
+<h2>extractFlagsFromFile</h2>
+<b>extractFlagsFromFile</b>(<i>filename</i>)
+<p>
+    Function to extract eric specific flags out of the given file.
+</p><dl>
+<dt><i>filename</i></dt>
+<dd>
+name of the file to be scanned (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+dictionary of string, boolean, complex, float and int
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
 <a NAME="fromNativeSeparators" ID="fromNativeSeparators"></a>
 <h2>fromNativeSeparators</h2>
 <b>fromNativeSeparators</b>(<i>path</i>)
--- a/PyUnit/UnittestDialog.py	Sat Jul 02 18:19:03 2011 +0200
+++ b/PyUnit/UnittestDialog.py	Sun Jul 03 18:01:53 2011 +0200
@@ -9,14 +9,13 @@
 
 import unittest
 import sys
-import traceback
 import time
 import re
 import os
 
 from PyQt4.QtCore import pyqtSignal, QEvent, Qt, pyqtSlot
 from PyQt4.QtGui import QWidget, QColor, QDialog, QApplication, QDialogButtonBox, \
-    QMainWindow
+    QMainWindow, QListWidgetItem
 
 from E5Gui.E5Application import e5App
 from E5Gui.E5Completers import E5FileCompleter
@@ -30,6 +29,7 @@
 import UI.PixmapCache
 
 import Utilities
+import Preferences
 
 
 class UnittestDialog(QWidget, Ui_UnittestDialog):
@@ -95,8 +95,10 @@
         if prog:
             self.insertProg(prog)
         
-        self.rx1 = self.trUtf8("^Failure: ")
-        self.rx2 = self.trUtf8("^Error: ")
+        self.rxPatterns = [
+            self.trUtf8("^Failure: "),
+            self.trUtf8("^Error: "),
+        ]
         
         # now connect the debug server signals if called from the eric5 IDE
         if self.dbs:
@@ -106,6 +108,9 @@
             self.dbs.utStopTest.connect(self.testFinished)
             self.dbs.utTestFailed.connect(self.testFailed)
             self.dbs.utTestErrored.connect(self.testErrored)
+            self.dbs.utTestSkipped.connect(self.testSkipped)
+            self.dbs.utTestFailedExpected.connect(self.testFailedExpected)
+            self.dbs.utTestSucceededUnexpected.connect(self.testSucceededUnexpected)
         
     def __setProgressColor(self, color):
         """
@@ -237,11 +242,20 @@
             project = e5App().getObject("Project")
             if project.isOpen() and project.isProjectSource(prog):
                 mainScript = project.getMainScript(True)
+                clientType = self.project.getProjectLanguage()
             else:
                 mainScript = os.path.abspath(prog)
+                flags = Utilities.extractFlagsFromFile(mainScript)
+                if mainScript.endswith(
+                    tuple(Preferences.getPython("PythonExtensions"))) or \
+                   ("FileType" in flags and
+                    flags["FileType"] in ["Python", "Python2"]):
+                    clientType = "Python2"
+                else:
+                    clientType = ""
             self.dbs.remoteUTPrepare(prog, self.testName, testFunctionName,
                 self.coverageCheckBox.isChecked(), mainScript,
-                self.coverageEraseCheckBox.isChecked())
+                self.coverageEraseCheckBox.isChecked(), clientType=clientType)
         else:
             # we are running as an application or in local mode
             sys.path = [os.path.dirname(os.path.abspath(prog))] + self.savedSysPath
@@ -340,8 +354,8 @@
         @param txt current text (string)
         """
         if text:
-            text = re.sub(self.rx1, "", text)
-            text = re.sub(self.rx2, "", text)
+            for pattern in self.rxPatterns:
+                text = re.sub(pattern, "", text)
             itm = self.testsListWidget.findItems(text, Qt.MatchFlags(Qt.MatchExactly))[0]
             self.testsListWidget.setCurrentItem(itm)
             self.testsListWidget.scrollToItem(itm)
@@ -356,14 +370,20 @@
         self.runCount = 0
         self.failCount = 0
         self.errorCount = 0
+        self.skippedCount = 0
+        self.expectedFailureCount = 0
+        self.unexpectedSuccessCount = 0
         self.remainingCount = self.totalTests
-        self.errorInfo = []
 
         # reset the GUI
         self.progressCounterRunCount.setText(str(self.runCount))
+        self.progressCounterRemCount.setText(str(self.remainingCount))
         self.progressCounterFailureCount.setText(str(self.failCount))
         self.progressCounterErrorCount.setText(str(self.errorCount))
-        self.progressCounterRemCount.setText(str(self.remainingCount))
+        self.progressCounterSkippedCount.setText(str(self.skippedCount))
+        self.progressCounterExpectedFailureCount.setText(str(self.expectedFailureCount))
+        self.progressCounterUnexpectedSuccessCount.setText(
+            str(self.unexpectedSuccessCount))
         self.errorsListWidget.clear()
         self.testsListWidget.clear()
         self.progressProgressBar.setRange(0, self.totalTests)
@@ -402,24 +422,65 @@
         Public method called if a test fails.
         
         @param test name of the failed test (string)
-        @param exc string representation of the exception (list of strings)
+        @param exc string representation of the exception (string)
         """
         self.failCount += 1
         self.progressCounterFailureCount.setText(str(self.failCount))
-        self.errorsListWidget.insertItem(0, self.trUtf8("Failure: {0}").format(test))
-        self.errorInfo.insert(0, (test, exc))
+        itm = QListWidgetItem(self.trUtf8("Failure: {0}").format(test))
+        itm.setData(Qt.UserRole, (test, exc))
+        self.errorsListWidget.insertItem(0, itm)
         
     def testErrored(self, test, exc):
         """
         Public method called if a test errors.
         
         @param test name of the failed test (string)
-        @param exc string representation of the exception (list of strings)
+        @param exc string representation of the exception (string)
         """
         self.errorCount += 1
         self.progressCounterErrorCount.setText(str(self.errorCount))
-        self.errorsListWidget.insertItem(0, self.trUtf8("Error: {0}").format(test))
-        self.errorInfo.insert(0, (test, exc))
+        itm = QListWidgetItem(self.trUtf8("Error: {0}").format(test))
+        itm.setData(Qt.UserRole, (test, exc))
+        self.errorsListWidget.insertItem(0, itm)
+        
+    def testSkipped(self, test, reason):
+        """
+        Public method called if a test was skipped.
+        
+        @param test name of the failed test (string)
+        @param reason reason for skipping the test (string)
+        """
+        self.skippedCount += 1
+        self.progressCounterSkippedCount.setText(str(self.skippedCount))
+        itm = QListWidgetItem(self.trUtf8("    Skipped: {0}").format(reason))
+        itm.setForeground(Qt.blue)
+        self.testsListWidget.insertItem(1, itm)
+        
+    def testFailedExpected(self, test, exc):
+        """
+        Public method called if a test fails expected.
+        
+        @param test name of the failed test (string)
+        @param exc string representation of the exception (string)
+        """
+        self.expectedFailureCount += 1
+        self.progressCounterExpectedFailureCount.setText(str(self.expectedFailureCount))
+        itm = QListWidgetItem(self.trUtf8("    Expected Failure"))
+        itm.setForeground(Qt.blue)
+        self.testsListWidget.insertItem(1, itm)
+        
+    def testSucceededUnexpected(self, test):
+        """
+        Public method called if a test succeeds unexpectedly.
+        
+        @param test name of the failed test (string)
+        """
+        self.unexpectedSuccessCount += 1
+        self.progressCounterUnexpectedSuccessCount.setText(
+            str(self.unexpectedSuccessCount))
+        itm = QListWidgetItem(self.trUtf8("    Unexpected Success"))
+        itm.setForeground(Qt.red)
+        self.testsListWidget.insertItem(1, itm)
         
     def testStarted(self, test, doc):
         """
@@ -466,15 +527,16 @@
         """
         self.errListIndex = self.errorsListWidget.row(lbitem)
         text = lbitem.text()
+        self.on_errorsListWidget_currentTextChanged(text)
 
         # get the error info
-        test, tracebackLines = self.errorInfo[self.errListIndex]
-        tracebackText = "".join(tracebackLines)
+        test, tracebackText = lbitem.data(Qt.UserRole)
 
         # now build the dialog
         self.dlg = QDialog()
         ui = Ui_UnittestStacktraceDialog()
         ui.setupUi(self.dlg)
+        self.dlg.traceback = ui.traceback
         
         ui.showButton = ui.buttonBox.addButton(
             self.trUtf8("Show Source"), QDialogButtonBox.ActionRole)
@@ -502,7 +564,7 @@
             return
             
         # get the error info
-        test, tracebackLines = self.errorInfo[self.errListIndex]
+        tracebackLines = self.dlg.traceback.toPlainText().splitlines()
         # find the last entry matching the pattern
         for index in range(len(tracebackLines) - 1, -1, -1):
             fmatch = re.search(r'File "(.*?)", line (\d*?),.*', tracebackLines[index])
@@ -525,30 +587,60 @@
         
         @param parent The parent widget.
         """
-        unittest.TestResult.__init__(self)
+        super().__init__()
         self.parent = parent
         
     def addFailure(self, test, err):
         """
         Method called if a test failed.
         
-        @param test Reference to the test object
-        @param err The error traceback
+        @param test reference to the test object
+        @param err error traceback
         """
-        unittest.TestResult.addFailure(self, test, err)
-        tracebackLines = traceback.format_exception(*err + (10,))
+        super().addFailure(test, err)
+        tracebackLines = self._exc_info_to_string(err, test)
         self.parent.testFailed(str(test), tracebackLines)
         
     def addError(self, test, err):
         """
         Method called if a test errored.
         
-        @param test Reference to the test object
-        @param err The error traceback
+        @param test reference to the test object
+        @param err error traceback
+        """
+        super().addError(test, err)
+        tracebackLines = self._exc_info_to_string(err, test)
+        self.parent.testErrored(str(test), tracebackLines)
+        
+    def addSkip(self, test, reason):
+        """
+        Method called if a test was skipped.
+        
+        @param test reference to the test object
+        @param reason reason for skipping the test (string)
         """
-        unittest.TestResult.addError(self, test, err)
-        tracebackLines = traceback.format_exception(*err + (10,))
-        self.parent.testErrored(str(test), tracebackLines)
+        super().addSkip(test, reason)
+        self.parent.testSkipped(str(test), reason)
+        
+    def addExpectedFailure(self, test, err):
+        """
+        Method called if a test failed expected.
+        
+        @param test reference to the test object
+        @param err error traceback
+        """
+        super().addExpectedFailure(test, err)
+        tracebackLines = self._exc_info_to_string(err, test)
+        self.parent.testFailedExpected(str(test), tracebackLines)
+        
+    def addUnexpectedSuccess(self, test):
+        """
+        Method called if a test succeeded expectedly.
+        
+        @param test reference to the test object
+        """
+        super().addUnexpectedSuccess(test)
+        self.parent.testSucceededUnexpected(str(test))
         
     def startTest(self, test):
         """
@@ -556,7 +648,7 @@
         
         @param test Reference to the test object
         """
-        unittest.TestResult.startTest(self, test)
+        super().startTest(test)
         self.parent.testStarted(str(test), test.shortDescription())
 
     def stopTest(self, test):
@@ -565,7 +657,7 @@
         
         @param test Reference to the test object
         """
-        unittest.TestResult.stopTest(self, test)
+        super().stopTest(test)
         self.parent.testFinished()
 
 
--- a/PyUnit/UnittestDialog.ui	Sat Jul 02 18:19:03 2011 +0200
+++ b/PyUnit/UnittestDialog.ui	Sun Jul 03 18:01:53 2011 +0200
@@ -1,95 +1,96 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>UnittestDialog</class>
- <widget class="QWidget" name="UnittestDialog" >
-  <property name="geometry" >
+ <widget class="QWidget" name="UnittestDialog">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>619</width>
-    <height>667</height>
+    <width>650</width>
+    <height>700</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Unittest</string>
   </property>
-  <layout class="QVBoxLayout" name="_2" >
+  <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
-    <widget class="QGroupBox" name="groupBox" >
-     <property name="title" >
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
       <string/>
      </property>
-     <layout class="QGridLayout" name="_4" >
-      <item row="1" column="1" colspan="2" >
-       <widget class="QComboBox" name="testComboBox" >
-        <property name="toolTip" >
-         <string>Enter the test name. Leave empty to use the default name "suite".</string>
+     <layout class="QGridLayout" name="_4">
+      <item row="1" column="1" colspan="2">
+       <widget class="QComboBox" name="testComboBox">
+        <property name="toolTip">
+         <string>Enter the test name. Leave empty to use the default name &quot;suite&quot;.</string>
         </property>
-        <property name="whatsThis" >
-         <string>&lt;b>Testname&lt;/b>&lt;p>Enter the name of the test to be performed. This name must follow the rules given by Python's unittest module. If this field is empty, the default name of "suite" will be used.&lt;/p></string>
+        <property name="whatsThis">
+         <string>&lt;b&gt;Testname&lt;/b&gt;&lt;p&gt;Enter the name of the test to be performed. This name must follow the rules given by Python's unittest module. If this field is empty, the default name of &quot;suite&quot; will be used.&lt;/p&gt;</string>
         </property>
-        <property name="editable" >
+        <property name="editable">
          <bool>true</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="1" >
-       <widget class="QComboBox" name="testsuiteComboBox" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
+      <item row="0" column="1">
+       <widget class="QComboBox" name="testsuiteComboBox">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Enter name of file defining the testsuite</string>
         </property>
-        <property name="whatsThis" >
-         <string>&lt;b>Testsuite&lt;/b>
-&lt;p>Enter the name of the file defining the testsuite.
+        <property name="whatsThis">
+         <string>&lt;b&gt;Testsuite&lt;/b&gt;
+&lt;p&gt;Enter the name of the file defining the testsuite.
 It should have a method with a name given below. If no name is given, the suite() method will be tried. If no such method can be
 found, the module will be inspected for proper test
-cases.&lt;/p></string>
+cases.&lt;/p&gt;</string>
         </property>
-        <property name="editable" >
+        <property name="editable">
          <bool>true</bool>
         </property>
-        <property name="insertPolicy" >
+        <property name="insertPolicy">
          <enum>QComboBox::InsertAtTop</enum>
         </property>
-        <property name="autoCompletion" >
+        <property name="autoCompletion">
          <bool>true</bool>
         </property>
-        <property name="duplicatesEnabled" >
+        <property name="duplicatesEnabled">
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="0" >
-       <widget class="QLabel" name="label" >
-        <property name="text" >
+      <item row="1" column="0">
+       <widget class="QLabel" name="label">
+        <property name="text">
          <string>Enter &amp;test name:</string>
         </property>
-        <property name="buddy" >
+        <property name="buddy">
          <cstring>testComboBox</cstring>
         </property>
        </widget>
       </item>
-      <item row="0" column="2" >
-       <widget class="QPushButton" name="fileDialogButton" >
-        <property name="toolTip" >
+      <item row="0" column="2">
+       <widget class="QPushButton" name="fileDialogButton">
+        <property name="toolTip">
          <string>Open a file selection dialog</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>...</string>
         </property>
        </widget>
       </item>
-      <item row="0" column="0" >
-       <widget class="QLabel" name="testsuiteLabel" >
-        <property name="text" >
+      <item row="0" column="0">
+       <widget class="QLabel" name="testsuiteLabel">
+        <property name="text">
          <string>Enter test &amp;filename:</string>
         </property>
-        <property name="buddy" >
+        <property name="buddy">
          <cstring>testsuiteComboBox</cstring>
         </property>
        </widget>
@@ -98,40 +99,40 @@
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="optionsGroup" >
-     <property name="title" >
+    <widget class="QGroupBox" name="optionsGroup">
+     <property name="title">
       <string/>
      </property>
-     <layout class="QHBoxLayout" name="_5" >
+     <layout class="QHBoxLayout" name="_5">
       <item>
-       <widget class="QCheckBox" name="localCheckBox" >
-        <property name="toolTip" >
+       <widget class="QCheckBox" name="localCheckBox">
+        <property name="toolTip">
          <string>Select whether you want to run the test locally</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Run &amp;local</string>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="coverageCheckBox" >
-        <property name="toolTip" >
+       <widget class="QCheckBox" name="coverageCheckBox">
+        <property name="toolTip">
          <string>Select whether coverage data should be collected</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>C&amp;ollect coverage data</string>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QCheckBox" name="coverageEraseCheckBox" >
-        <property name="enabled" >
+       <widget class="QCheckBox" name="coverageEraseCheckBox">
+        <property name="enabled">
          <bool>false</bool>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Select whether old coverage data should be erased</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>&amp;Erase coverage data</string>
         </property>
        </widget>
@@ -140,26 +141,26 @@
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="progressGroupBox" >
-     <property name="title" >
+    <widget class="QGroupBox" name="progressGroupBox">
+     <property name="title">
       <string/>
      </property>
-     <layout class="QVBoxLayout" name="_6" >
+     <layout class="QVBoxLayout" name="verticalLayout">
       <item>
-       <layout class="QHBoxLayout" name="_8" >
+       <layout class="QHBoxLayout" name="_8">
         <item>
-         <widget class="QLabel" name="progressTextLabel" >
-          <property name="text" >
+         <widget class="QLabel" name="progressTextLabel">
+          <property name="text">
            <string>Progress:</string>
           </property>
          </widget>
         </item>
         <item>
          <spacer>
-          <property name="orientation" >
+          <property name="orientation">
            <enum>Qt::Horizontal</enum>
           </property>
-          <property name="sizeHint" stdset="0" >
+          <property name="sizeHint" stdset="0">
            <size>
             <width>371</width>
             <height>20</height>
@@ -168,99 +169,167 @@
          </spacer>
         </item>
         <item>
-         <widget class="E5Led" name="progressLed" />
+         <widget class="E5Led" name="progressLed"/>
         </item>
        </layout>
       </item>
       <item>
-       <widget class="QProgressBar" name="progressProgressBar" >
-        <property name="value" >
+       <widget class="QProgressBar" name="progressProgressBar">
+        <property name="value">
          <number>0</number>
         </property>
-        <property name="orientation" >
+        <property name="orientation">
          <enum>Qt::Horizontal</enum>
         </property>
        </widget>
       </item>
       <item>
-       <layout class="QHBoxLayout" name="_7" >
+       <layout class="QHBoxLayout" name="horizontalLayout_2">
         <item>
-         <widget class="QLabel" name="progressCounterRunLabel" >
-          <property name="text" >
+         <widget class="QLabel" name="progressCounterRunLabel">
+          <property name="text">
            <string>Run:</string>
           </property>
          </widget>
         </item>
         <item>
-         <widget class="QLabel" name="progressCounterRunCount" >
-          <property name="toolTip" >
+         <widget class="QLabel" name="progressCounterRunCount">
+          <property name="toolTip">
            <string>Number of tests run</string>
           </property>
-          <property name="text" >
-           <string>0</string>
+          <property name="text">
+           <string notr="true">0</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLabel" name="progressCounterRemLabel">
+          <property name="text">
+           <string>Remaining:</string>
           </property>
          </widget>
         </item>
         <item>
-         <widget class="QLabel" name="progressCounterFailureLabel" >
-          <property name="text" >
+         <widget class="QLabel" name="progressCounterRemCount">
+          <property name="toolTip">
+           <string>Number of tests to be run</string>
+          </property>
+          <property name="text">
+           <string notr="true">0</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="QLabel" name="progressCounterFailureLabel">
+          <property name="text">
            <string>Failures:</string>
           </property>
          </widget>
         </item>
         <item>
-         <widget class="QLabel" name="progressCounterFailureCount" >
-          <property name="toolTip" >
+         <widget class="QLabel" name="progressCounterFailureCount">
+          <property name="toolTip">
            <string>Number of test failures</string>
           </property>
-          <property name="text" >
-           <string>0</string>
+          <property name="text">
+           <string notr="true">0</string>
           </property>
          </widget>
         </item>
         <item>
-         <widget class="QLabel" name="progressCounterErrorLabel" >
-          <property name="text" >
+         <widget class="QLabel" name="progressCounterErrorLabel">
+          <property name="text">
            <string>Errors:</string>
           </property>
          </widget>
         </item>
         <item>
-         <widget class="QLabel" name="progressCounterErrorCount" >
-          <property name="toolTip" >
+         <widget class="QLabel" name="progressCounterErrorCount">
+          <property name="toolTip">
            <string>Number of test errors</string>
           </property>
-          <property name="text" >
-           <string>0</string>
+          <property name="text">
+           <string notr="true">0</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLabel" name="progressCounterSkippedLabel">
+          <property name="text">
+           <string>Skipped:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLabel" name="progressCounterSkippedCount">
+          <property name="toolTip">
+           <string>Number of tests skipped</string>
+          </property>
+          <property name="text">
+           <string notr="true">0</string>
           </property>
          </widget>
         </item>
         <item>
-         <widget class="QLabel" name="progressCounterRemLabel" >
-          <property name="text" >
-           <string>Remaining:</string>
+         <widget class="QLabel" name="progressCounterExpectedFailureLabel">
+          <property name="text">
+           <string>Expected Failures:</string>
           </property>
          </widget>
         </item>
         <item>
-         <widget class="QLabel" name="progressCounterRemCount" >
-          <property name="toolTip" >
-           <string>Number of tests to be run</string>
+         <widget class="QLabel" name="progressCounterExpectedFailureCount">
+          <property name="toolTip">
+           <string>Number of tests with expected failure</string>
+          </property>
+          <property name="text">
+           <string notr="true">0</string>
           </property>
-          <property name="text" >
-           <string>0</string>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLabel" name="progressCounterUnexpectedSuccessLabel">
+          <property name="text">
+           <string>Unexpected Successes:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLabel" name="progressCounterUnexpectedSuccessCount">
+          <property name="toolTip">
+           <string>Number of tests with unexpected success</string>
+          </property>
+          <property name="text">
+           <string notr="true">0</string>
           </property>
          </widget>
         </item>
         <item>
          <spacer>
-          <property name="orientation" >
+          <property name="orientation">
            <enum>Qt::Horizontal</enum>
           </property>
-          <property name="sizeType" >
+          <property name="sizeType">
            <enum>QSizePolicy::Expanding</enum>
           </property>
-          <property name="sizeHint" stdset="0" >
+          <property name="sizeHint" stdset="0">
            <size>
             <width>20</width>
             <height>20</height>
@@ -274,68 +343,68 @@
     </widget>
    </item>
    <item>
-    <widget class="QLabel" name="textLabel1" >
-     <property name="text" >
+    <widget class="QLabel" name="textLabel1">
+     <property name="text">
       <string>Tests performed:</string>
      </property>
     </widget>
    </item>
    <item>
-    <widget class="QListWidget" name="testsListWidget" />
+    <widget class="QListWidget" name="testsListWidget"/>
    </item>
    <item>
-    <widget class="QLabel" name="listboxLabel" >
-     <property name="text" >
+    <widget class="QLabel" name="listboxLabel">
+     <property name="text">
       <string>Failures and errors:</string>
      </property>
     </widget>
    </item>
    <item>
-    <widget class="QListWidget" name="errorsListWidget" >
-     <property name="toolTip" >
+    <widget class="QListWidget" name="errorsListWidget">
+     <property name="toolTip">
       <string>Failures and Errors list</string>
      </property>
-     <property name="whatsThis" >
-      <string>&lt;b>Failures and Errors list&lt;/b>
-&lt;p>This list shows all failed and errored tests.
-Double clicking on an entry will show the respective traceback.&lt;/p></string>
+     <property name="whatsThis">
+      <string>&lt;b&gt;Failures and Errors list&lt;/b&gt;
+&lt;p&gt;This list shows all failed and errored tests.
+Double clicking on an entry will show the respective traceback.&lt;/p&gt;</string>
      </property>
     </widget>
    </item>
    <item>
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="standardButtons" >
+     <property name="standardButtons">
       <set>QDialogButtonBox::Close</set>
      </property>
     </widget>
    </item>
    <item>
-    <layout class="QHBoxLayout" name="_3" >
+    <layout class="QHBoxLayout" name="_3">
      <item>
-      <widget class="QLabel" name="sbLabel" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
+      <widget class="QLabel" name="sbLabel">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
          <horstretch>0</horstretch>
          <verstretch>0</verstretch>
         </sizepolicy>
        </property>
-       <property name="text" >
+       <property name="text">
         <string>Idle</string>
        </property>
       </widget>
      </item>
      <item>
       <spacer>
-       <property name="orientation" >
+       <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
-       <property name="sizeType" >
+       <property name="sizeType">
         <enum>QSizePolicy::Expanding</enum>
        </property>
-       <property name="sizeHint" stdset="0" >
+       <property name="sizeHint" stdset="0">
         <size>
          <width>20</width>
          <height>20</height>
@@ -373,11 +442,11 @@
    <receiver>coverageEraseCheckBox</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>405</x>
      <y>107</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>604</x>
      <y>107</y>
     </hint>
@@ -389,11 +458,11 @@
    <receiver>UnittestDialog</receiver>
    <slot>close()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>58</x>
      <y>618</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>72</x>
      <y>667</y>
     </hint>
@@ -405,15 +474,15 @@
    <receiver>UnittestDialog</receiver>
    <slot>close()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>148</x>
      <y>623</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>148</x>
      <y>668</y>
     </hint>
    </hints>
   </connection>
  </connections>
-</ui>
\ No newline at end of file
+</ui>
--- a/Utilities/__init__.py	Sat Jul 02 18:19:03 2011 +0200
+++ b/Utilities/__init__.py	Sun Jul 03 18:01:53 2011 +0200
@@ -531,6 +531,21 @@
     return flags
 
 
+def extractFlagsFromFile(filename):
+    """
+    Function to extract eric specific flags out of the given file.
+    
+    @param filename name of the file to be scanned (string)
+    @return dictionary of string, boolean, complex, float and int
+    """
+    try:
+        source, encoding = readEncodedFile(filename)
+    except (UnicodeError, IOError):
+        return {}
+    
+    return extractFlags(source)
+
+
 def toNativeSeparators(path):
     """
     Function returning a path, that is using native separator characters.
--- a/changelog	Sat Jul 02 18:19:03 2011 +0200
+++ b/changelog	Sun Jul 03 18:01:53 2011 +0200
@@ -16,6 +16,9 @@
 - added some more search engines to the web browser
 - added capability to encrypt saved passwords with a master password
   and rearranged some configuration parameters related to security
+- extended the unit test interface to support skipped tests, expected failures
+  and unexpected successes and to better cope with Python2 scripts when run
+  from the eric IDE
 
 Version 5.2-snapshot-20110501:
 - bug fixes
--- a/i18n/eric5_cs.ts	Sat Jul 02 18:19:03 2011 +0200
+++ b/i18n/eric5_cs.ts	Sun Jul 03 18:01:53 2011 +0200
@@ -3770,34 +3770,34 @@
 <context>
     <name>DebugServer</name>
     <message>
-        <location filename="Debugger/DebugServer.py" line="134"/>
+        <location filename="Debugger/DebugServer.py" line="143"/>
         <source>created</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>vytvořeno</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="136"/>
+        <location filename="Debugger/DebugServer.py" line="145"/>
         <source>changed</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>změněno</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>Connection from illegal host</source>
         <translation>Spojení z ilegálního hosta</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1257"/>
+        <location filename="Debugger/DebugServer.py" line="1296"/>
         <source>Passive debug connection received</source>
         <translation>Spojení pasivního debugeru přijato</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1271"/>
+        <location filename="Debugger/DebugServer.py" line="1310"/>
         <source>Passive debug connection closed</source>
         <translation>Spojení pasivního debugeru uzavřeno</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1125"/>
+        <location filename="Debugger/DebugServer.py" line="1138"/>
         <source>
 Not connected
 </source>
@@ -3806,7 +3806,7 @@
 </translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>&lt;p&gt;A connection was attempted by the illegal host &lt;b&gt;{0}&lt;/b&gt;. Accept this connection?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Pokus o spojení z ilegálního hosta &lt;b&gt;{0}&lt;/b&gt;. Přijmout toto spojení?&lt;/p&gt;</translation>
     </message>
@@ -42834,27 +42834,27 @@
 <context>
     <name>UnittestDialog</name>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>Unittest</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="25"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="26"/>
         <source>Enter the test name. Leave empty to use the default name &quot;suite&quot;.</source>
         <translation>Zadejte jméno testu. Pro použití defaultního jména &quot;suite&quot; ponechte prázdné.</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="28"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="29"/>
         <source>&lt;b&gt;Testname&lt;/b&gt;&lt;p&gt;Enter the name of the test to be performed. This name must follow the rules given by Python&apos;s unittest module. If this field is empty, the default name of &quot;suite&quot; will be used.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Jméno testu&lt;/b&gt;&lt;p&gt;Zadání jména testu, který bude proveden. Toto jméno musí být zadáno v souladu s pravidly, které definuje modul unittest v Pythonu. Je-li toto pole prázdné, je použito defaultní jméno &quot;suite&quot;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="44"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="45"/>
         <source>Enter name of file defining the testsuite</source>
         <translation>Zadejte jméno souboru definující soupravu testu</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="47"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="48"/>
         <source>&lt;b&gt;Testsuite&lt;/b&gt;
 &lt;p&gt;Enter the name of the file defining the testsuite.
 It should have a method with a name given below. If no name is given, the suite() method will be tried. If no such method can be
@@ -42865,122 +42865,117 @@
 Může mít metodu pojmenovanou níže. Není-li jméno zadáno, bude spuštěna metoda suite(). Není-li tato metoda přítomna, bude modul prověřen podle vlastních nastavení testu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="70"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="71"/>
         <source>Enter &amp;test name:</source>
         <translation>Zadejte jméno &amp;testu:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="80"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="81"/>
         <source>Open a file selection dialog</source>
         <translation>Otevřít dialog výběru souboru</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="83"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="84"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="90"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="91"/>
         <source>Enter test &amp;filename:</source>
         <translation>Zadejte jméno &amp;souboru s testem:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="109"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="110"/>
         <source>Select whether you want to run the test locally</source>
         <translation>Vybrat, jestliže chcete aby test běžel lokálně</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="112"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="113"/>
         <source>Run &amp;local</source>
         <translation>Spustit &amp;lokálně</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="119"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="120"/>
         <source>Select whether coverage data should be collected</source>
         <translation>Vybrat, mají-li být data o pokrytí sbírána</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="122"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="123"/>
         <source>C&amp;ollect coverage data</source>
         <translation>Sbírat údaje &amp;o pokrytí</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="132"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="133"/>
         <source>Select whether old coverage data should be erased</source>
         <translation>Vybrat jestliže mají být stará data vymazána</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="135"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="136"/>
         <source>&amp;Erase coverage data</source>
         <translation>&amp;Vymazat data pokrytí</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="153"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="154"/>
         <source>Progress:</source>
         <translation>Stav procesu:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="190"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="191"/>
         <source>Run:</source>
         <translation>Běží:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="197"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="198"/>
         <source>Number of tests run</source>
         <translation>Počet běžících testů</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="251"/>
-        <source>0</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="207"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="242"/>
         <source>Failures:</source>
         <translation>Selhalo:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="214"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="249"/>
         <source>Number of test failures</source>
         <translation>Počet testů, které selhaly</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="224"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="259"/>
         <source>Errors:</source>
         <translation>Chyby:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="231"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="266"/>
         <source>Number of test errors</source>
         <translation>Počet testů s chybami</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="241"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="208"/>
         <source>Remaining:</source>
         <translation>Zbývá:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="248"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="215"/>
         <source>Number of tests to be run</source>
         <translation>Počet testů, které se ještě mají vykonat</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="279"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="348"/>
         <source>Tests performed:</source>
         <translation>Provedeno testů:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="289"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="358"/>
         <source>Failures and errors:</source>
         <translation>Selhání a chyby:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="296"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="365"/>
         <source>Failures and Errors list</source>
         <translation>Seznam selhání a chyb</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="299"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="368"/>
         <source>&lt;b&gt;Failures and Errors list&lt;/b&gt;
 &lt;p&gt;This list shows all failed and errored tests.
 Double clicking on an entry will show the respective traceback.&lt;/p&gt;</source>
@@ -42989,7 +42984,7 @@
 Dvojklik na položku zobrazí výpis zásobníku.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="326"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="395"/>
         <source>Idle</source>
         <translation>V běhu</translation>
     </message>
@@ -43024,70 +43019,115 @@
         <translation>&lt;b&gt;Zastavit test&lt;/b&gt;&lt;p&gt;Toto tlačítko zastaví běžící unittest.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="98"/>
+        <location filename="PyUnit/UnittestDialog.py" line="99"/>
         <source>^Failure: </source>
         <translation>^Selhalo: </translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="99"/>
+        <location filename="PyUnit/UnittestDialog.py" line="100"/>
         <source>^Error: </source>
         <translation>^Chyby: </translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="216"/>
+        <location filename="PyUnit/UnittestDialog.py" line="221"/>
         <source>You must enter a test suite file.</source>
         <translation>Musíte zadat soubor soupravy testu.</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="223"/>
+        <location filename="PyUnit/UnittestDialog.py" line="228"/>
         <source>Preparing Testsuite</source>
         <translation>Příprava soupravy testu</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="375"/>
+        <location filename="PyUnit/UnittestDialog.py" line="395"/>
         <source>Running</source>
         <translation>Běží</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="479"/>
+        <location filename="PyUnit/UnittestDialog.py" line="541"/>
         <source>Show Source</source>
         <translation>Zobrazit zdroj</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="164"/>
+        <location filename="PyUnit/UnittestDialog.py" line="169"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation>Python soubory (*.py);;Všechny soubory (*)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="160"/>
+        <location filename="PyUnit/UnittestDialog.py" line="165"/>
         <source>Python3 Files ({1});;Python2 Files ({0});;All Files (*)</source>
         <translation>Python3 soubory ({1});;Python2 soubory ({0});;Všechny soubory (*)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>&lt;p&gt;Unable to run test &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nelze spustit test &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="393"/>
+        <location filename="PyUnit/UnittestDialog.py" line="413"/>
         <source>Ran {0} test in {1:.3f}s</source>
         <translation>Doběhl {0} test za {1:.3f}s</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="396"/>
+        <location filename="PyUnit/UnittestDialog.py" line="416"/>
         <source>Ran {0} tests in {1:.3f}s</source>
         <translation>Doběhlo {0} testů za {1:.3f}s</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="409"/>
+        <location filename="PyUnit/UnittestDialog.py" line="429"/>
         <source>Failure: {0}</source>
         <translation>Selhalo: {0}</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="421"/>
+        <location filename="PyUnit/UnittestDialog.py" line="442"/>
         <source>Error: {0}</source>
         <translation>Chyby: {0}</translation>
     </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="276"/>
+        <source>Skipped:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="283"/>
+        <source>Number of tests skipped</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="293"/>
+        <source>Expected Failures:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="300"/>
+        <source>Number of tests with expected failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="310"/>
+        <source>Unexpected Successes:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="317"/>
+        <source>Number of tests with unexpected success</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="455"/>
+        <source>    Skipped: {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="468"/>
+        <source>    Expected Failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="481"/>
+        <source>    Unexpected Success</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UrlBar</name>
@@ -45135,17 +45175,17 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="Utilities/__init__.py" line="1022"/>
+        <location filename="Utilities/__init__.py" line="1037"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Můžete použít %-kódy a rezervovaná místa ve stringu. Podporované kódy jsou:&lt;table&gt;&lt;tr&gt;    &lt;td&gt;%C&lt;/td&gt;    &lt;td&gt;sloupec kurzoru v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%D&lt;/td&gt;    &lt;td&gt;adresář v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%F&lt;/td&gt;    &lt;td&gt;jméno souboru v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%H&lt;/td&gt;    &lt;td&gt;home adresář aktuálního uživatele&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%L&lt;/td&gt;    &lt;td&gt;řádek s kurzorem v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%P&lt;/td&gt;    &lt;td&gt;cesta aktuálního projektu&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%S&lt;/td&gt;    &lt;td&gt;vybraný text v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%U&lt;/td&gt;    &lt;td&gt;uživatelské jméno aktuálního uživatele&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%%&lt;/td&gt;    &lt;td&gt;znak procenta&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1208"/>
+        <location filename="Utilities/__init__.py" line="1223"/>
         <source>Python2 interpreter not configured.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1254"/>
+        <location filename="Utilities/__init__.py" line="1269"/>
         <source>Python2 interpreter did not finish within 30s.</source>
         <translation type="unfinished"></translation>
     </message>
Binary file i18n/eric5_de.qm has changed
--- a/i18n/eric5_de.ts	Sat Jul 02 18:19:03 2011 +0200
+++ b/i18n/eric5_de.ts	Sun Jul 03 18:01:53 2011 +0200
@@ -3761,34 +3761,34 @@
 <context>
     <name>DebugServer</name>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1257"/>
+        <location filename="Debugger/DebugServer.py" line="1296"/>
         <source>Passive debug connection received</source>
         <translation>Verbindung für passives Debuggen empfangen</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1271"/>
+        <location filename="Debugger/DebugServer.py" line="1310"/>
         <source>Passive debug connection closed</source>
         <translation>Verbindung für passives Debuggen geschlossen</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="134"/>
+        <location filename="Debugger/DebugServer.py" line="143"/>
         <source>created</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>erzeugt</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="136"/>
+        <location filename="Debugger/DebugServer.py" line="145"/>
         <source>changed</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>geändert</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>Connection from illegal host</source>
         <translation>Verbindung von ungültigem Rechner</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1125"/>
+        <location filename="Debugger/DebugServer.py" line="1138"/>
         <source>
 Not connected
 </source>
@@ -3797,7 +3797,7 @@
 </translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>&lt;p&gt;A connection was attempted by the illegal host &lt;b&gt;{0}&lt;/b&gt;. Accept this connection?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Es wurde versucht, eine Verbindung von dem nicht zugelassenen Rechner &lt;b&gt;{0}&lt;/b&gt; aufzubauen. Soll die Verbindung angenommen werden?&lt;/p&gt;</translation>
     </message>
@@ -42283,67 +42283,67 @@
 <context>
     <name>UnittestDialog</name>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>Unittest</source>
         <translation>Modultest</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="216"/>
+        <location filename="PyUnit/UnittestDialog.py" line="221"/>
         <source>You must enter a test suite file.</source>
         <translation>Sie müssen eine Modultest Datei angeben.</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="223"/>
+        <location filename="PyUnit/UnittestDialog.py" line="228"/>
         <source>Preparing Testsuite</source>
         <translation>Bereite Modultest vor</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="409"/>
+        <location filename="PyUnit/UnittestDialog.py" line="429"/>
         <source>Failure: {0}</source>
         <translation>Mißerfolge: {0}</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="421"/>
+        <location filename="PyUnit/UnittestDialog.py" line="442"/>
         <source>Error: {0}</source>
         <translation>Fehler: {0}</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="98"/>
-        <source>^Failure: </source>
-        <translation>^Mißerfolge: </translation>
-    </message>
-    <message>
         <location filename="PyUnit/UnittestDialog.py" line="99"/>
+        <source>^Failure: </source>
+        <translation>^Mißerfolge: </translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="100"/>
         <source>^Error: </source>
         <translation>^Fehler: </translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="375"/>
+        <location filename="PyUnit/UnittestDialog.py" line="395"/>
         <source>Running</source>
         <translation>Führe aus</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>&lt;p&gt;Unable to run test &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Modultest &lt;b&gt;{0}&lt;/b&gt; kann nicht ausgeführt werden.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="25"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="26"/>
         <source>Enter the test name. Leave empty to use the default name &quot;suite&quot;.</source>
         <translation>Gib den Testnamen ein. Leer lassen, um den Standardnamen &quot;suite&quot; zu verwenden.</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="28"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="29"/>
         <source>&lt;b&gt;Testname&lt;/b&gt;&lt;p&gt;Enter the name of the test to be performed. This name must follow the rules given by Python&apos;s unittest module. If this field is empty, the default name of &quot;suite&quot; will be used.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Testname&lt;/b&gt;&lt;p&gt;Gib den Namen des durchzuführenden Testes ein. Dieser Name muss den Regeln des Python Unittest Moduls folgen. Ist dieses Feld leer, so wird der Standardname &quot;suite&quot; verwendet.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="44"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="45"/>
         <source>Enter name of file defining the testsuite</source>
         <translation>Name der Datei, die den Modultest festlegt</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="47"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="48"/>
         <source>&lt;b&gt;Testsuite&lt;/b&gt;
 &lt;p&gt;Enter the name of the file defining the testsuite.
 It should have a method with a name given below. If no name is given, the suite() method will be tried. If no such method can be
@@ -42357,122 +42357,117 @@
 Testfällen untersucht.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="70"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="71"/>
         <source>Enter &amp;test name:</source>
         <translation>Test &amp;Namen:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="80"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="81"/>
         <source>Open a file selection dialog</source>
         <translation>Öffne einen Dateiauswahldialog</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="83"/>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="90"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="84"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="91"/>
         <source>Enter test &amp;filename:</source>
         <translation>Test &amp;Dateiname:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="109"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="110"/>
         <source>Select whether you want to run the test locally</source>
         <translation>Auswählen, um den Test lokal durchzuführen</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="112"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="113"/>
         <source>Run &amp;local</source>
         <translation>&amp;Lokal ausführen</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="119"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="120"/>
         <source>Select whether coverage data should be collected</source>
         <translation>Auswählen, um Abdeckungsdaten zu sammeln</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="122"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="123"/>
         <source>C&amp;ollect coverage data</source>
         <translation>Abdeckungsdaten &amp;sammeln</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="132"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="133"/>
         <source>Select whether old coverage data should be erased</source>
         <translation>Auswählen, um die Abdeckungsdaten zu löschen</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="135"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="136"/>
         <source>&amp;Erase coverage data</source>
         <translation>Abdeckungsdaten &amp;löschen</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="153"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="154"/>
         <source>Progress:</source>
         <translation>Fortschritt:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="190"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="191"/>
         <source>Run:</source>
         <translation>Ausgeführt:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="197"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="198"/>
         <source>Number of tests run</source>
         <translation>Anzahl durchgeführter Tests</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="251"/>
-        <source>0</source>
-        <translation>0</translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="207"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="242"/>
         <source>Failures:</source>
         <translation>Mißerfolge:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="214"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="249"/>
         <source>Number of test failures</source>
         <translation>Anzahl der Mißerfolge</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="224"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="259"/>
         <source>Errors:</source>
         <translation>Fehler:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="231"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="266"/>
         <source>Number of test errors</source>
         <translation>Anzahl fehlerhafter Tests</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="241"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="208"/>
         <source>Remaining:</source>
         <translation>Verbleibend:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="248"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="215"/>
         <source>Number of tests to be run</source>
         <translation>Anzahl verbleibender Tests</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="279"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="348"/>
         <source>Tests performed:</source>
         <translation>Durchgeführte Tests:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="289"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="358"/>
         <source>Failures and errors:</source>
         <translation>Mißerfolge und Fehler:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="296"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="365"/>
         <source>Failures and Errors list</source>
         <translation>Liste der Mißerfolge und Fehler</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="299"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="368"/>
         <source>&lt;b&gt;Failures and Errors list&lt;/b&gt;
 &lt;p&gt;This list shows all failed and errored tests.
 Double clicking on an entry will show the respective traceback.&lt;/p&gt;</source>
@@ -42491,7 +42486,7 @@
         <translation>Halte den laufenden Modultest an</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="326"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="395"/>
         <source>Idle</source>
         <translation>Leerlauf</translation>
     </message>
@@ -42516,30 +42511,75 @@
         <translation>&lt;b&gt;Modultest anhalten&lt;/b&gt;&lt;p&gt;Dieser Knopf hält den laufenden Modultest an.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="479"/>
+        <location filename="PyUnit/UnittestDialog.py" line="541"/>
         <source>Show Source</source>
         <translation>Zeige Quelltext</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="164"/>
+        <location filename="PyUnit/UnittestDialog.py" line="169"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation>Python Dateien (*.py);;Alle Dateien (*)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="160"/>
+        <location filename="PyUnit/UnittestDialog.py" line="165"/>
         <source>Python3 Files ({1});;Python2 Files ({0});;All Files (*)</source>
         <translation>Python3 Dateien ({1});;Python2 Dateien ({0});;Alle Dateien (*)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="393"/>
+        <location filename="PyUnit/UnittestDialog.py" line="413"/>
         <source>Ran {0} test in {1:.3f}s</source>
         <translation>{0} Test in {1:.3f}s ausgeführt</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="396"/>
+        <location filename="PyUnit/UnittestDialog.py" line="416"/>
         <source>Ran {0} tests in {1:.3f}s</source>
         <translation>{0} Tests in {1:.3f}s ausgeführt</translation>
     </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="276"/>
+        <source>Skipped:</source>
+        <translation>Übersprungen:</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="283"/>
+        <source>Number of tests skipped</source>
+        <translation>Anzahl übersprungener Tests</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="293"/>
+        <source>Expected Failures:</source>
+        <translation>Erwartete Mißerfolge:</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="300"/>
+        <source>Number of tests with expected failure</source>
+        <translation>Anzahl der Test, deren Mißerfolg erwartet wurde</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="310"/>
+        <source>Unexpected Successes:</source>
+        <translation>Unerwartete Erfolge:</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="317"/>
+        <source>Number of tests with unexpected success</source>
+        <translation>Anzahl der Tests, die unerwartet erfolgreich waren</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="455"/>
+        <source>    Skipped: {0}</source>
+        <translation>   Übersprungen: {0}</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="468"/>
+        <source>    Expected Failure</source>
+        <translation>    Erwarteter Mißerfolg</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="481"/>
+        <source>    Unexpected Success</source>
+        <translation>    Unerwarteter Erfolg</translation>
+    </message>
 </context>
 <context>
     <name>UrlBar</name>
@@ -44534,17 +44574,17 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="Utilities/__init__.py" line="1022"/>
+        <location filename="Utilities/__init__.py" line="1037"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Sie können %-Codes als Platzhalter in der Eingabe verwenden. Unterstützte Codes sind:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;Spalte des Cursor des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;Verzeichnis des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;Dateiname des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;Home-Verzeichnis des aktullen Nutzers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;Zeile des Cursor des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;Pfad des aktuellen Projektes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selektierter Text des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;Nutzername des aktuellen Nutzers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;das Prozentzeichen&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1208"/>
+        <location filename="Utilities/__init__.py" line="1223"/>
         <source>Python2 interpreter not configured.</source>
         <translation>Kein Python2 Interpreter konfiguriert.</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1254"/>
+        <location filename="Utilities/__init__.py" line="1269"/>
         <source>Python2 interpreter did not finish within 30s.</source>
         <translation>Python2 Interpreter wurde nicht innerhalb von 30s beendet.</translation>
     </message>
--- a/i18n/eric5_en.ts	Sat Jul 02 18:19:03 2011 +0200
+++ b/i18n/eric5_en.ts	Sun Jul 03 18:01:53 2011 +0200
@@ -3724,41 +3724,41 @@
 <context>
     <name>DebugServer</name>
     <message>
-        <location filename="Debugger/DebugServer.py" line="134"/>
+        <location filename="Debugger/DebugServer.py" line="143"/>
         <source>created</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="136"/>
+        <location filename="Debugger/DebugServer.py" line="145"/>
         <source>changed</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>Connection from illegal host</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>&lt;p&gt;A connection was attempted by the illegal host &lt;b&gt;{0}&lt;/b&gt;. Accept this connection?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1125"/>
+        <location filename="Debugger/DebugServer.py" line="1138"/>
         <source>
 Not connected
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1257"/>
+        <location filename="Debugger/DebugServer.py" line="1296"/>
         <source>Passive debug connection received</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1271"/>
+        <location filename="Debugger/DebugServer.py" line="1310"/>
         <source>Passive debug connection closed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -41905,27 +41905,27 @@
 <context>
     <name>UnittestDialog</name>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>Unittest</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="25"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="26"/>
         <source>Enter the test name. Leave empty to use the default name &quot;suite&quot;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="28"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="29"/>
         <source>&lt;b&gt;Testname&lt;/b&gt;&lt;p&gt;Enter the name of the test to be performed. This name must follow the rules given by Python&apos;s unittest module. If this field is empty, the default name of &quot;suite&quot; will be used.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="44"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="45"/>
         <source>Enter name of file defining the testsuite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="47"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="48"/>
         <source>&lt;b&gt;Testsuite&lt;/b&gt;
 &lt;p&gt;Enter the name of the file defining the testsuite.
 It should have a method with a name given below. If no name is given, the suite() method will be tried. If no such method can be
@@ -41934,129 +41934,124 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="70"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="71"/>
         <source>Enter &amp;test name:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="80"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="81"/>
         <source>Open a file selection dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="83"/>
-        <source>...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="90"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="84"/>
+        <source>...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="91"/>
         <source>Enter test &amp;filename:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="109"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="110"/>
         <source>Select whether you want to run the test locally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="112"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="113"/>
         <source>Run &amp;local</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="119"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="120"/>
         <source>Select whether coverage data should be collected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="122"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="123"/>
         <source>C&amp;ollect coverage data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="132"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="133"/>
         <source>Select whether old coverage data should be erased</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="135"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="136"/>
         <source>&amp;Erase coverage data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="153"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="154"/>
         <source>Progress:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="190"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="191"/>
         <source>Run:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="197"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="198"/>
         <source>Number of tests run</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="251"/>
-        <source>0</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="207"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="242"/>
         <source>Failures:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="214"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="249"/>
         <source>Number of test failures</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="224"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="259"/>
         <source>Errors:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="231"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="266"/>
         <source>Number of test errors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="241"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="208"/>
         <source>Remaining:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="248"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="215"/>
         <source>Number of tests to be run</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="279"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="348"/>
         <source>Tests performed:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="289"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="358"/>
         <source>Failures and errors:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="296"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="365"/>
         <source>Failures and Errors list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="299"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="368"/>
         <source>&lt;b&gt;Failures and Errors list&lt;/b&gt;
 &lt;p&gt;This list shows all failed and errored tests.
 Double clicking on an entry will show the respective traceback.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="326"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="395"/>
         <source>Idle</source>
         <translation type="unfinished"></translation>
     </message>
@@ -42091,70 +42086,115 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="98"/>
+        <location filename="PyUnit/UnittestDialog.py" line="99"/>
         <source>^Failure: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="99"/>
+        <location filename="PyUnit/UnittestDialog.py" line="100"/>
         <source>^Error: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="160"/>
+        <location filename="PyUnit/UnittestDialog.py" line="165"/>
         <source>Python3 Files ({1});;Python2 Files ({0});;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="164"/>
+        <location filename="PyUnit/UnittestDialog.py" line="169"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="216"/>
+        <location filename="PyUnit/UnittestDialog.py" line="221"/>
         <source>You must enter a test suite file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="223"/>
+        <location filename="PyUnit/UnittestDialog.py" line="228"/>
         <source>Preparing Testsuite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>&lt;p&gt;Unable to run test &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="375"/>
+        <location filename="PyUnit/UnittestDialog.py" line="395"/>
         <source>Running</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="393"/>
+        <location filename="PyUnit/UnittestDialog.py" line="413"/>
         <source>Ran {0} test in {1:.3f}s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="396"/>
+        <location filename="PyUnit/UnittestDialog.py" line="416"/>
         <source>Ran {0} tests in {1:.3f}s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="409"/>
+        <location filename="PyUnit/UnittestDialog.py" line="429"/>
         <source>Failure: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="421"/>
+        <location filename="PyUnit/UnittestDialog.py" line="442"/>
         <source>Error: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="479"/>
+        <location filename="PyUnit/UnittestDialog.py" line="541"/>
         <source>Show Source</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="276"/>
+        <source>Skipped:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="283"/>
+        <source>Number of tests skipped</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="293"/>
+        <source>Expected Failures:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="300"/>
+        <source>Number of tests with expected failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="310"/>
+        <source>Unexpected Successes:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="317"/>
+        <source>Number of tests with unexpected success</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="455"/>
+        <source>    Skipped: {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="468"/>
+        <source>    Expected Failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="481"/>
+        <source>    Unexpected Success</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UrlBar</name>
@@ -44145,17 +44185,17 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="Utilities/__init__.py" line="1022"/>
+        <location filename="Utilities/__init__.py" line="1037"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1208"/>
+        <location filename="Utilities/__init__.py" line="1223"/>
         <source>Python2 interpreter not configured.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1254"/>
+        <location filename="Utilities/__init__.py" line="1269"/>
         <source>Python2 interpreter did not finish within 30s.</source>
         <translation type="unfinished"></translation>
     </message>
--- a/i18n/eric5_es.ts	Sat Jul 02 18:19:03 2011 +0200
+++ b/i18n/eric5_es.ts	Sun Jul 03 18:01:53 2011 +0200
@@ -3761,41 +3761,41 @@
 <context>
     <name>DebugServer</name>
     <message>
-        <location filename="Debugger/DebugServer.py" line="134"/>
+        <location filename="Debugger/DebugServer.py" line="143"/>
         <source>created</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>creado</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="136"/>
+        <location filename="Debugger/DebugServer.py" line="145"/>
         <source>changed</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>cambiado</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>Connection from illegal host</source>
         <translation>Conexión desde un host ilegal</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1257"/>
+        <location filename="Debugger/DebugServer.py" line="1296"/>
         <source>Passive debug connection received</source>
         <translation>Recibida conexión pasiva de depuración</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1271"/>
+        <location filename="Debugger/DebugServer.py" line="1310"/>
         <source>Passive debug connection closed</source>
         <translation>Cerrada conexión pasiva de depuración</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1125"/>
+        <location filename="Debugger/DebugServer.py" line="1138"/>
         <source>
 Not connected
 </source>
         <translation>No conectado</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>&lt;p&gt;A connection was attempted by the illegal host &lt;b&gt;{0}&lt;/b&gt;. Accept this connection?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Se ha intentado una conexión desde el host ilegal &lt;b&gt;{0}&lt;/b&gt;. ¿Aceptar esta conexión?.&lt;/p&gt;</translation>
     </message>
@@ -42426,27 +42426,27 @@
 <context>
     <name>UnittestDialog</name>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>Unittest</source>
         <translation>Test Unitario</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="25"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="26"/>
         <source>Enter the test name. Leave empty to use the default name &quot;suite&quot;.</source>
         <translation>Introduzca el nombre del test. Deje en blanco para utilizar el nombre por defecto &quot;suite&quot;.</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="28"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="29"/>
         <source>&lt;b&gt;Testname&lt;/b&gt;&lt;p&gt;Enter the name of the test to be performed. This name must follow the rules given by Python&apos;s unittest module. If this field is empty, the default name of &quot;suite&quot; will be used.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Nombre del Test&lt;/b&gt;&lt;p&gt;Introduzca el nombre del test a llevar a cabo. Este nombre debe seguir las reglas del módulo Python de tests unitarios. Si se deja este campo en blanco, se utilizará el nombre por defecto &quot;suite&quot; .&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="44"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="45"/>
         <source>Enter name of file defining the testsuite</source>
         <translation>Introduzca el nombre del archivo que define la suite de tests</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="47"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="48"/>
         <source>&lt;b&gt;Testsuite&lt;/b&gt;
 &lt;p&gt;Enter the name of the file defining the testsuite.
 It should have a method with a name given below. If no name is given, the suite() method will be tried. If no such method can be
@@ -42459,122 +42459,122 @@
 adecuados.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="70"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="71"/>
         <source>Enter &amp;test name:</source>
         <translation>Introducir nombre del &amp;test:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="80"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="81"/>
         <source>Open a file selection dialog</source>
         <translation>Abrir un diálogo de selección de archivo</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="83"/>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="90"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="84"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="91"/>
         <source>Enter test &amp;filename:</source>
         <translation>Introducir nombre de &amp;archivo de test:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="109"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="110"/>
         <source>Select whether you want to run the test locally</source>
         <translation>Seleccionar si desea ejecutar el test en local</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="112"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="113"/>
         <source>Run &amp;local</source>
         <translation>Ejecuta&amp;r en local</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="119"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="120"/>
         <source>Select whether coverage data should be collected</source>
         <translation>Seleccione si se deben recoger datos de cobertura</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="122"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="123"/>
         <source>C&amp;ollect coverage data</source>
         <translation>Rec&amp;oger datos de cobertura</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="132"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="133"/>
         <source>Select whether old coverage data should be erased</source>
         <translation>Seleccionar si se deben borrar antiguos datos de cobertura</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="135"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="136"/>
         <source>&amp;Erase coverage data</source>
         <translation>Borrar datos de cob&amp;ertura</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="153"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="154"/>
         <source>Progress:</source>
         <translation>Progreso:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="190"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="191"/>
         <source>Run:</source>
         <translation>Ejecutar:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="197"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="198"/>
         <source>Number of tests run</source>
         <translation>Número de tests ejecutados</translation>
     </message>
     <message>
         <location filename="PyUnit/UnittestDialog.ui" line="251"/>
         <source>0</source>
-        <translation>0</translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="207"/>
+        <translation type="obsolete">0</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="242"/>
         <source>Failures:</source>
         <translation>Fallidos:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="214"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="249"/>
         <source>Number of test failures</source>
         <translation>Número de tests fallidos</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="224"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="259"/>
         <source>Errors:</source>
         <translation>Errores:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="231"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="266"/>
         <source>Number of test errors</source>
         <translation>Número de errores de test</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="241"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="208"/>
         <source>Remaining:</source>
         <translation>Quedan:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="248"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="215"/>
         <source>Number of tests to be run</source>
         <translation>Número de tests a ejecutar</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="279"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="348"/>
         <source>Tests performed:</source>
         <translation>Tests ejecutados:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="289"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="358"/>
         <source>Failures and errors:</source>
         <translation>Fallidos y con error:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="296"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="365"/>
         <source>Failures and Errors list</source>
         <translation>Lista de fallidos y con error</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="299"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="368"/>
         <source>&lt;b&gt;Failures and Errors list&lt;/b&gt;
 &lt;p&gt;This list shows all failed and errored tests.
 Double clicking on an entry will show the respective traceback.&lt;/p&gt;</source>
@@ -42583,7 +42583,7 @@
 Un doble click en una entrada mostrará el trazado correspondiente.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="326"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="395"/>
         <source>Idle</source>
         <translation>Desocupado</translation>
     </message>
@@ -42618,70 +42618,115 @@
         <translation>&lt;b&gt;Detener Test&lt;/b&gt;&lt;p&gt;Este botón detiene un test unitario en ejecución.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="98"/>
+        <location filename="PyUnit/UnittestDialog.py" line="99"/>
         <source>^Failure: </source>
         <translation>^Fallido:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="99"/>
+        <location filename="PyUnit/UnittestDialog.py" line="100"/>
         <source>^Error: </source>
         <translation>^Error:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="216"/>
+        <location filename="PyUnit/UnittestDialog.py" line="221"/>
         <source>You must enter a test suite file.</source>
         <translation>Debe introducir un archivo de suite de tests.</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="223"/>
+        <location filename="PyUnit/UnittestDialog.py" line="228"/>
         <source>Preparing Testsuite</source>
         <translation>Preparando Suite de Tests</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="375"/>
+        <location filename="PyUnit/UnittestDialog.py" line="395"/>
         <source>Running</source>
         <translation>Ejecutando</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="479"/>
+        <location filename="PyUnit/UnittestDialog.py" line="541"/>
         <source>Show Source</source>
         <translation>Mostrar código fuente</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="164"/>
+        <location filename="PyUnit/UnittestDialog.py" line="169"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation>Archivos Python (*.py);;Todos los Archivos (*)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="160"/>
+        <location filename="PyUnit/UnittestDialog.py" line="165"/>
         <source>Python3 Files ({1});;Python2 Files ({0});;All Files (*)</source>
         <translation>Archivos Python3 ({1});;Archivos Python2 ({0});;Todos los Archivos (*)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>&lt;p&gt;Unable to run test &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Imposible ejecutar el test &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="393"/>
+        <location filename="PyUnit/UnittestDialog.py" line="413"/>
         <source>Ran {0} test in {1:.3f}s</source>
         <translation>Se ha ejecutado {0} test en {1:.3f}s</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="396"/>
+        <location filename="PyUnit/UnittestDialog.py" line="416"/>
         <source>Ran {0} tests in {1:.3f}s</source>
         <translation>Se han ejecutado {0} tests en {1:.3f}s</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="409"/>
+        <location filename="PyUnit/UnittestDialog.py" line="429"/>
         <source>Failure: {0}</source>
         <translation>Fallido: {0}</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="421"/>
+        <location filename="PyUnit/UnittestDialog.py" line="442"/>
         <source>Error: {0}</source>
         <translation>Error: {0}</translation>
     </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="276"/>
+        <source>Skipped:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="283"/>
+        <source>Number of tests skipped</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="293"/>
+        <source>Expected Failures:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="300"/>
+        <source>Number of tests with expected failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="310"/>
+        <source>Unexpected Successes:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="317"/>
+        <source>Number of tests with unexpected success</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="455"/>
+        <source>    Skipped: {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="468"/>
+        <source>    Expected Failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="481"/>
+        <source>    Unexpected Success</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UrlBar</name>
@@ -44684,17 +44729,17 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="Utilities/__init__.py" line="1022"/>
+        <location filename="Utilities/__init__.py" line="1037"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Puede utilizar %-códigos como marcadores en la cadena. Los valores sportados son:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;columna del cursos en el editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directorio del editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;nombre de archivo del editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;directorio home del usuario actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;línea del cursor en el editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;ruta del proyecto actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;texto seleccionado en el editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;nombre de usuario del usuario actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;signo de porcentaje&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1208"/>
+        <location filename="Utilities/__init__.py" line="1223"/>
         <source>Python2 interpreter not configured.</source>
         <translation>Intérprete de Python2 no configurado.</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1254"/>
+        <location filename="Utilities/__init__.py" line="1269"/>
         <source>Python2 interpreter did not finish within 30s.</source>
         <translation>El intérprete de Python2 no terminó en un plazo de 30s.</translation>
     </message>
--- a/i18n/eric5_fr.ts	Sat Jul 02 18:19:03 2011 +0200
+++ b/i18n/eric5_fr.ts	Sun Jul 03 18:01:53 2011 +0200
@@ -4027,34 +4027,34 @@
 <context>
     <name>DebugServer</name>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1257"/>
+        <location filename="Debugger/DebugServer.py" line="1296"/>
         <source>Passive debug connection received</source>
         <translation>Connexion ouverte avec le débogueur passif</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1271"/>
+        <location filename="Debugger/DebugServer.py" line="1310"/>
         <source>Passive debug connection closed</source>
         <translation>Connexion au débogueur passif fermée</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="134"/>
+        <location filename="Debugger/DebugServer.py" line="143"/>
         <source>created</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>créée</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="136"/>
+        <location filename="Debugger/DebugServer.py" line="145"/>
         <source>changed</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>modifiée</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>Connection from illegal host</source>
         <translation>Connexion en provenance d&apos;un hote illégal</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1125"/>
+        <location filename="Debugger/DebugServer.py" line="1138"/>
         <source>
 Not connected
 </source>
@@ -4066,7 +4066,7 @@
         <translation type="obsolete">&lt;p&gt;Connexion demandée par l&apos;hôte &lt;b&gt;%1&lt;/b&gt;. Acceptez-vous la connexion ?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>&lt;p&gt;A connection was attempted by the illegal host &lt;b&gt;{0}&lt;/b&gt;. Accept this connection?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -46273,17 +46273,17 @@
 <context>
     <name>UnittestDialog</name>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>Unittest</source>
         <translation>Tests unitaires</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="98"/>
-        <source>^Failure: </source>
-        <translation>^Echec: </translation>
-    </message>
-    <message>
         <location filename="PyUnit/UnittestDialog.py" line="99"/>
+        <source>^Failure: </source>
+        <translation>^Echec: </translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="100"/>
         <source>^Error: </source>
         <translation>^Erreur:</translation>
     </message>
@@ -46293,17 +46293,17 @@
         <translation type="obsolete">Fichiers Python (*.py)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="216"/>
+        <location filename="PyUnit/UnittestDialog.py" line="221"/>
         <source>You must enter a test suite file.</source>
         <translation>Vous devez entrer un fichier test correct.</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="223"/>
+        <location filename="PyUnit/UnittestDialog.py" line="228"/>
         <source>Preparing Testsuite</source>
         <translation>Préparation de Testsuite</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="375"/>
+        <location filename="PyUnit/UnittestDialog.py" line="395"/>
         <source>Running</source>
         <translation>En cours d&apos;execution</translation>
     </message>
@@ -46333,22 +46333,22 @@
         <translation type="obsolete">&lt;p&gt;Impossible de lancer le test &lt;b&gt;%1&lt;/b&gt;.&lt;br&gt;%2&lt;br&gt;%3&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="25"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="26"/>
         <source>Enter the test name. Leave empty to use the default name &quot;suite&quot;.</source>
         <translation>Entrer le nom du test. Laisser vide pour utiliser le nom &quot;suite&quot; par défaut.</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="28"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="29"/>
         <source>&lt;b&gt;Testname&lt;/b&gt;&lt;p&gt;Enter the name of the test to be performed. This name must follow the rules given by Python&apos;s unittest module. If this field is empty, the default name of &quot;suite&quot; will be used.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Nom de test&lt;/b&gt;&lt;p&gt;Entrer le nom du test à effectuer. Ce nom doit résepecter les règles données par le module unittest Python. Si le champ est laissé vide, le nom par défaut &quot;suite&quot; sera utilisé.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="44"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="45"/>
         <source>Enter name of file defining the testsuite</source>
         <translation>Entrer le nom du fichier definissant la suite de tests</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="47"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="48"/>
         <source>&lt;b&gt;Testsuite&lt;/b&gt;
 &lt;p&gt;Enter the name of the file defining the testsuite.
 It should have a method with a name given below. If no name is given, the suite() method will be tried. If no such method can be
@@ -46359,122 +46359,122 @@
 Il doit posséder une méthode ayant le nom donné ci-dessous. Si aucun nom n&apos;est donné, la méthode suite() sera essayée. Si cette méthode n&apos;est pas trouvée, le module sera inspecté pour son test propre.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="70"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="71"/>
         <source>Enter &amp;test name:</source>
         <translation>Entrer le nom du &amp;test:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="80"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="81"/>
         <source>Open a file selection dialog</source>
         <translation>Ouvre une boite de sélection de fichier</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="83"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="84"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="90"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="91"/>
         <source>Enter test &amp;filename:</source>
         <translation>Entrer le nom du &amp;fichier de test:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="109"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="110"/>
         <source>Select whether you want to run the test locally</source>
         <translation>Cocher pour effectuer le test localement</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="112"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="113"/>
         <source>Run &amp;local</source>
         <translation>Lancer &amp;localement</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="119"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="120"/>
         <source>Select whether coverage data should be collected</source>
         <translation>Cocher pour collecter les données issues du coverage de code</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="122"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="123"/>
         <source>C&amp;ollect coverage data</source>
         <translation>C&amp;ollecter les donnée du coverage</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="132"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="133"/>
         <source>Select whether old coverage data should be erased</source>
         <translation>Cocher pour effacer les anciennes données Coverage du code</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="135"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="136"/>
         <source>&amp;Erase coverage data</source>
         <translation>&amp;Supprimer les données de coverage</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="153"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="154"/>
         <source>Progress:</source>
         <translation>Etat de progression:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="190"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="191"/>
         <source>Run:</source>
         <translation>Execution:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="197"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="198"/>
         <source>Number of tests run</source>
         <translation>Nombre d&apos;executions tests</translation>
     </message>
     <message>
         <location filename="PyUnit/UnittestDialog.ui" line="251"/>
         <source>0</source>
-        <translation>0</translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="207"/>
+        <translation type="obsolete">0</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="242"/>
         <source>Failures:</source>
         <translation>Echecs:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="214"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="249"/>
         <source>Number of test failures</source>
         <translation>Nombre d&apos;echecs</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="224"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="259"/>
         <source>Errors:</source>
         <translation>Erreurs:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="231"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="266"/>
         <source>Number of test errors</source>
         <translation>Nombre d&apos;erreurs</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="241"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="208"/>
         <source>Remaining:</source>
         <translation>Restants:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="248"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="215"/>
         <source>Number of tests to be run</source>
         <translation>Nombre de tests restants</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="279"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="348"/>
         <source>Tests performed:</source>
         <translation>Tests effectués:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="289"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="358"/>
         <source>Failures and errors:</source>
         <translation>Echecs et erreurs:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="296"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="365"/>
         <source>Failures and Errors list</source>
         <translation>Liste des echecs et erreurs</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="299"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="368"/>
         <source>&lt;b&gt;Failures and Errors list&lt;/b&gt;
 &lt;p&gt;This list shows all failed and errored tests.
 Double clicking on an entry will show the respective traceback.&lt;/p&gt;</source>
@@ -46493,7 +46493,7 @@
         <translation>Stoppe le test unitest en cours</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="326"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="395"/>
         <source>Idle</source>
         <translation>Idle</translation>
     </message>
@@ -46518,45 +46518,90 @@
         <translation>&lt;b&gt;Stopper le test&lt;/b&gt;&lt;p&gt;Stoppe le test unittest en cours.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="479"/>
+        <location filename="PyUnit/UnittestDialog.py" line="541"/>
         <source>Show Source</source>
         <translation>Afficher les sources</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="164"/>
+        <location filename="PyUnit/UnittestDialog.py" line="169"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="160"/>
+        <location filename="PyUnit/UnittestDialog.py" line="165"/>
         <source>Python3 Files ({1});;Python2 Files ({0});;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>&lt;p&gt;Unable to run test &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="393"/>
+        <location filename="PyUnit/UnittestDialog.py" line="413"/>
         <source>Ran {0} test in {1:.3f}s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="396"/>
+        <location filename="PyUnit/UnittestDialog.py" line="416"/>
         <source>Ran {0} tests in {1:.3f}s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="409"/>
+        <location filename="PyUnit/UnittestDialog.py" line="429"/>
         <source>Failure: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="421"/>
+        <location filename="PyUnit/UnittestDialog.py" line="442"/>
         <source>Error: {0}</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="276"/>
+        <source>Skipped:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="283"/>
+        <source>Number of tests skipped</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="293"/>
+        <source>Expected Failures:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="300"/>
+        <source>Number of tests with expected failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="310"/>
+        <source>Unexpected Successes:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="317"/>
+        <source>Number of tests with unexpected success</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="455"/>
+        <source>    Skipped: {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="468"/>
+        <source>    Expected Failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="481"/>
+        <source>    Unexpected Success</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UrlBar</name>
@@ -48945,17 +48990,17 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="Utilities/__init__.py" line="1022"/>
+        <location filename="Utilities/__init__.py" line="1037"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Vous pouvez utiliser la syntaxe &quot;%-code&quot; dans la chaine de caractères. Les codes supportés sont :&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;colonne du curseur de l&apos;éditeur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;répertoire de l&apos;éditeur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;nom de fichier de l&apos;éditeur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;répertoire &apos;home&apos; de l&apos;utilisateur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;ligne du curseur de l&apos;éditeur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;chemin du projet courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;texte sélectionné dans l&apos;éditeur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;nom d&apos;utilisateur de l&apos;utilisateur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;le signe pourcent&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1208"/>
+        <location filename="Utilities/__init__.py" line="1223"/>
         <source>Python2 interpreter not configured.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1254"/>
+        <location filename="Utilities/__init__.py" line="1269"/>
         <source>Python2 interpreter did not finish within 30s.</source>
         <translation type="unfinished"></translation>
     </message>
--- a/i18n/eric5_it.ts	Sat Jul 02 18:19:03 2011 +0200
+++ b/i18n/eric5_it.ts	Sun Jul 03 18:01:53 2011 +0200
@@ -3761,41 +3761,41 @@
 <context>
     <name>DebugServer</name>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1257"/>
+        <location filename="Debugger/DebugServer.py" line="1296"/>
         <source>Passive debug connection received</source>
         <translation>Connessione debug passivo ricevuta</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1271"/>
+        <location filename="Debugger/DebugServer.py" line="1310"/>
         <source>Passive debug connection closed</source>
         <translation>Connessione debug passivo chiusa</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="134"/>
+        <location filename="Debugger/DebugServer.py" line="143"/>
         <source>created</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>creato</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="136"/>
+        <location filename="Debugger/DebugServer.py" line="145"/>
         <source>changed</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>modificato</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>Connection from illegal host</source>
         <translation>Connessione da un non vietato</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1125"/>
+        <location filename="Debugger/DebugServer.py" line="1138"/>
         <source>
 Not connected
 </source>
         <translation>Non connesso</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>&lt;p&gt;A connection was attempted by the illegal host &lt;b&gt;{0}&lt;/b&gt;. Accept this connection?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Una connessione è stata tentata da un host vietato &lt;b&gt;{0}&lt;/b&gt;.  Accettare questa connessione ?&lt;/p&gt;</translation>
     </message>
@@ -42357,52 +42357,52 @@
 <context>
     <name>UnittestDialog</name>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>Unittest</source>
         <translation>Unittest</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="98"/>
-        <source>^Failure: </source>
-        <translation>^Failure:</translation>
-    </message>
-    <message>
         <location filename="PyUnit/UnittestDialog.py" line="99"/>
+        <source>^Failure: </source>
+        <translation>^Failure:</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="100"/>
         <source>^Error: </source>
         <translation>^Error: </translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="216"/>
+        <location filename="PyUnit/UnittestDialog.py" line="221"/>
         <source>You must enter a test suite file.</source>
         <translation>Devi inserire il file di una suite di test.</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="223"/>
+        <location filename="PyUnit/UnittestDialog.py" line="228"/>
         <source>Preparing Testsuite</source>
         <translation>Preparazione Testsuite</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="375"/>
+        <location filename="PyUnit/UnittestDialog.py" line="395"/>
         <source>Running</source>
         <translation>In esecuzione</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="25"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="26"/>
         <source>Enter the test name. Leave empty to use the default name &quot;suite&quot;.</source>
         <translation>Inserisci il nome del test. Lascia vuoto per usare il nome di default &quot;suite&quot;.</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="28"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="29"/>
         <source>&lt;b&gt;Testname&lt;/b&gt;&lt;p&gt;Enter the name of the test to be performed. This name must follow the rules given by Python&apos;s unittest module. If this field is empty, the default name of &quot;suite&quot; will be used.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Nome Test&lt;/b&gt;&lt;p&gt;Inserisci il nome del test da eseguire. Questo deve seguire le regole date dal modulo unittest del Python. Se questo campo è vuoto, viene utilizzato il nome di default &quot;suite&quot;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="44"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="45"/>
         <source>Enter name of file defining the testsuite</source>
         <translation>Inserisci il nome del file che definisce la testsuite</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="47"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="48"/>
         <source>&lt;b&gt;Testsuite&lt;/b&gt;
 &lt;p&gt;Enter the name of the file defining the testsuite.
 It should have a method with a name given below. If no name is given, the suite() method will be tried. If no such method can be
@@ -42415,122 +42415,122 @@
 appropriati.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="70"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="71"/>
         <source>Enter &amp;test name:</source>
         <translation>Inserisci nome &amp;test:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="80"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="81"/>
         <source>Open a file selection dialog</source>
         <translation>Apri un dialogo di selezione dei file</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="83"/>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="90"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="84"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="91"/>
         <source>Enter test &amp;filename:</source>
         <translation>Inserisci il nome del &amp;file di test:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="109"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="110"/>
         <source>Select whether you want to run the test locally</source>
         <translation>Seleziona se vuoi eseguire i test in locale</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="112"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="113"/>
         <source>Run &amp;local</source>
         <translation>Esegui in &amp;locale</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="119"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="120"/>
         <source>Select whether coverage data should be collected</source>
         <translation>Seleziona se i dati di coverage devono essere salvati</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="122"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="123"/>
         <source>C&amp;ollect coverage data</source>
         <translation>Salva di dati di c&amp;overage</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="132"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="133"/>
         <source>Select whether old coverage data should be erased</source>
         <translation>Seleziona se i vecchi dati di coverage devono essere cancellati</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="135"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="136"/>
         <source>&amp;Erase coverage data</source>
         <translation>Canc&amp;ella di dati di coverage</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="153"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="154"/>
         <source>Progress:</source>
         <translation>Avanzamento:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="190"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="191"/>
         <source>Run:</source>
         <translation>Esegui:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="197"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="198"/>
         <source>Number of tests run</source>
         <translation>Numero di test eseguiti</translation>
     </message>
     <message>
         <location filename="PyUnit/UnittestDialog.ui" line="251"/>
         <source>0</source>
-        <translation>0</translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="207"/>
+        <translation type="obsolete">0</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="242"/>
         <source>Failures:</source>
         <translation>Fallimenti:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="214"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="249"/>
         <source>Number of test failures</source>
         <translation>Numero di test falliti</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="224"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="259"/>
         <source>Errors:</source>
         <translation>Errori:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="231"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="266"/>
         <source>Number of test errors</source>
         <translation>Numero di errori nei test</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="241"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="208"/>
         <source>Remaining:</source>
         <translation>Rimanenti:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="248"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="215"/>
         <source>Number of tests to be run</source>
         <translation>Numero di test da eseguire</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="279"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="348"/>
         <source>Tests performed:</source>
         <translation>Test eseguiti:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="289"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="358"/>
         <source>Failures and errors:</source>
         <translation>Falliment ed errori:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="296"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="365"/>
         <source>Failures and Errors list</source>
         <translation>Lista dei fallimenti e degli errori</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="299"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="368"/>
         <source>&lt;b&gt;Failures and Errors list&lt;/b&gt;
 &lt;p&gt;This list shows all failed and errored tests.
 Double clicking on an entry will show the respective traceback.&lt;/p&gt;</source>
@@ -42549,7 +42549,7 @@
         <translation>Ferma l&apos;esecuzione della unittest</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="326"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="395"/>
         <source>Idle</source>
         <translation>Attesa</translation>
     </message>
@@ -42574,45 +42574,90 @@
         <translation>&lt;b&gt;Ferma test&lt;/b&gt;&lt;p&gt;Questo pulsante ferma una unitttest in esecuzione.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="479"/>
+        <location filename="PyUnit/UnittestDialog.py" line="541"/>
         <source>Show Source</source>
         <translation>Mostra sorgenti</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="164"/>
+        <location filename="PyUnit/UnittestDialog.py" line="169"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation>File Python (*.py);;Tutti i File (*)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="160"/>
+        <location filename="PyUnit/UnittestDialog.py" line="165"/>
         <source>Python3 Files ({1});;Python2 Files ({0});;All Files (*)</source>
         <translation>File Python3 ({0});;File Python1({1});;Tutti i File (*)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>&lt;p&gt;Unable to run test &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Impossibile eseguire test &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="393"/>
+        <location filename="PyUnit/UnittestDialog.py" line="413"/>
         <source>Ran {0} test in {1:.3f}s</source>
         <translation>Eseguiti {0} test in {1:.3f} s</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="396"/>
+        <location filename="PyUnit/UnittestDialog.py" line="416"/>
         <source>Ran {0} tests in {1:.3f}s</source>
         <translation>Eseguiti {0} test in {1:.3f} s</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="409"/>
+        <location filename="PyUnit/UnittestDialog.py" line="429"/>
         <source>Failure: {0}</source>
         <translation>Fallimenti: {0}</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="421"/>
+        <location filename="PyUnit/UnittestDialog.py" line="442"/>
         <source>Error: {0}</source>
         <translation>Errori: {0}</translation>
     </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="276"/>
+        <source>Skipped:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="283"/>
+        <source>Number of tests skipped</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="293"/>
+        <source>Expected Failures:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="300"/>
+        <source>Number of tests with expected failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="310"/>
+        <source>Unexpected Successes:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="317"/>
+        <source>Number of tests with unexpected success</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="455"/>
+        <source>    Skipped: {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="468"/>
+        <source>    Expected Failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="481"/>
+        <source>    Unexpected Success</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UrlBar</name>
@@ -44615,17 +44660,17 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="Utilities/__init__.py" line="1022"/>
+        <location filename="Utilities/__init__.py" line="1037"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Puoi usare i codici % come segnaposti nella stringa. I codici supportati sono: &lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;colonna del cursore nell&apos;editor attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory dell&apos;editor attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;nome file dell&apos;editor corrente&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;directory home dell&apos;utente attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;linea del cursore dell&apos;editor attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;percorso del progetto attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;testo selezionato dell&apos;editor attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username dell&apos;utente attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;Segno percentuale&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1208"/>
+        <location filename="Utilities/__init__.py" line="1223"/>
         <source>Python2 interpreter not configured.</source>
         <translation>Interprete Python2 non configurato.</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1254"/>
+        <location filename="Utilities/__init__.py" line="1269"/>
         <source>Python2 interpreter did not finish within 30s.</source>
         <translation>L&apos;interprete Python2 non ha finito entro i 30s.</translation>
     </message>
--- a/i18n/eric5_ru.ts	Sat Jul 02 18:19:03 2011 +0200
+++ b/i18n/eric5_ru.ts	Sun Jul 03 18:01:53 2011 +0200
@@ -3769,41 +3769,41 @@
 <context>
     <name>DebugServer</name>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1257"/>
+        <location filename="Debugger/DebugServer.py" line="1296"/>
         <source>Passive debug connection received</source>
         <translation>Принято соединение пассивной отладки</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1271"/>
+        <location filename="Debugger/DebugServer.py" line="1310"/>
         <source>Passive debug connection closed</source>
         <translation>Соединение пассивной отладки закрыто</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="134"/>
+        <location filename="Debugger/DebugServer.py" line="143"/>
         <source>created</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>создано</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="136"/>
+        <location filename="Debugger/DebugServer.py" line="145"/>
         <source>changed</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>изменено</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>Connection from illegal host</source>
         <translation>соединение с запрещённого хоста</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1125"/>
+        <location filename="Debugger/DebugServer.py" line="1138"/>
         <source>
 Not connected
 </source>
         <translation>Нет соединения</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>&lt;p&gt;A connection was attempted by the illegal host &lt;b&gt;{0}&lt;/b&gt;. Accept this connection?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Попытка соединения с недопустимого компьютора &lt;b&gt;{0}&lt;/b&gt;. Разрешить соединение?&lt;/p&gt;</translation>
     </message>
@@ -42535,68 +42535,68 @@
 <context>
     <name>UnittestDialog</name>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>Unittest</source>
         <translation>Unittest</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="216"/>
+        <location filename="PyUnit/UnittestDialog.py" line="221"/>
         <source>You must enter a test suite file.</source>
         <translation>Необходимо ввести имя файла с пакетом тестов.</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="223"/>
+        <location filename="PyUnit/UnittestDialog.py" line="228"/>
         <source>Preparing Testsuite</source>
         <translation>Подготовка пакета тестов</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="409"/>
+        <location filename="PyUnit/UnittestDialog.py" line="429"/>
         <source>Failure: {0}</source>
         <translation>Неудача: {0}</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="421"/>
+        <location filename="PyUnit/UnittestDialog.py" line="442"/>
         <source>Error: {0}</source>
         <translation>Ошибка: {0}</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="98"/>
-        <source>^Failure: </source>
-        <translation>^Неудача: </translation>
-    </message>
-    <message>
         <location filename="PyUnit/UnittestDialog.py" line="99"/>
+        <source>^Failure: </source>
+        <translation>^Неудача: </translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="100"/>
         <source>^Error: </source>
         <translation>^Ошибка:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="375"/>
+        <location filename="PyUnit/UnittestDialog.py" line="395"/>
         <source>Running</source>
         <translation>Выполяется</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>&lt;p&gt;Unable to run test &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Невозможно запустить тест&lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="25"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="26"/>
         <source>Enter the test name. Leave empty to use the default name &quot;suite&quot;.</source>
         <translation>Задайте имя пакета тестов. Оставьте поле пустым, чтобы использовать имя по умолчанию (&quot;suite&quot;).</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="28"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="29"/>
         <source>&lt;b&gt;Testname&lt;/b&gt;&lt;p&gt;Enter the name of the test to be performed. This name must follow the rules given by Python&apos;s unittest module. If this field is empty, the default name of &quot;suite&quot; will be used.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Имя теста&lt;/b&gt;
 &lt;p&gt;Задайте имя теста для исполнения. Имя должно соотвестсвовать правилам модуля Python unittest. Если оставить поле пустым, будет использовано имя по умолчанию (&quot;suite&quot;).&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="44"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="45"/>
         <source>Enter name of file defining the testsuite</source>
         <translation>Задайте имя файла, содержащего пакет тестов</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="47"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="48"/>
         <source>&lt;b&gt;Testsuite&lt;/b&gt;
 &lt;p&gt;Enter the name of the file defining the testsuite.
 It should have a method with a name given below. If no name is given, the suite() method will be tried. If no such method can be
@@ -42609,122 +42609,122 @@
 подходящих классов с тестами.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="70"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="71"/>
         <source>Enter &amp;test name:</source>
         <translation>Задайте &amp;имя теста:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="80"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="81"/>
         <source>Open a file selection dialog</source>
         <translation>Показать диалог выбора файлов</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="83"/>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="90"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="84"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="91"/>
         <source>Enter test &amp;filename:</source>
         <translation>Задайте &amp;имя файла с тестами:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="109"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="110"/>
         <source>Select whether you want to run the test locally</source>
         <translation>Хотите ли Вы запустить тест локально</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="112"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="113"/>
         <source>Run &amp;local</source>
         <translation>Выполнить &amp;локально</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="119"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="120"/>
         <source>Select whether coverage data should be collected</source>
         <translation>Должны ли собираться данные охвата</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="122"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="123"/>
         <source>C&amp;ollect coverage data</source>
         <translation>Собирать данные &amp;охвата</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="132"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="133"/>
         <source>Select whether old coverage data should be erased</source>
         <translation>Должны ли собираться данные охвата</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="135"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="136"/>
         <source>&amp;Erase coverage data</source>
         <translation>&amp;Удалить данные охвата</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="153"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="154"/>
         <source>Progress:</source>
         <translation>Прогресс:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="190"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="191"/>
         <source>Run:</source>
         <translation>Запустить:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="197"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="198"/>
         <source>Number of tests run</source>
         <translation>Количество запущенных тестов</translation>
     </message>
     <message>
         <location filename="PyUnit/UnittestDialog.ui" line="251"/>
         <source>0</source>
-        <translation>0</translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="207"/>
+        <translation type="obsolete">0</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="242"/>
         <source>Failures:</source>
         <translation>Неудачи:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="214"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="249"/>
         <source>Number of test failures</source>
         <translation>Количество неудач в тестах</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="224"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="259"/>
         <source>Errors:</source>
         <translation>Ошибки:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="231"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="266"/>
         <source>Number of test errors</source>
         <translation>Количество ошибок в тестах</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="241"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="208"/>
         <source>Remaining:</source>
         <translation>Осталось:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="248"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="215"/>
         <source>Number of tests to be run</source>
         <translation>Количество ещё не пройденных тестов</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="279"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="348"/>
         <source>Tests performed:</source>
         <translation>Проведённые тесты:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="289"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="358"/>
         <source>Failures and errors:</source>
         <translation>Неудачи и ошибки:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="296"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="365"/>
         <source>Failures and Errors list</source>
         <translation>Список неудач и ошибок</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="299"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="368"/>
         <source>&lt;b&gt;Failures and Errors list&lt;/b&gt;
 &lt;p&gt;This list shows all failed and errored tests.
 Double clicking on an entry will show the respective traceback.&lt;/p&gt;</source>
@@ -42744,7 +42744,7 @@
         <translation>Остановить выполняющийся пакет тестов</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="326"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="395"/>
         <source>Idle</source>
         <translation>Задайте имя, определяющее пакет тестов</translation>
     </message>
@@ -42769,30 +42769,75 @@
         <translation>&lt;b&gt;Остановить&lt;/b&gt;&lt;p&gt;Остановить выполняющийся пакет тестов.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="479"/>
+        <location filename="PyUnit/UnittestDialog.py" line="541"/>
         <source>Show Source</source>
         <translation>Показать исходник</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="164"/>
+        <location filename="PyUnit/UnittestDialog.py" line="169"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation>Python файлы (*.py);;Все файлы (*)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="160"/>
+        <location filename="PyUnit/UnittestDialog.py" line="165"/>
         <source>Python3 Files ({1});;Python2 Files ({0});;All Files (*)</source>
         <translation>Python3 файлы ({1});;Python2 файлы ({0});;Все файлы (*)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="393"/>
+        <location filename="PyUnit/UnittestDialog.py" line="413"/>
         <source>Ran {0} test in {1:.3f}s</source>
         <translation>Тест {0} пройден за {1:.3f} секунд</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="396"/>
+        <location filename="PyUnit/UnittestDialog.py" line="416"/>
         <source>Ran {0} tests in {1:.3f}s</source>
         <translation>{0} Тестов пройдено за {1:.3f} секунд</translation>
     </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="276"/>
+        <source>Skipped:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="283"/>
+        <source>Number of tests skipped</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="293"/>
+        <source>Expected Failures:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="300"/>
+        <source>Number of tests with expected failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="310"/>
+        <source>Unexpected Successes:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="317"/>
+        <source>Number of tests with unexpected success</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="455"/>
+        <source>    Skipped: {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="468"/>
+        <source>    Expected Failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="481"/>
+        <source>    Unexpected Success</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UrlBar</name>
@@ -44819,7 +44864,7 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="Utilities/__init__.py" line="1022"/>
+        <location filename="Utilities/__init__.py" line="1037"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;В строках вы можете использовать следующие %-коды::
 &lt;table&gt;
@@ -44834,12 +44879,12 @@
 &lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;знак процента&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1208"/>
+        <location filename="Utilities/__init__.py" line="1223"/>
         <source>Python2 interpreter not configured.</source>
         <translation>Интерпретатор Python2 не настроен.</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1254"/>
+        <location filename="Utilities/__init__.py" line="1269"/>
         <source>Python2 interpreter did not finish within 30s.</source>
         <translation>Интерпретатор Python2 не завершился в течение 30 секунд.</translation>
     </message>
--- a/i18n/eric5_tr.ts	Sat Jul 02 18:19:03 2011 +0200
+++ b/i18n/eric5_tr.ts	Sun Jul 03 18:01:53 2011 +0200
@@ -3769,29 +3769,29 @@
 <context>
     <name>DebugServer</name>
     <message>
-        <location filename="Debugger/DebugServer.py" line="134"/>
+        <location filename="Debugger/DebugServer.py" line="143"/>
         <source>created</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>Üretildi</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="136"/>
+        <location filename="Debugger/DebugServer.py" line="145"/>
         <source>changed</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>değişti</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>Connection from illegal host</source>
         <translation>Yasal olmayan bir host tan balğlantı</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>&lt;p&gt;A connection was attempted by the illegal host &lt;b&gt;{0}&lt;/b&gt;. Accept this connection?&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt;kaçak bir barındırıcıdan (host) bağlantı denemesi. Bu bağlantıyı kabul ediyor musunuz?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1125"/>
+        <location filename="Debugger/DebugServer.py" line="1138"/>
         <source>
 Not connected
 </source>
@@ -3800,12 +3800,12 @@
 </translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1257"/>
+        <location filename="Debugger/DebugServer.py" line="1296"/>
         <source>Passive debug connection received</source>
         <translation>Pasif Hata Ayıklama bağlantısı alındı</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1271"/>
+        <location filename="Debugger/DebugServer.py" line="1310"/>
         <source>Passive debug connection closed</source>
         <translation>Pasif Hata Ayıklama bağlantısı kapatıldı</translation>
     </message>
@@ -42641,27 +42641,27 @@
 <context>
     <name>UnittestDialog</name>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>Unittest</source>
         <translation>Birimtest</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="25"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="26"/>
         <source>Enter the test name. Leave empty to use the default name &quot;suite&quot;.</source>
         <translation>Test adını giriniz. boş olarak bırakırsanız varsayılan ad &quot;suit&quot; olarak kuullanılır.</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="28"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="29"/>
         <source>&lt;b&gt;Testname&lt;/b&gt;&lt;p&gt;Enter the name of the test to be performed. This name must follow the rules given by Python&apos;s unittest module. If this field is empty, the default name of &quot;suite&quot; will be used.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="44"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="45"/>
         <source>Enter name of file defining the testsuite</source>
         <translation>Tanımlanan test takımının adını giriniz</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="47"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="48"/>
         <source>&lt;b&gt;Testsuite&lt;/b&gt;
 &lt;p&gt;Enter the name of the file defining the testsuite.
 It should have a method with a name given below. If no name is given, the suite() method will be tried. If no such method can be
@@ -42670,129 +42670,129 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="70"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="71"/>
         <source>Enter &amp;test name:</source>
         <translation>Test &amp;Adı:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="80"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="81"/>
         <source>Open a file selection dialog</source>
         <translation>Dosya seçim diyaloğu aç</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="83"/>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="90"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="84"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="91"/>
         <source>Enter test &amp;filename:</source>
         <translation>Test &amp;Dosyası:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="109"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="110"/>
         <source>Select whether you want to run the test locally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="112"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="113"/>
         <source>Run &amp;local</source>
         <translation>Yere&amp;l çalıştır</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="119"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="120"/>
         <source>Select whether coverage data should be collected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="122"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="123"/>
         <source>C&amp;ollect coverage data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="132"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="133"/>
         <source>Select whether old coverage data should be erased</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="135"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="136"/>
         <source>&amp;Erase coverage data</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="153"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="154"/>
         <source>Progress:</source>
         <translation>İşlem:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="190"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="191"/>
         <source>Run:</source>
         <translation>Çalıştır:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="197"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="198"/>
         <source>Number of tests run</source>
         <translation>Çalışan testlerin sayısı</translation>
     </message>
     <message>
         <location filename="PyUnit/UnittestDialog.ui" line="251"/>
         <source>0</source>
-        <translation>0</translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="207"/>
+        <translation type="obsolete">0</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="242"/>
         <source>Failures:</source>
         <translation>Başarısızlıklar:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="214"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="249"/>
         <source>Number of test failures</source>
         <translation>Test başarısızlıklarının sayısı</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="224"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="259"/>
         <source>Errors:</source>
         <translation>Hatalar:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="231"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="266"/>
         <source>Number of test errors</source>
         <translation>Test hatalarının sayısı</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="241"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="208"/>
         <source>Remaining:</source>
         <translation>Geride kalan:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="248"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="215"/>
         <source>Number of tests to be run</source>
         <translation>Koşturulacak test sayısı</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="279"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="348"/>
         <source>Tests performed:</source>
         <translation>Başarılan test:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="289"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="358"/>
         <source>Failures and errors:</source>
         <translation>Başarısızlık ve Hatalar:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="296"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="365"/>
         <source>Failures and Errors list</source>
         <translation>Başarısızlık ve Hata listesi</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="299"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="368"/>
         <source>&lt;b&gt;Failures and Errors list&lt;/b&gt;
 &lt;p&gt;This list shows all failed and errored tests.
 Double clicking on an entry will show the respective traceback.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="326"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="395"/>
         <source>Idle</source>
         <translation>Idle</translation>
     </message>
@@ -42827,70 +42827,115 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="98"/>
+        <location filename="PyUnit/UnittestDialog.py" line="99"/>
         <source>^Failure: </source>
         <translation>^Başarısızlık: </translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="99"/>
+        <location filename="PyUnit/UnittestDialog.py" line="100"/>
         <source>^Error: </source>
         <translation>^Hata: </translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="160"/>
+        <location filename="PyUnit/UnittestDialog.py" line="165"/>
         <source>Python3 Files ({1});;Python2 Files ({0});;All Files (*)</source>
         <translation>Python3 Dosyaları ({1});;Python2 Dosyaları ({0});; Tüm Dosyalar (*)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="164"/>
+        <location filename="PyUnit/UnittestDialog.py" line="169"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation>Python Dosyaları (*.py);;Tüm Dosyalar (*)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="216"/>
+        <location filename="PyUnit/UnittestDialog.py" line="221"/>
         <source>You must enter a test suite file.</source>
         <translation>Testyönteminin dosyasını girmelisiniz.</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="223"/>
+        <location filename="PyUnit/UnittestDialog.py" line="228"/>
         <source>Preparing Testsuite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>&lt;p&gt;Unable to run test &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="375"/>
+        <location filename="PyUnit/UnittestDialog.py" line="395"/>
         <source>Running</source>
         <translation>Çalışıyor</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="393"/>
+        <location filename="PyUnit/UnittestDialog.py" line="413"/>
         <source>Ran {0} test in {1:.3f}s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="396"/>
+        <location filename="PyUnit/UnittestDialog.py" line="416"/>
         <source>Ran {0} tests in {1:.3f}s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="409"/>
+        <location filename="PyUnit/UnittestDialog.py" line="429"/>
         <source>Failure: {0}</source>
         <translation>Başarısızlık:{0}</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="421"/>
+        <location filename="PyUnit/UnittestDialog.py" line="442"/>
         <source>Error: {0}</source>
         <translation>Hata: {0}</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="479"/>
+        <location filename="PyUnit/UnittestDialog.py" line="541"/>
         <source>Show Source</source>
         <translation>Kaynağı Göster</translation>
     </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="276"/>
+        <source>Skipped:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="283"/>
+        <source>Number of tests skipped</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="293"/>
+        <source>Expected Failures:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="300"/>
+        <source>Number of tests with expected failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="310"/>
+        <source>Unexpected Successes:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="317"/>
+        <source>Number of tests with unexpected success</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="455"/>
+        <source>    Skipped: {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="468"/>
+        <source>    Expected Failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="481"/>
+        <source>    Unexpected Success</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UrlBar</name>
@@ -44912,17 +44957,17 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="Utilities/__init__.py" line="1022"/>
+        <location filename="Utilities/__init__.py" line="1037"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;%-alanlarda çeşitli kodları kullanabilirsiniz. Tanımlanan kodlar:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;geçerli düzenleyicinin imlecinin sütunu&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;geçerli düzenleyicinin dizini&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;geçerli düzenleyicinin dosya adı&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;geçerli kullancının ana dizini&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;geçerli düzenleyicinin imlecinin satırı&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;geçerli projenin yolu&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;Geçici kullanıcının kullanıcı adı&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;oran işareti&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1208"/>
+        <location filename="Utilities/__init__.py" line="1223"/>
         <source>Python2 interpreter not configured.</source>
         <translation>Python2 yorumlayıcı ayarlanmadı.</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1254"/>
+        <location filename="Utilities/__init__.py" line="1269"/>
         <source>Python2 interpreter did not finish within 30s.</source>
         <translation type="unfinished"></translation>
     </message>
--- a/i18n/eric5_zh_CN.GB2312.ts	Sat Jul 02 18:19:03 2011 +0200
+++ b/i18n/eric5_zh_CN.GB2312.ts	Sun Jul 03 18:01:53 2011 +0200
@@ -4019,19 +4019,19 @@
 <context>
     <name>DebugServer</name>
     <message>
-        <location filename="Debugger/DebugServer.py" line="134"/>
+        <location filename="Debugger/DebugServer.py" line="143"/>
         <source>created</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>创建</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="136"/>
+        <location filename="Debugger/DebugServer.py" line="145"/>
         <source>changed</source>
         <comment>must be same as in EditWatchpointDialog</comment>
         <translation>改变</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>Connection from illegal host</source>
         <translation>连接非法主机</translation>
     </message>
@@ -4041,7 +4041,7 @@
         <translation type="obsolete">&lt;p&gt;非法主机 &lt;b&gt;%1&lt;/b&gt; 试图进行连接。同意连接?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1125"/>
+        <location filename="Debugger/DebugServer.py" line="1138"/>
         <source>
 Not connected
 </source>
@@ -4050,17 +4050,17 @@
 </translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1257"/>
+        <location filename="Debugger/DebugServer.py" line="1296"/>
         <source>Passive debug connection received</source>
         <translation>接受被动调试连接</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="1271"/>
+        <location filename="Debugger/DebugServer.py" line="1310"/>
         <source>Passive debug connection closed</source>
         <translation>关闭被动调试连接</translation>
     </message>
     <message>
-        <location filename="Debugger/DebugServer.py" line="573"/>
+        <location filename="Debugger/DebugServer.py" line="582"/>
         <source>&lt;p&gt;A connection was attempted by the illegal host &lt;b&gt;{0}&lt;/b&gt;. Accept this connection?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -46242,27 +46242,27 @@
 <context>
     <name>UnittestDialog</name>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>Unittest</source>
         <translation>单元测试</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="25"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="26"/>
         <source>Enter the test name. Leave empty to use the default name &quot;suite&quot;.</source>
         <translation>输入测试名称。为空时使用默认名称“suite”。</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="28"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="29"/>
         <source>&lt;b&gt;Testname&lt;/b&gt;&lt;p&gt;Enter the name of the test to be performed. This name must follow the rules given by Python&apos;s unittest module. If this field is empty, the default name of &quot;suite&quot; will be used.&lt;/p&gt;</source>
         <translation>&lt;b&gt;测试名&lt;/b&gt;&lt;p&gt;输入要执行测试的名称。该名称必须遵循由 Python 的单元测试模块所给出的规则。如果该区域没有输入,则使用默认名称“suite”。&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="44"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="45"/>
         <source>Enter name of file defining the testsuite</source>
         <translation>输入在测试组件中定义的文件名称</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="47"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="48"/>
         <source>&lt;b&gt;Testsuite&lt;/b&gt;
 &lt;p&gt;Enter the name of the file defining the testsuite.
 It should have a method with a name given below. If no name is given, the suite() method will be tried. If no such method can be
@@ -46274,122 +46274,122 @@
 如果没有找到相应的方法,则将在模块中检查合适的测试案例。&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="70"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="71"/>
         <source>Enter &amp;test name:</source>
         <translation>输入测试名(&amp;t):</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="80"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="81"/>
         <source>Open a file selection dialog</source>
         <translation>打开文件选择对话框</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="83"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="84"/>
         <source>...</source>
         <translation>……</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="90"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="91"/>
         <source>Enter test &amp;filename:</source>
         <translation>输入测试文件名(&amp;f):</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="109"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="110"/>
         <source>Select whether you want to run the test locally</source>
         <translation>选择是否在局部运行测试</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="112"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="113"/>
         <source>Run &amp;local</source>
         <translation>局部运行(&amp;l)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="119"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="120"/>
         <source>Select whether coverage data should be collected</source>
         <translation>选择是否收集覆盖率数据</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="122"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="123"/>
         <source>C&amp;ollect coverage data</source>
         <translation>收集覆盖率数据(&amp;o)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="132"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="133"/>
         <source>Select whether old coverage data should be erased</source>
         <translation>选择是否擦除原有的覆盖率数据</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="135"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="136"/>
         <source>&amp;Erase coverage data</source>
         <translation>擦除覆盖率数据(&amp;E)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="153"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="154"/>
         <source>Progress:</source>
         <translation>进程:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="190"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="191"/>
         <source>Run:</source>
         <translation>运行:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="197"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="198"/>
         <source>Number of tests run</source>
         <translation>测试运行的数目</translation>
     </message>
     <message>
         <location filename="PyUnit/UnittestDialog.ui" line="251"/>
         <source>0</source>
-        <translation>0</translation>
-    </message>
-    <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="207"/>
+        <translation type="obsolete">0</translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="242"/>
         <source>Failures:</source>
         <translation>失败:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="214"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="249"/>
         <source>Number of test failures</source>
         <translation>测试失败的数目</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="224"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="259"/>
         <source>Errors:</source>
         <translation>错误:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="231"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="266"/>
         <source>Number of test errors</source>
         <translation>测试错误的数目</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="241"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="208"/>
         <source>Remaining:</source>
         <translation>剩余:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="248"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="215"/>
         <source>Number of tests to be run</source>
         <translation>将要运行的测试的数目</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="279"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="348"/>
         <source>Tests performed:</source>
         <translation>测试已完成:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="289"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="358"/>
         <source>Failures and errors:</source>
         <translation>失败和错误:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="296"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="365"/>
         <source>Failures and Errors list</source>
         <translation>失败和错误列表</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="299"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="368"/>
         <source>&lt;b&gt;Failures and Errors list&lt;/b&gt;
 &lt;p&gt;This list shows all failed and errored tests.
 Double clicking on an entry will show the respective traceback.&lt;/p&gt;</source>
@@ -46398,7 +46398,7 @@
 双击条目将显示相应的追踪。&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.ui" line="326"/>
+        <location filename="PyUnit/UnittestDialog.ui" line="395"/>
         <source>Idle</source>
         <translation>空闲</translation>
     </message>
@@ -46433,12 +46433,12 @@
         <translation>&lt;b&gt;中止测试&lt;/b&gt;&lt;p&gt;该按钮中止一个正在运行的单元测试。&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="98"/>
+        <location filename="PyUnit/UnittestDialog.py" line="99"/>
         <source>^Failure: </source>
         <translation>^失败:</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="99"/>
+        <location filename="PyUnit/UnittestDialog.py" line="100"/>
         <source>^Error: </source>
         <translation>^错误:</translation>
     </message>
@@ -46448,12 +46448,12 @@
         <translation type="obsolete">Python 文件 (*.py)</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="216"/>
+        <location filename="PyUnit/UnittestDialog.py" line="221"/>
         <source>You must enter a test suite file.</source>
         <translation>必须输入测试套件文件。</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="223"/>
+        <location filename="PyUnit/UnittestDialog.py" line="228"/>
         <source>Preparing Testsuite</source>
         <translation>准备测试套件</translation>
     </message>
@@ -46463,7 +46463,7 @@
         <translation type="obsolete">&lt;p&gt;无法运行测试 &lt;b&gt;%1&lt;/b&gt; 。&lt;br&gt;%2&lt;br&gt;%3&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="375"/>
+        <location filename="PyUnit/UnittestDialog.py" line="395"/>
         <source>Running</source>
         <translation>正在运行</translation>
     </message>
@@ -46488,45 +46488,90 @@
         <translation type="obsolete">错误: %1</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="479"/>
+        <location filename="PyUnit/UnittestDialog.py" line="541"/>
         <source>Show Source</source>
         <translation>显示源代码</translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="164"/>
+        <location filename="PyUnit/UnittestDialog.py" line="169"/>
         <source>Python Files (*.py);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="160"/>
+        <location filename="PyUnit/UnittestDialog.py" line="165"/>
         <source>Python3 Files ({1});;Python2 Files ({0});;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="316"/>
+        <location filename="PyUnit/UnittestDialog.py" line="330"/>
         <source>&lt;p&gt;Unable to run test &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;{1}&lt;br&gt;{2}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="393"/>
+        <location filename="PyUnit/UnittestDialog.py" line="413"/>
         <source>Ran {0} test in {1:.3f}s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="396"/>
+        <location filename="PyUnit/UnittestDialog.py" line="416"/>
         <source>Ran {0} tests in {1:.3f}s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="409"/>
+        <location filename="PyUnit/UnittestDialog.py" line="429"/>
         <source>Failure: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="PyUnit/UnittestDialog.py" line="421"/>
+        <location filename="PyUnit/UnittestDialog.py" line="442"/>
         <source>Error: {0}</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="276"/>
+        <source>Skipped:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="283"/>
+        <source>Number of tests skipped</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="293"/>
+        <source>Expected Failures:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="300"/>
+        <source>Number of tests with expected failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="310"/>
+        <source>Unexpected Successes:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.ui" line="317"/>
+        <source>Number of tests with unexpected success</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="455"/>
+        <source>    Skipped: {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="468"/>
+        <source>    Expected Failure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="PyUnit/UnittestDialog.py" line="481"/>
+        <source>    Unexpected Success</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UrlBar</name>
@@ -48917,17 +48962,17 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="Utilities/__init__.py" line="1022"/>
+        <location filename="Utilities/__init__.py" line="1037"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;可以在字符串中使用“%-代码”作为占位符。支持的代码有:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;当前编辑器的光标所在列&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;当前编辑器的文件夹&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;当前编辑器的文件名&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;当前用户的根目录&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;当前编辑器的光标所在行&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;当前项目的路径&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;当前编辑器中选择的文本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;当前用户的用户名&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;百分比符号&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1208"/>
+        <location filename="Utilities/__init__.py" line="1223"/>
         <source>Python2 interpreter not configured.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="Utilities/__init__.py" line="1254"/>
+        <location filename="Utilities/__init__.py" line="1269"/>
         <source>Python2 interpreter did not finish within 30s.</source>
         <translation type="unfinished"></translation>
     </message>

eric ide

mercurial