src/eric7/Testing/Interfaces/TestExecutorBase.py

Sun, 17 Dec 2023 17:15:19 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 17 Dec 2023 17:15:19 +0100
branch
eric7
changeset 10417
c6011e501282
parent 10415
af9a6dac2611
child 10426
1150e67efb5a
permissions
-rw-r--r--

Modernized some code and converted Debug Client and Debugger source code documentation to the new style.

9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
9653
e67609152c5e Updated copyright for 2023.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
3 # Copyright (c) 2022 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the executor base class for the various testing frameworks
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 and supporting classes.
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import os
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
12
10405
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
13 from dataclasses import dataclass, field
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from enum import IntEnum
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9413
diff changeset
16 from PyQt6.QtCore import QObject, QProcess, QProcessEnvironment, pyqtSignal
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9313
diff changeset
18 from eric7 import Preferences
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
9066
a219ade50f7c Performed some refactoring to avoid possible name clashes on case-insensitive systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9064
diff changeset
21 class TestResultCategory(IntEnum):
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 Class defining the supported result categories.
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
25
9062
7f27bf3b50c3 Implemented most of the 'unittest' executor and runner.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9059
diff changeset
26 RUNNING = 0
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 FAIL = 1
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 OK = 2
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 SKIP = 3
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 PENDING = 4
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 @dataclass
9066
a219ade50f7c Performed some refactoring to avoid possible name clashes on case-insensitive systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9064
diff changeset
34 class TestResult:
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 Class containing the test result data.
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
38
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
39 category: TestResultCategory # result category
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
40 status: str # test status
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
41 name: str # test name
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
42 id: str # test id
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
43 description: str = "" # short description of test
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
44 message: str = "" # short result message
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
45 extra: list = None # additional information text
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
46 duration: float = None # test duration
10404
f7d9c31f0c38 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
47 filename: str = None # file name of a (failed) test
f7d9c31f0c38 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10069
diff changeset
48 lineno: int = None # line number of a (failed) test
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
49 subtestResult: bool = False # flag indicating the result of a subtest
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 @dataclass
9066
a219ade50f7c Performed some refactoring to avoid possible name clashes on case-insensitive systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9064
diff changeset
53 class TestConfig:
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 Class containing the test run configuration.
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
57
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
58 interpreter: str # path of the Python interpreter
10405
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
59 discover: bool = False # auto discovery flag
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
60 discoveryStart: str = "" # start directory for auto discovery
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
61 testCases: list = field(default_factory=list) # list of selected test cases
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
62 testFilename: str = "" # name of the test script
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
63 testName: str = "" # name of the test function
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
64 testMarkerExpression: str = "" # marker expression for test selection
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
65 testNamePattern: str = "" # test name pattern expression or list
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
66 failFast: bool = False # stop on first fail
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
67 failedOnly: bool = False # run failed tests only
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
68 collectCoverage: bool = False # coverage collection flag
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
69 eraseCoverage: bool = False # erase coverage data first
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
70 coverageFile: str = "" # name of the coverage data file
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
71 discoverOnly: bool = False # test discovery only
10415
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
72 venvName: str = "" # name of the virtual environment
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74
9066
a219ade50f7c Performed some refactoring to avoid possible name clashes on case-insensitive systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9064
diff changeset
75 class TestExecutorBase(QObject):
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 Base class for test framework specific implementations.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
78
10405
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
79 @signal collected(list of tuple of (str, str, str, str, int, list)) emitted after
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
80 all tests have been collected. Tuple elements are the test id, the test name,
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
81 a short description of the test, the test file name, the line number of
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
82 the test and the elements of the test path as a list.
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 @signal collectError(list of tuple of (str, str)) emitted when errors
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 are encountered during test collection. Tuple elements are the
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 test name and the error message.
9062
7f27bf3b50c3 Implemented most of the 'unittest' executor and runner.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9059
diff changeset
86 @signal startTest(tuple of (str, str, str) emitted before tests are run.
7f27bf3b50c3 Implemented most of the 'unittest' executor and runner.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9059
diff changeset
87 Tuple elements are test id, test name and short description.
9066
a219ade50f7c Performed some refactoring to avoid possible name clashes on case-insensitive systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9064
diff changeset
88 @signal testResult(TestResult) emitted when a test result is ready
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 @signal testFinished(list, str) emitted when the test has finished.
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 The elements are the list of test results and the captured output
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 of the test worker (if any).
9064
339bb8c8007d Implemented the "Rerun Failed" functionality for the new unit test interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9063
diff changeset
92 @signal testRunAboutToBeStarted() emitted just before the test run will
339bb8c8007d Implemented the "Rerun Failed" functionality for the new unit test interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9063
diff changeset
93 be started.
9062
7f27bf3b50c3 Implemented most of the 'unittest' executor and runner.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9059
diff changeset
94 @signal testRunFinished(int, float) emitted when the test run has finished.
10405
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
95 The elements are the number of tests run and the duration in seconds.
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 @signal stop() emitted when the test process is being stopped.
9062
7f27bf3b50c3 Implemented most of the 'unittest' executor and runner.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9059
diff changeset
97 @signal coverageDataSaved(str) emitted after the coverage data was saved.
7f27bf3b50c3 Implemented most of the 'unittest' executor and runner.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9059
diff changeset
98 The element is the absolute path of the coverage data file.
10405
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
99 @signal discoveryAboutToBeStarted() emitted just before the test discovery
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
100 will be started
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
101 @signal discoveryFinished(int, float) emitted when the discovery has finished.
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
102 The elements are the number of discovered tests and the duration in seconds.
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
104
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 collected = pyqtSignal(list)
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 collectError = pyqtSignal(list)
9062
7f27bf3b50c3 Implemented most of the 'unittest' executor and runner.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9059
diff changeset
107 startTest = pyqtSignal(tuple)
9066
a219ade50f7c Performed some refactoring to avoid possible name clashes on case-insensitive systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9064
diff changeset
108 testResult = pyqtSignal(TestResult)
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 testFinished = pyqtSignal(list, str)
9064
339bb8c8007d Implemented the "Rerun Failed" functionality for the new unit test interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9063
diff changeset
110 testRunAboutToBeStarted = pyqtSignal()
9062
7f27bf3b50c3 Implemented most of the 'unittest' executor and runner.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9059
diff changeset
111 testRunFinished = pyqtSignal(int, float)
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 stop = pyqtSignal()
9062
7f27bf3b50c3 Implemented most of the 'unittest' executor and runner.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9059
diff changeset
113 coverageDataSaved = pyqtSignal(str)
10405
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
114 discoveryAboutToBeStarted = pyqtSignal()
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
115 discoveryFinished = pyqtSignal(int, float)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
116
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 module = ""
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 name = ""
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 runner = ""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
120
9062
7f27bf3b50c3 Implemented most of the 'unittest' executor and runner.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9059
diff changeset
121 def __init__(self, testWidget):
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
124
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 @param testWidget reference to the unit test widget
9066
a219ade50f7c Performed some refactoring to avoid possible name clashes on case-insensitive systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9064
diff changeset
126 @type TestingWidget
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 super().__init__(testWidget)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
129
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 self.__process = None
10415
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
131 self.__debugger = None
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
132
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
133 self._language = "Python3"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
134
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 @classmethod
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 def isInstalled(cls, interpreter):
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 Class method to check whether a test framework is installed.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
139
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 The test is performed by checking, if a module loader can found.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
141
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 @param interpreter interpreter to be used for the test
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 @type str
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 @return flag indicating the test framework module is installed
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 @rtype bool
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 if cls.runner:
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 proc = QProcess()
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 proc.start(interpreter, [cls.runner, "installed"])
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 if proc.waitForFinished(3000):
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 exitCode = proc.exitCode()
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 return exitCode == 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
153
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
155
10069
435cc5875135 Corrected and checked some code style issues (unused function arguments).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
156 def getVersions(self, interpreter): # noqa: U100
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 Public method to get the test framework version and version information
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 of its installed plugins.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
160
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 @param interpreter interpreter to be used for the test
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 @type str
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 @return dictionary containing the framework name and version and the
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 list of available plugins with name and version each
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 @rtype dict
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 return {}
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
168
10069
435cc5875135 Corrected and checked some code style issues (unused function arguments).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
169 def hasCoverage(self, interpreter): # noqa: U100
9089
b48a6d0f6309 Implemented support for the 'pytest' framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9070
diff changeset
170 """
b48a6d0f6309 Implemented support for the 'pytest' framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9070
diff changeset
171 Public method to get the test framework version and version information
b48a6d0f6309 Implemented support for the 'pytest' framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9070
diff changeset
172 of its installed plugins.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
173
9089
b48a6d0f6309 Implemented support for the 'pytest' framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9070
diff changeset
174 @param interpreter interpreter to be used for the test
b48a6d0f6309 Implemented support for the 'pytest' framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9070
diff changeset
175 @type str
b48a6d0f6309 Implemented support for the 'pytest' framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9070
diff changeset
176 @return flag indicating the availability of coverage functionality
b48a6d0f6309 Implemented support for the 'pytest' framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9070
diff changeset
177 @rtype bool
9311
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
178 """
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
179 return False
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
180
10069
435cc5875135 Corrected and checked some code style issues (unused function arguments).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
181 def supportsPatterns(self, interpreter): # noqa: U100
9313
6bac6775abb2 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9311
diff changeset
182 """
6bac6775abb2 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9311
diff changeset
183 Public method to indicate the support for test filtering using test name
6bac6775abb2 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9311
diff changeset
184 patterns or a test name pattern expression.
6bac6775abb2 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9311
diff changeset
185
6bac6775abb2 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9311
diff changeset
186 @param interpreter interpreter to be used for the test
6bac6775abb2 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9311
diff changeset
187 @type str
6bac6775abb2 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9311
diff changeset
188 @return flag indicating support of markers
6bac6775abb2 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9311
diff changeset
189 @rtype bool
6bac6775abb2 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9311
diff changeset
190 """
6bac6775abb2 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9311
diff changeset
191 return False
6bac6775abb2 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9311
diff changeset
192
10069
435cc5875135 Corrected and checked some code style issues (unused function arguments).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
193 def supportsMarkers(self, interpreter): # noqa: U100
9311
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
194 """
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
195 Public method to indicate the support for test filtering using markers and/or
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
196 marker expressions.
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
197
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
198 @param interpreter interpreter to be used for the test
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
199 @type str
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
200 @return flag indicating support of markers
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
201 @rtype bool
9089
b48a6d0f6309 Implemented support for the 'pytest' framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9070
diff changeset
202 """
9311
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
203 return False
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
204
10069
435cc5875135 Corrected and checked some code style issues (unused function arguments).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
205 def getMarkers(self, interpreter, workdir): # noqa: U100
9311
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
206 """
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
207 Public method to get the list of defined markers.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
208
9311
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
209 @param interpreter interpreter to be used for the test
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
210 @type str
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
211 @param workdir name of the working directory
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
212 @type str
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
213 @return dictionary containing the marker as key and the associated description
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
214 as value
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
215 @rtype dict
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
216 """
8e588f403fd9 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
217 return {}
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
218
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 def createArguments(self, config):
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 Public method to create the arguments needed to start the test process.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
222
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 @param config configuration for the test execution
9066
a219ade50f7c Performed some refactoring to avoid possible name clashes on case-insensitive systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9064
diff changeset
224 @type TestConfig
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 @return list of process arguments
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 @rtype list of str
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 @exception NotImplementedError this method needs to be implemented by
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 derived classes
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 raise NotImplementedError
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
231
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 return []
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
233
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 def _prepareProcess(self, workDir, pythonpath):
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 Protected method to prepare a process object to be started.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
237
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 @param workDir working directory
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 @type str
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 @param pythonpath list of directories to be added to the Python path
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 @type list of str
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 @return prepared process object
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 @rtype QProcess
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 process = QProcess(self)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
246 process.setProcessChannelMode(QProcess.ProcessChannelMode.MergedChannels)
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 process.setWorkingDirectory(workDir)
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 process.finished.connect(self.finished)
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 if pythonpath:
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 env = QProcessEnvironment.systemEnvironment()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
251 currentPythonPath = env.value("PYTHONPATH", None)
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 newPythonPath = os.pathsep.join(pythonpath)
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 if currentPythonPath:
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 newPythonPath += os.pathsep + currentPythonPath
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
255 env.insert("PYTHONPATH", newPythonPath)
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 process.setProcessEnvironment(env)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
257
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 return process
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
259
10405
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
260 def discover(self, config, pythonpath):
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
261 """
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
262 Public method to start the test discovery process.
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
263
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
264 @param config configuration for the test discovery
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
265 @type TestConfig
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
266 @param pythonpath list of directories to be added to the Python path
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
267 @type list of str
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
268 @exception RuntimeError raised if the the test discovery process did not start
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
269 @exception ValueError raised if no start directory for the test discovery was
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
270 given
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
271 """
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
272 if not config.discoveryStart:
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
273 raise ValueError("No discovery start directory given.")
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
274
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
275 self.__process = self._prepareProcess(config.discoveryStart, pythonpath)
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
276 discoveryArgs = self.createArguments(config)
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
277 self.discoveryAboutToBeStarted.emit()
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
278 self.__process.start(config.interpreter, discoveryArgs)
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
279 running = self.__process.waitForStarted()
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
280 if not running:
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
281 raise RuntimeError("Test discovery process did not start.")
df7e1694d0eb Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10404
diff changeset
282
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 def start(self, config, pythonpath):
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 Public method to start the testing process.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
286
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 @param config configuration for the test execution
9066
a219ade50f7c Performed some refactoring to avoid possible name clashes on case-insensitive systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9064
diff changeset
288 @type TestConfig
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 @param pythonpath list of directories to be added to the Python path
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 @type list of str
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 @exception RuntimeError raised if the the testing process did not start
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 workDir = (
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 config.discoveryStart
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
295 if config.discover
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
296 else os.path.dirname(config.testFilename)
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 )
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 self.__process = self._prepareProcess(workDir, pythonpath)
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 testArgs = self.createArguments(config)
9064
339bb8c8007d Implemented the "Rerun Failed" functionality for the new unit test interface.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9063
diff changeset
300 self.testRunAboutToBeStarted.emit()
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 self.__process.start(config.interpreter, testArgs)
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 running = self.__process.waitForStarted()
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 if not running:
10069
435cc5875135 Corrected and checked some code style issues (unused function arguments).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
304 raise RuntimeError("Test process did not start.")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
305
10415
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
306 def startDebug(self, config, pythonpath, debugger):
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
307 """
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
308 Public method to start the test run with debugger support.
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
309
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
310 @param config configuration for the test execution
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
311 @type TestConfig
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
312 @param pythonpath list of directories to be added to the Python path
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
313 @type list of str
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
314 @param debugger refference to the debugger interface
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
315 @type DebugUI
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
316 """
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
317 workDir = (
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
318 config.discoveryStart
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
319 if config.discover
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
320 else os.path.dirname(config.testFilename)
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
321 )
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
322 testArgs = self.createArguments(config)
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
323 if pythonpath:
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
324 currentPythonPath = os.environ.get("PYTHONPATH")
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
325 newPythonPath = os.pathsep.join(pythonpath)
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
326 if currentPythonPath:
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
327 newPythonPath += os.pathsep + currentPythonPath
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10415
diff changeset
328 environment = {"PYTHONPATH": newPythonPath}
10415
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
329 else:
10417
c6011e501282 Modernized some code and converted Debug Client and Debugger source code documentation to the new style.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10415
diff changeset
330 environment = {}
10415
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
331
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
332 self.__debugger = debugger
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
333 self.__debugger.debuggingFinished.connect(self.finished)
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
334 self.testRunAboutToBeStarted.emit()
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
335
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
336 self.__debugger.debugInternalScript(
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
337 venvName=config.venvName,
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
338 scriptName=testArgs[0],
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
339 argv=testArgs[1:],
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
340 workDir=workDir,
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
341 environment=environment,
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
342 clientType=self._language,
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
343 forProject=False,
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
344 )
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
345
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 def finished(self):
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 Public method handling the unit test process been finished.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
349
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 This method should read the results (if necessary) and emit the signal
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 testFinished.
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 """
10415
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
353 if self.__debugger is not None:
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
354 self.__debugger.debuggingFinished.disconnect(self.finished)
af9a6dac2611 Testing
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10405
diff changeset
355 self.__debugger = None
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
356
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 def readAllOutput(self, process=None):
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 Public method to read all output of the test process.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
360
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 @param process reference to the process object
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 @type QProcess
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 @return test process output
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 @rtype str
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 if process is None:
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 process = self.__process
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 output = (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
369 str(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
370 process.readAllStandardOutput(),
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 Preferences.getSystem("IOEncoding"),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
372 "replace",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
373 ).strip()
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
374 if process
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
375 else ""
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 )
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 return output
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
378
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 def stopIfRunning(self):
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 """
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 Public method to stop the testing process, if it is running.
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
383 if self.__process and self.__process.state() == QProcess.ProcessState.Running:
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 self.__process.terminate()
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 self.__process.waitForFinished(2000)
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 self.__process.kill()
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 self.__process.waitForFinished(3000)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
388
9059
e7fd342f8bfc Implemented the basic functionality of the new unit test framework.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 self.stop.emit()

eric ide

mercurial