emtest 0.0.3__tar.gz → 0.0.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of emtest might be problematic. Click here for more details.

emtest-0.0.5/LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ MIT No Attribution
2
+
3
+ Copyright [year] [fullname]
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so.
11
+
12
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
17
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
18
+ SOFTWARE.
@@ -101,7 +101,7 @@ express Statement of Purpose.
101
101
 
102
102
  4. Limitations and Disclaimers.
103
103
 
104
- a. No trademark or patent rights held by Affirmer are waived, abandoned,
104
+ a. No trademark rights held by Affirmer are waived, abandoned,
105
105
  surrendered, licensed or otherwise affected by this document.
106
106
  b. Affirmer offers the Work as-is and makes no representations or
107
107
  warranties of any kind concerning the Work, express, implied,
@@ -118,4 +118,4 @@ express Statement of Purpose.
118
118
  Work.
119
119
  d. Affirmer understands and acknowledges that Creative Commons is not a
120
120
  party to this document and has no duty or obligation with respect to
121
- this CC0 or use of the Work.
121
+ this CC0 or use of the Work.
emtest-0.0.5/PKG-INFO ADDED
@@ -0,0 +1,104 @@
1
+ Metadata-Version: 2.4
2
+ Name: emtest
3
+ Version: 0.0.5
4
+ Summary: Testing utilities which I find useful.
5
+ Author-email: Emendir <dev@emendir.tech>
6
+ License-Expression: MIT-0 OR CC0-1.0
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: Operating System :: OS Independent
9
+ Requires-Python: >=3.6
10
+ Description-Content-Type: text/markdown
11
+ License-File: LICENSE
12
+ License-File: LICENSE-CC0
13
+ Requires-Dist: tqdm
14
+ Dynamic: license-file
15
+
16
+ # emtest - Python Testing Utilities
17
+
18
+ A Python package providing testing utilities.
19
+
20
+ ## Features
21
+
22
+ ### 🎨 Clean Test Output for Pytest
23
+ - **MinimalReporter**: Custom pytest reporter with clean, colored output using simple symbols (✓/✗/-)
24
+ - **Configurable Output**: Toggle between minimal and standard pytest output modes
25
+
26
+ ### 🔧 Development Utilities
27
+ - **Source Path Management**: Dynamically add directories to Python path for testing source code
28
+ - **Module Source Validation**: Ensure modules are loaded from source directories (not installed packages)
29
+ - **Thread Cleanup Monitoring**: Wait for and verify proper thread cleanup in tests
30
+
31
+ ### ⚡ Enhanced Test Execution
32
+ - **Dual Execution Pattern**: Run tests both as pytest tests and standalone Python scripts
33
+ - **Breakpoint Integration**: Easy debugging with pytest's `--pdb` integration
34
+ - **Progress Indicators**: Visual progress bars for waiting operations
35
+
36
+ ## Installation
37
+
38
+ ```sh
39
+ pip install emtest
40
+ ```
41
+
42
+ ## Usage
43
+
44
+ See the [Usage docs](docs/Usage/PytestUtils.md) for explanations and a complete working example showing:
45
+ - Basic test setup with `conftest.py`
46
+ - Showing and hiding logs
47
+ - Dual execution pattern implementation
48
+ - Source loading validation
49
+ - Thread cleanup testing
50
+ - Options like minising output, python-debugger breakpoints and more
51
+
52
+ ## Documentation
53
+
54
+ - [Full Documentation](docs/README.md):
55
+ - [API-Reference](docs/API-Reference/README.html)
56
+ - Usage:
57
+ - [PytestUtils](docs/Usage/PytestUtils.md)
58
+ - [LogRecording](docs/Usage/LogRecording.md)
59
+
60
+ ## Roadmap
61
+
62
+ ## Contributing
63
+
64
+ ### Get Involved
65
+
66
+ - GitHub Discussions: if you want to share ideas
67
+ - GitHub Issues: if you find bugs, other issues, or would like to submit feature requests
68
+ - GitHub Merge Requests: if you think you know what you're doing, you're very welcome!
69
+
70
+ ### Donate
71
+
72
+ To support me in my work on this and other projects, you can make donations with the following currencies:
73
+
74
+ - **Bitcoin:** `BC1Q45QEE6YTNGRC5TSZ42ZL3MWV8798ZEF70H2DG0`
75
+ - **Ethereum:** `0xA32C3bBC2106C986317f202B3aa8eBc3063323D4`
76
+ - [Credit Card, Debit Card, Bank Transfer, Apple Pay, Google Pay, Revolut Pay)](https://checkout.revolut.com/pay/4e4d24de-26cf-4e7d-9e84-ede89ec67f32)
77
+
78
+ Donations help me:
79
+ - dedicate more time to developing and maintaining open-source projects
80
+ - cover costs for IT resources
81
+
82
+ ## About the Developer
83
+
84
+ This project is developed by a human one-man team, publishing under the name _Emendir_.
85
+ I build open technologies trying to improve our world;
86
+ learning, working and sharing under the principle:
87
+
88
+ > _Freely I have received, freely I give._
89
+
90
+ Feel welcome to join in with code contributions, discussions, ideas and more!
91
+
92
+ ## Open-Source in the Public Domain
93
+
94
+ I dedicate this project to the public domain.
95
+ It is open source and free to use, share, modify, and build upon without restrictions or conditions.
96
+
97
+ I make no patent or trademark claims over this project.
98
+
99
+ Formally, you may use this project under either the:
100
+ - [MIT No Attribution (MIT-0)](https://choosealicense.com/licenses/mit-0/) or
101
+ - [Creative Commons Zero (CC0)](https://choosealicense.com/licenses/cc0-1.0/)
102
+ licence at your choice.
103
+
104
+
emtest-0.0.5/README.md ADDED
@@ -0,0 +1,89 @@
1
+ # emtest - Python Testing Utilities
2
+
3
+ A Python package providing testing utilities.
4
+
5
+ ## Features
6
+
7
+ ### 🎨 Clean Test Output for Pytest
8
+ - **MinimalReporter**: Custom pytest reporter with clean, colored output using simple symbols (✓/✗/-)
9
+ - **Configurable Output**: Toggle between minimal and standard pytest output modes
10
+
11
+ ### 🔧 Development Utilities
12
+ - **Source Path Management**: Dynamically add directories to Python path for testing source code
13
+ - **Module Source Validation**: Ensure modules are loaded from source directories (not installed packages)
14
+ - **Thread Cleanup Monitoring**: Wait for and verify proper thread cleanup in tests
15
+
16
+ ### ⚡ Enhanced Test Execution
17
+ - **Dual Execution Pattern**: Run tests both as pytest tests and standalone Python scripts
18
+ - **Breakpoint Integration**: Easy debugging with pytest's `--pdb` integration
19
+ - **Progress Indicators**: Visual progress bars for waiting operations
20
+
21
+ ## Installation
22
+
23
+ ```sh
24
+ pip install emtest
25
+ ```
26
+
27
+ ## Usage
28
+
29
+ See the [Usage docs](docs/Usage/PytestUtils.md) for explanations and a complete working example showing:
30
+ - Basic test setup with `conftest.py`
31
+ - Showing and hiding logs
32
+ - Dual execution pattern implementation
33
+ - Source loading validation
34
+ - Thread cleanup testing
35
+ - Options like minising output, python-debugger breakpoints and more
36
+
37
+ ## Documentation
38
+
39
+ - [Full Documentation](docs/README.md):
40
+ - [API-Reference](docs/API-Reference/README.html)
41
+ - Usage:
42
+ - [PytestUtils](docs/Usage/PytestUtils.md)
43
+ - [LogRecording](docs/Usage/LogRecording.md)
44
+
45
+ ## Roadmap
46
+
47
+ ## Contributing
48
+
49
+ ### Get Involved
50
+
51
+ - GitHub Discussions: if you want to share ideas
52
+ - GitHub Issues: if you find bugs, other issues, or would like to submit feature requests
53
+ - GitHub Merge Requests: if you think you know what you're doing, you're very welcome!
54
+
55
+ ### Donate
56
+
57
+ To support me in my work on this and other projects, you can make donations with the following currencies:
58
+
59
+ - **Bitcoin:** `BC1Q45QEE6YTNGRC5TSZ42ZL3MWV8798ZEF70H2DG0`
60
+ - **Ethereum:** `0xA32C3bBC2106C986317f202B3aa8eBc3063323D4`
61
+ - [Credit Card, Debit Card, Bank Transfer, Apple Pay, Google Pay, Revolut Pay)](https://checkout.revolut.com/pay/4e4d24de-26cf-4e7d-9e84-ede89ec67f32)
62
+
63
+ Donations help me:
64
+ - dedicate more time to developing and maintaining open-source projects
65
+ - cover costs for IT resources
66
+
67
+ ## About the Developer
68
+
69
+ This project is developed by a human one-man team, publishing under the name _Emendir_.
70
+ I build open technologies trying to improve our world;
71
+ learning, working and sharing under the principle:
72
+
73
+ > _Freely I have received, freely I give._
74
+
75
+ Feel welcome to join in with code contributions, discussions, ideas and more!
76
+
77
+ ## Open-Source in the Public Domain
78
+
79
+ I dedicate this project to the public domain.
80
+ It is open source and free to use, share, modify, and build upon without restrictions or conditions.
81
+
82
+ I make no patent or trademark claims over this project.
83
+
84
+ Formally, you may use this project under either the:
85
+ - [MIT No Attribution (MIT-0)](https://choosealicense.com/licenses/mit-0/) or
86
+ - [Creative Commons Zero (CC0)](https://choosealicense.com/licenses/cc0-1.0/)
87
+ licence at your choice.
88
+
89
+
@@ -5,11 +5,12 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "emtest"
8
- version = "0.0.3"
8
+ version = "0.0.5"
9
9
  description = "Testing utilities which I find useful."
10
10
  readme = {file = "README.md", content-type = "text/markdown"}
11
11
  authors = [{ name = "Emendir" , email = "dev@emendir.tech"}]
12
- license = "CC0-1.0"
12
+ license = "MIT-0 OR CC0-1.0"
13
+ license-files = ["LICENSE", "LICENSE-CC0"]
13
14
  requires-python = ">=3.6"
14
15
  classifiers = [
15
16
  "Programming Language :: Python :: 3",
@@ -1,11 +1,11 @@
1
1
  """Rerun the orignially executed python script in pytest instead of python."""
2
+
2
3
  import os
3
4
  import sys
4
5
 
5
6
  from emtest import run_pytest
6
7
 
7
8
  # Configuration for standalone execution
8
- BREAKPOINTS = False # Set to True to enable debugger on test failures
9
9
 
10
10
  path_parts = sys.argv[0].split(os.sep)
11
11
  if not (
@@ -17,15 +17,13 @@ if not (
17
17
  )
18
18
  ):
19
19
  test_file = os.path.abspath(sys.argv[0])
20
- pytest_args=sys.argv[1:]
20
+ pytest_args = sys.argv[1:]
21
21
  # print("RERUNNING IN PYTEST:", test_file)
22
22
 
23
23
  # Use emtest's custom test runner with specific settings:
24
24
  run_pytest(
25
- test_path=test_file, # Run tests in this file
26
- breakpoints=BREAKPOINTS, # Enable/disable debugger on failures
27
- enable_print=True, # Show print statements in tests
28
- pytest_args=pytest_args
25
+ test_path=test_file, # Run tests in this file
26
+ pytest_args=pytest_args,
29
27
  )
30
28
 
31
29
  sys.exit(-1)
@@ -0,0 +1,154 @@
1
+ """In-memory log recording utilities for Python's logging framework.
2
+
3
+ This module provides a `RecordingHandler` and helper methods to
4
+ dynamically attach and detach in-memory log recorders to standard
5
+ `logging.Logger` instances. It allows recording log output programmatically
6
+ for testing, debugging, or analysis without relying on files or streams.
7
+
8
+ Example:
9
+ >>> import logging
10
+ >>> import emtest.log_recording
11
+ >>> logger = logging.getLogger("demo")
12
+ >>> logger.setLevel(logging.INFO)
13
+ >>> logger.start_recording() # Start recording logs
14
+ >>> logger.info("Hello world")
15
+ >>> logs = logger.get_recording()
16
+ >>> print(logs)
17
+ ['2025-10-18 10:00:00,000 [INFO] Hello world']
18
+ >>> logger.stop_recording() # Stop and remove recorder
19
+ """
20
+
21
+ import logging
22
+
23
+
24
+ class RecordingHandler(logging.Handler):
25
+ """A logging handler that buffers formatted log records in memory.
26
+
27
+ This handler captures each emitted log record, formats it,
28
+ and stores the resulting string in an internal list.
29
+ It is useful for unit tests or scenarios where log output
30
+ needs to be inspected programmatically.
31
+
32
+ Attributes:
33
+ formatter (logging.Formatter): The formatter used to format log messages.
34
+ _records (list[str]): Internal buffer of recorded log messages.
35
+ """
36
+
37
+ def __init__(self, formatter: logging.Formatter):
38
+ """Initialize the handler with a specific formatter.
39
+
40
+ Args:
41
+ formatter (logging.Formatter): Formatter to apply to each log record.
42
+ """
43
+ super().__init__()
44
+ self.formatter = formatter
45
+ self._records: list[str] = []
46
+
47
+ def emit(self, record: logging.LogRecord):
48
+ """Store a formatted log record in the internal buffer.
49
+
50
+ Args:
51
+ record (logging.LogRecord): The log record to handle.
52
+ """
53
+ self._records.append(self.format(record))
54
+
55
+ def get_records(self) -> list[str]:
56
+ """Retrieve the recorded log messages.
57
+
58
+ Returns:
59
+ list[str]: A copy of the list of formatted log messages.
60
+ """
61
+ return list(self._records)
62
+
63
+ def clear(self):
64
+ """Clear all recorded log messages from the buffer."""
65
+ self._records.clear()
66
+
67
+
68
+ def start_recording(self: logging.Logger, name: str | None = None):
69
+ """Start recording logs to a named recorder.
70
+
71
+ This function dynamically attaches a `RecordingHandler` to the logger.
72
+ If a recorder with the given name already exists, it does nothing.
73
+
74
+ The recorder uses the formatter from the first existing handler
75
+ if available, or falls back to a default formatter.
76
+
77
+ Args:
78
+ self (logging.Logger): The logger instance.
79
+ name (str | None): Optional name of the recorder. Defaults to `"__default__"`.
80
+
81
+ Example:
82
+ >>> logger.start_recording("test")
83
+ >>> logger.info("Message")
84
+ """
85
+ if name is None:
86
+ name = "__default__"
87
+
88
+ # Ensure the logger has a dict of recording handlers attached
89
+ if not hasattr(self, "_recording_handlers"):
90
+ self._recording_handlers = {}
91
+ if name in self._recording_handlers:
92
+ return # already recording under this name
93
+
94
+ # Use same formatter as first handler, or fallback
95
+ if self.handlers:
96
+ formatter = self.handlers[0].formatter
97
+ else:
98
+ formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(message)s")
99
+
100
+ handler = RecordingHandler(formatter)
101
+ self.addHandler(handler)
102
+ self._recording_handlers.update({name: handler})
103
+
104
+
105
+ def stop_recording(self: logging.Logger, name: str | None = None):
106
+ """Stop and remove a named recorder from the logger.
107
+
108
+ If no recorder exists for the given name, the function does nothing.
109
+
110
+ Args:
111
+ self (logging.Logger): The logger instance.
112
+ name (str | None): Optional name of the recorder to stop.
113
+ Defaults to `"__default__"`.
114
+
115
+ Example:
116
+ >>> logger.stop_recording("test")
117
+ """
118
+ if name is None:
119
+ name = "__default__"
120
+
121
+ handler = self._recording_handlers.get(name, None)
122
+ if handler:
123
+ self.removeHandler(handler)
124
+
125
+
126
+ def get_recording(self: logging.Logger, name: str | None = None) -> list[str]:
127
+ """Retrieve the recorded log messages for a named recorder.
128
+
129
+ Args:
130
+ self (logging.Logger): The logger instance.
131
+ name (str | None): Optional name of the recorder. Defaults to `"__default__"`.
132
+
133
+ Returns:
134
+ list[str]: A list of formatted log messages recorded so far.
135
+ Returns an empty list if no handler is found for the name.
136
+
137
+ Raises:
138
+ KeyError: If the recorder with the specified name does not exist.
139
+
140
+ Example:
141
+ >>> messages = logger.get_recording("test")
142
+ >>> print(messages)
143
+ """
144
+ if name is None:
145
+ name = "__default__"
146
+
147
+ handler = self._recording_handlers[name]
148
+ return handler.get_records() if handler else []
149
+
150
+
151
+ # Monkey-patch Logger with recording methods
152
+ logging.Logger.start_recording = start_recording
153
+ logging.Logger.stop_recording = stop_recording
154
+ logging.Logger.get_recording = get_recording
@@ -0,0 +1,104 @@
1
+ Metadata-Version: 2.4
2
+ Name: emtest
3
+ Version: 0.0.5
4
+ Summary: Testing utilities which I find useful.
5
+ Author-email: Emendir <dev@emendir.tech>
6
+ License-Expression: MIT-0 OR CC0-1.0
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: Operating System :: OS Independent
9
+ Requires-Python: >=3.6
10
+ Description-Content-Type: text/markdown
11
+ License-File: LICENSE
12
+ License-File: LICENSE-CC0
13
+ Requires-Dist: tqdm
14
+ Dynamic: license-file
15
+
16
+ # emtest - Python Testing Utilities
17
+
18
+ A Python package providing testing utilities.
19
+
20
+ ## Features
21
+
22
+ ### 🎨 Clean Test Output for Pytest
23
+ - **MinimalReporter**: Custom pytest reporter with clean, colored output using simple symbols (✓/✗/-)
24
+ - **Configurable Output**: Toggle between minimal and standard pytest output modes
25
+
26
+ ### 🔧 Development Utilities
27
+ - **Source Path Management**: Dynamically add directories to Python path for testing source code
28
+ - **Module Source Validation**: Ensure modules are loaded from source directories (not installed packages)
29
+ - **Thread Cleanup Monitoring**: Wait for and verify proper thread cleanup in tests
30
+
31
+ ### ⚡ Enhanced Test Execution
32
+ - **Dual Execution Pattern**: Run tests both as pytest tests and standalone Python scripts
33
+ - **Breakpoint Integration**: Easy debugging with pytest's `--pdb` integration
34
+ - **Progress Indicators**: Visual progress bars for waiting operations
35
+
36
+ ## Installation
37
+
38
+ ```sh
39
+ pip install emtest
40
+ ```
41
+
42
+ ## Usage
43
+
44
+ See the [Usage docs](docs/Usage/PytestUtils.md) for explanations and a complete working example showing:
45
+ - Basic test setup with `conftest.py`
46
+ - Showing and hiding logs
47
+ - Dual execution pattern implementation
48
+ - Source loading validation
49
+ - Thread cleanup testing
50
+ - Options like minising output, python-debugger breakpoints and more
51
+
52
+ ## Documentation
53
+
54
+ - [Full Documentation](docs/README.md):
55
+ - [API-Reference](docs/API-Reference/README.html)
56
+ - Usage:
57
+ - [PytestUtils](docs/Usage/PytestUtils.md)
58
+ - [LogRecording](docs/Usage/LogRecording.md)
59
+
60
+ ## Roadmap
61
+
62
+ ## Contributing
63
+
64
+ ### Get Involved
65
+
66
+ - GitHub Discussions: if you want to share ideas
67
+ - GitHub Issues: if you find bugs, other issues, or would like to submit feature requests
68
+ - GitHub Merge Requests: if you think you know what you're doing, you're very welcome!
69
+
70
+ ### Donate
71
+
72
+ To support me in my work on this and other projects, you can make donations with the following currencies:
73
+
74
+ - **Bitcoin:** `BC1Q45QEE6YTNGRC5TSZ42ZL3MWV8798ZEF70H2DG0`
75
+ - **Ethereum:** `0xA32C3bBC2106C986317f202B3aa8eBc3063323D4`
76
+ - [Credit Card, Debit Card, Bank Transfer, Apple Pay, Google Pay, Revolut Pay)](https://checkout.revolut.com/pay/4e4d24de-26cf-4e7d-9e84-ede89ec67f32)
77
+
78
+ Donations help me:
79
+ - dedicate more time to developing and maintaining open-source projects
80
+ - cover costs for IT resources
81
+
82
+ ## About the Developer
83
+
84
+ This project is developed by a human one-man team, publishing under the name _Emendir_.
85
+ I build open technologies trying to improve our world;
86
+ learning, working and sharing under the principle:
87
+
88
+ > _Freely I have received, freely I give._
89
+
90
+ Feel welcome to join in with code contributions, discussions, ideas and more!
91
+
92
+ ## Open-Source in the Public Domain
93
+
94
+ I dedicate this project to the public domain.
95
+ It is open source and free to use, share, modify, and build upon without restrictions or conditions.
96
+
97
+ I make no patent or trademark claims over this project.
98
+
99
+ Formally, you may use this project under either the:
100
+ - [MIT No Attribution (MIT-0)](https://choosealicense.com/licenses/mit-0/) or
101
+ - [Creative Commons Zero (CC0)](https://choosealicense.com/licenses/cc0-1.0/)
102
+ licence at your choice.
103
+
104
+
@@ -1,9 +1,11 @@
1
- LICENCE
1
+ LICENSE
2
+ LICENSE-CC0
2
3
  README.md
3
4
  pyproject.toml
4
5
  requirements.txt
5
6
  src/_auto_run_with_pytest/__init__.py
6
7
  src/emtest/__init__.py
8
+ src/emtest/log_recording.py
7
9
  src/emtest/pytest_utils.py
8
10
  src/emtest/testing_utils.py
9
11
  src/emtest.egg-info/PKG-INFO
emtest-0.0.3/PKG-INFO DELETED
@@ -1,49 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: emtest
3
- Version: 0.0.3
4
- Summary: Testing utilities which I find useful.
5
- Author-email: Emendir <dev@emendir.tech>
6
- License-Expression: CC0-1.0
7
- Classifier: Programming Language :: Python :: 3
8
- Classifier: Operating System :: OS Independent
9
- Requires-Python: >=3.6
10
- Description-Content-Type: text/markdown
11
- License-File: LICENCE
12
- Requires-Dist: tqdm
13
- Dynamic: license-file
14
-
15
- # emtest - Python Testing Utilities
16
-
17
- A Python package providing testing utilities.
18
-
19
- ## Features
20
-
21
- ### 🎨 Clean Test Output for Pytest
22
- - **MinimalReporter**: Custom pytest reporter with clean, colored output using simple symbols (✓/✗/-)
23
- - **Configurable Output**: Toggle between minimal and standard pytest output modes
24
-
25
- ### 🔧 Development Utilities
26
- - **Source Path Management**: Dynamically add directories to Python path for testing source code
27
- - **Module Source Validation**: Ensure modules are loaded from source directories (not installed packages)
28
- - **Thread Cleanup Monitoring**: Wait for and verify proper thread cleanup in tests
29
-
30
- ### ⚡ Enhanced Test Execution
31
- - **Dual Execution Pattern**: Run tests both as pytest tests and standalone Python scripts
32
- - **Breakpoint Integration**: Easy debugging with pytest's `--pdb` integration
33
- - **Progress Indicators**: Visual progress bars for waiting operations
34
-
35
- ## Installation
36
-
37
- ```sh
38
- pip install emtest
39
- ```
40
-
41
- ## Usage
42
-
43
- See the `examples/` directory for complete working examples showing:
44
- - Basic test setup with `conftest.py`
45
- - Dual execution pattern implementation
46
- - Source loading validation
47
- - Thread cleanup testing
48
-
49
-
emtest-0.0.3/README.md DELETED
@@ -1,35 +0,0 @@
1
- # emtest - Python Testing Utilities
2
-
3
- A Python package providing testing utilities.
4
-
5
- ## Features
6
-
7
- ### 🎨 Clean Test Output for Pytest
8
- - **MinimalReporter**: Custom pytest reporter with clean, colored output using simple symbols (✓/✗/-)
9
- - **Configurable Output**: Toggle between minimal and standard pytest output modes
10
-
11
- ### 🔧 Development Utilities
12
- - **Source Path Management**: Dynamically add directories to Python path for testing source code
13
- - **Module Source Validation**: Ensure modules are loaded from source directories (not installed packages)
14
- - **Thread Cleanup Monitoring**: Wait for and verify proper thread cleanup in tests
15
-
16
- ### ⚡ Enhanced Test Execution
17
- - **Dual Execution Pattern**: Run tests both as pytest tests and standalone Python scripts
18
- - **Breakpoint Integration**: Easy debugging with pytest's `--pdb` integration
19
- - **Progress Indicators**: Visual progress bars for waiting operations
20
-
21
- ## Installation
22
-
23
- ```sh
24
- pip install emtest
25
- ```
26
-
27
- ## Usage
28
-
29
- See the `examples/` directory for complete working examples showing:
30
- - Basic test setup with `conftest.py`
31
- - Dual execution pattern implementation
32
- - Source loading validation
33
- - Thread cleanup testing
34
-
35
-
@@ -1,49 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: emtest
3
- Version: 0.0.3
4
- Summary: Testing utilities which I find useful.
5
- Author-email: Emendir <dev@emendir.tech>
6
- License-Expression: CC0-1.0
7
- Classifier: Programming Language :: Python :: 3
8
- Classifier: Operating System :: OS Independent
9
- Requires-Python: >=3.6
10
- Description-Content-Type: text/markdown
11
- License-File: LICENCE
12
- Requires-Dist: tqdm
13
- Dynamic: license-file
14
-
15
- # emtest - Python Testing Utilities
16
-
17
- A Python package providing testing utilities.
18
-
19
- ## Features
20
-
21
- ### 🎨 Clean Test Output for Pytest
22
- - **MinimalReporter**: Custom pytest reporter with clean, colored output using simple symbols (✓/✗/-)
23
- - **Configurable Output**: Toggle between minimal and standard pytest output modes
24
-
25
- ### 🔧 Development Utilities
26
- - **Source Path Management**: Dynamically add directories to Python path for testing source code
27
- - **Module Source Validation**: Ensure modules are loaded from source directories (not installed packages)
28
- - **Thread Cleanup Monitoring**: Wait for and verify proper thread cleanup in tests
29
-
30
- ### ⚡ Enhanced Test Execution
31
- - **Dual Execution Pattern**: Run tests both as pytest tests and standalone Python scripts
32
- - **Breakpoint Integration**: Easy debugging with pytest's `--pdb` integration
33
- - **Progress Indicators**: Visual progress bars for waiting operations
34
-
35
- ## Installation
36
-
37
- ```sh
38
- pip install emtest
39
- ```
40
-
41
- ## Usage
42
-
43
- See the `examples/` directory for complete working examples showing:
44
- - Basic test setup with `conftest.py`
45
- - Dual execution pattern implementation
46
- - Source loading validation
47
- - Thread cleanup testing
48
-
49
-
File without changes
File without changes
File without changes