provide-testkit 0.4.3__tar.gz → 0.4.4__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.
Files changed (118) hide show
  1. {provide_testkit-0.4.3/src/provide_testkit.egg-info → provide_testkit-0.4.4}/PKG-INFO +2 -4
  2. provide_testkit-0.4.4/VERSION +1 -0
  3. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/pyproject.toml +11 -4
  4. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/cli/testing.py +1 -1
  5. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/file/temp.py +1 -1
  6. provide_testkit-0.4.4/src/provide/testkit/provide_testkit_init.pth +1 -0
  7. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/profiling/profiler.py +3 -1
  8. {provide_testkit-0.4.3 → provide_testkit-0.4.4/src/provide_testkit.egg-info}/PKG-INFO +2 -4
  9. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide_testkit.egg-info/requires.txt +1 -4
  10. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/tests/test_pth_installation.py +34 -0
  11. provide_testkit-0.4.3/VERSION +0 -1
  12. provide_testkit-0.4.3/src/provide/testkit/provide_testkit_init.pth +0 -1
  13. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/LICENSE +0 -0
  14. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/README.md +0 -0
  15. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/setup.cfg +0 -0
  16. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/__init__.py +0 -0
  17. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/__init__.py +0 -0
  18. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/__main__.py +0 -0
  19. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/_blocker.py +0 -0
  20. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/_early_init.py +0 -0
  21. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/_install_blocker.py +0 -0
  22. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/_install_pth.py +0 -0
  23. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/base/__init__.py +0 -0
  24. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/base/foundation.py +0 -0
  25. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/base/harness.py +0 -0
  26. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/base/minimal.py +0 -0
  27. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/chaos/__init__.py +0 -0
  28. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/chaos/concurrency_strategies.py +0 -0
  29. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/chaos/fixtures.py +0 -0
  30. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/chaos/io_strategies.py +0 -0
  31. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/chaos/strategies.py +0 -0
  32. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/chaos/time_strategies.py +0 -0
  33. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/cli/__init__.py +0 -0
  34. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/cli/runner.py +0 -0
  35. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/common/__init__.py +0 -0
  36. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/common/fixtures.py +0 -0
  37. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/conftest.py +0 -0
  38. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/crypto/__init__.py +0 -0
  39. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/crypto/fixtures.py +0 -0
  40. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/file/__init__.py +0 -0
  41. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/file/content_fixtures.py +0 -0
  42. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/file/directory_fixtures.py +0 -0
  43. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/file/fixtures.py +0 -0
  44. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/file/special_fixtures.py +0 -0
  45. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/hub/__init__.py +0 -0
  46. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/hub/fixtures.py +0 -0
  47. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/logger/__init__.py +0 -0
  48. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/logger/hooks.py +0 -0
  49. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/logger/mocks.py +0 -0
  50. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/logger/reset.py +0 -0
  51. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/main.py +0 -0
  52. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/mocking/__init__.py +0 -0
  53. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/mocking/fixtures.py +0 -0
  54. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/mocking/time.py +0 -0
  55. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/process/__init__.py +0 -0
  56. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/process/async_fixtures.py +0 -0
  57. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/process/fixtures.py +0 -0
  58. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/process/script_assertions.py +0 -0
  59. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/process/script_fixtures.py +0 -0
  60. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/process/subprocess_fixtures.py +0 -0
  61. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/process/system_fixtures.py +0 -0
  62. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/py.typed +0 -0
  63. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/pytest_plugin.py +0 -0
  64. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/__init__.py +0 -0
  65. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/artifacts.py +0 -0
  66. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/base.py +0 -0
  67. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/cli.py +0 -0
  68. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/complexity/__init__.py +0 -0
  69. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/complexity/analyzer.py +0 -0
  70. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/complexity/fixture.py +0 -0
  71. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/coverage/__init__.py +0 -0
  72. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/coverage/fixture.py +0 -0
  73. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/coverage/reporter.py +0 -0
  74. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/coverage/tracker.py +0 -0
  75. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/decorators.py +0 -0
  76. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/documentation/__init__.py +0 -0
  77. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/documentation/checker.py +0 -0
  78. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/documentation/fixture.py +0 -0
  79. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/profiling/__init__.py +0 -0
  80. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/profiling/fixture.py +0 -0
  81. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/report.py +0 -0
  82. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/runner.py +0 -0
  83. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/security/__init__.py +0 -0
  84. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/security/fixture.py +0 -0
  85. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/security/gitleaks_scanner.py +0 -0
  86. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/security/pip_audit_scanner.py +0 -0
  87. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/security/safety_scanner.py +0 -0
  88. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/security/scanner.py +0 -0
  89. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/security/semgrep_scanner.py +0 -0
  90. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/quality/security/trufflehog_scanner.py +0 -0
  91. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/streams/__init__.py +0 -0
  92. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/streams/testing.py +0 -0
  93. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/threading/__init__.py +0 -0
  94. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/threading/basic_fixtures.py +0 -0
  95. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/threading/data_fixtures.py +0 -0
  96. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/threading/execution_fixtures.py +0 -0
  97. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/threading/fixtures.py +0 -0
  98. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/threading/sync_fixtures.py +0 -0
  99. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/time/__init__.py +0 -0
  100. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/time/classes.py +0 -0
  101. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/time/controlled.py +0 -0
  102. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/time/fixtures.py +0 -0
  103. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/time/freezing.py +0 -0
  104. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/time/measurement.py +0 -0
  105. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/time/mocking.py +0 -0
  106. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/time/rate_limiting.py +0 -0
  107. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/transport/__init__.py +0 -0
  108. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/transport/fixtures.py +0 -0
  109. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/utils/__init__.py +0 -0
  110. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/utils/environment.py +0 -0
  111. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide/testkit/utils/temp_env.py +0 -0
  112. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide_testkit.egg-info/SOURCES.txt +0 -0
  113. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide_testkit.egg-info/dependency_links.txt +0 -0
  114. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide_testkit.egg-info/entry_points.txt +0 -0
  115. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/src/provide_testkit.egg-info/top_level.txt +0 -0
  116. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/tests/test_async_fixtures.py +0 -0
  117. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/tests/test_early_init.py +0 -0
  118. {provide_testkit-0.4.3 → provide_testkit-0.4.4}/tests/test_placeholder.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: provide-testkit
3
- Version: 0.4.3
3
+ Version: 0.4.4
4
4
  Summary: Testing utilities and fixtures for the provide ecosystem.
5
5
  Author-email: Tim Perkins <code@tim.life>
6
6
  Maintainer-email: "provide.io" <code@provide.io>
@@ -116,8 +116,6 @@ Requires-Dist: pyyaml; extra == "utils"
116
116
  Requires-Dist: reuse; extra == "utils"
117
117
  Requires-Dist: tabulate; extra == "utils"
118
118
  Requires-Dist: sapp; extra == "utils"
119
- Provides-Extra: fuzzing
120
- Requires-Dist: pynguin; extra == "fuzzing"
121
119
  Provides-Extra: security
122
120
  Requires-Dist: bandit; extra == "security"
123
121
  Requires-Dist: safety; extra == "security"
@@ -129,7 +127,7 @@ Requires-Dist: provide-testkit[grpc,standard,typecheck]>=0.4.0; extra == "grpc-d
129
127
  Provides-Extra: pyvider-dev
130
128
  Requires-Dist: provide-testkit[advanced-testing,build,grpc,profiling,security,standard,typecheck]>=0.4.0; extra == "pyvider-dev"
131
129
  Provides-Extra: all
132
- Requires-Dist: provide-testkit[advanced-testing,build,crypto,docs,fuzzing,grpc,process,profiling,quality,security,transport,typecheck,utils]>=0.4.0; extra == "all"
130
+ Requires-Dist: provide-testkit[advanced-testing,build,crypto,docs,grpc,process,profiling,quality,security,transport,typecheck,utils]>=0.4.0; extra == "all"
133
131
  Provides-Extra: dev
134
132
  Requires-Dist: provide-testkit[advanced-testing,quality]>=0.4.0; extra == "dev"
135
133
  Provides-Extra: docs-standalone
@@ -0,0 +1 @@
1
+ 0.4.4
@@ -194,9 +194,16 @@ utils = [
194
194
  ]
195
195
 
196
196
  # Fuzzing and test generation (no upper bounds - use latest)
197
- fuzzing = [
198
- "pynguin",
199
- ]
197
+ # `fuzzing` (pynguin) is gone: it could not be installed, on any Python, for as
198
+ # long as this project has required pytest 9.
199
+ #
200
+ # pynguin >=0.46 requires pytest>=8.3.5,<9.0.0, which this project's own
201
+ # pytest>=9.0.2 rules out. The only pynguin loose enough to coexist with pytest 9
202
+ # is 0.6.3, from 2021, which depends on jellyfish 0.11.2 -- a release with no
203
+ # cp313 wheels, so it builds from an sdist whose pyproject.toml declares neither
204
+ # project.version nor dynamic, which uv refuses to parse. Both ends of the range
205
+ # are therefore unavailable and the extra resolved to something no `uv sync`
206
+ # could install. Restore it when pynguin supports pytest 9.
200
207
 
201
208
  # Comprehensive security scanning (no upper bounds - use latest)
202
209
  security = [
@@ -224,7 +231,7 @@ pyvider-dev = [
224
231
  ]
225
232
 
226
233
  all = [
227
- "provide-testkit[quality,typecheck,advanced-testing,profiling,transport,crypto,process,grpc,build,docs,utils,security,fuzzing]>=0.4.0",
234
+ "provide-testkit[quality,typecheck,advanced-testing,profiling,transport,crypto,process,grpc,build,docs,utils,security]>=0.4.0",
228
235
  ]
229
236
 
230
237
  dev = [
@@ -124,7 +124,7 @@ def temp_config_file(
124
124
  f.write(f"{key} = {value}\n")
125
125
  elif format == "yaml":
126
126
  try:
127
- import yaml # type: ignore[import-untyped]
127
+ import yaml
128
128
 
129
129
  yaml.safe_dump(content, f)
130
130
  except ImportError as e:
@@ -107,7 +107,7 @@ class TempFileManager:
107
107
  ImportError: If PyYAML is not available.
108
108
  """
109
109
  try:
110
- import yaml # type: ignore[import-untyped]
110
+ import yaml
111
111
  except ImportError as e:
112
112
  raise ImportError("PyYAML required for YAML file creation") from e
113
113
 
@@ -0,0 +1 @@
1
+ import os, sys; os.getenv("TESTKIT_PTH_LOG") and sys.stderr.write("\U0001F50C PTH FILE: Loading provide_testkit_init.pth\n") and sys.stderr.flush(); exec("try:\n import provide.testkit._early_init\n if os.getenv('TESTKIT_PTH_LOG'): sys.stderr.write('\\U0001F50C PTH FILE: Loaded _early_init successfully\\n'); sys.stderr.flush()\nexcept ImportError:\n pass # Package uninstalled, silently skip\n")
@@ -25,7 +25,9 @@ try:
25
25
  MEMRAY_AVAILABLE = True
26
26
  except ImportError:
27
27
  MEMRAY_AVAILABLE = False
28
- memray = None
28
+ # memray is an optional dependency; mypy resolves the module when it is
29
+ # installed, so the sentinel needs the narrowing suppressed explicitly.
30
+ memray = None # type: ignore[assignment]
29
31
 
30
32
  from ..base import QualityResult, QualityToolError
31
33
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: provide-testkit
3
- Version: 0.4.3
3
+ Version: 0.4.4
4
4
  Summary: Testing utilities and fixtures for the provide ecosystem.
5
5
  Author-email: Tim Perkins <code@tim.life>
6
6
  Maintainer-email: "provide.io" <code@provide.io>
@@ -116,8 +116,6 @@ Requires-Dist: pyyaml; extra == "utils"
116
116
  Requires-Dist: reuse; extra == "utils"
117
117
  Requires-Dist: tabulate; extra == "utils"
118
118
  Requires-Dist: sapp; extra == "utils"
119
- Provides-Extra: fuzzing
120
- Requires-Dist: pynguin; extra == "fuzzing"
121
119
  Provides-Extra: security
122
120
  Requires-Dist: bandit; extra == "security"
123
121
  Requires-Dist: safety; extra == "security"
@@ -129,7 +127,7 @@ Requires-Dist: provide-testkit[grpc,standard,typecheck]>=0.4.0; extra == "grpc-d
129
127
  Provides-Extra: pyvider-dev
130
128
  Requires-Dist: provide-testkit[advanced-testing,build,grpc,profiling,security,standard,typecheck]>=0.4.0; extra == "pyvider-dev"
131
129
  Provides-Extra: all
132
- Requires-Dist: provide-testkit[advanced-testing,build,crypto,docs,fuzzing,grpc,process,profiling,quality,security,transport,typecheck,utils]>=0.4.0; extra == "all"
130
+ Requires-Dist: provide-testkit[advanced-testing,build,crypto,docs,grpc,process,profiling,quality,security,transport,typecheck,utils]>=0.4.0; extra == "all"
133
131
  Provides-Extra: dev
134
132
  Requires-Dist: provide-testkit[advanced-testing,quality]>=0.4.0; extra == "dev"
135
133
  Provides-Extra: docs-standalone
@@ -17,7 +17,7 @@ pytest-testmon
17
17
  pytest-json-report
18
18
 
19
19
  [all]
20
- provide-testkit[advanced-testing,build,crypto,docs,fuzzing,grpc,process,profiling,quality,security,transport,typecheck,utils]>=0.4.0
20
+ provide-testkit[advanced-testing,build,crypto,docs,grpc,process,profiling,quality,security,transport,typecheck,utils]>=0.4.0
21
21
 
22
22
  [build]
23
23
  hatch
@@ -62,9 +62,6 @@ pyyaml
62
62
  [docs-standalone]
63
63
  provide-testkit[docs]>=0.4.0
64
64
 
65
- [fuzzing]
66
- pynguin
67
-
68
65
  [grpc]
69
66
  grpc-stubs
70
67
  grpcio>=1.76.0
@@ -38,6 +38,40 @@ class TestPthFileInstallation:
38
38
  assert "import provide.testkit._early_init" in content, ".pth file should import _early_init module"
39
39
  assert "TESTKIT_PTH_LOG" in content, ".pth file should support TESTKIT_PTH_LOG for debugging"
40
40
 
41
+ def test_pth_file_is_ascii(self) -> None:
42
+ """Verify the .pth file contains no non-ASCII bytes.
43
+
44
+ site.py reads .pth files with the locale's encoding, which is ASCII under
45
+ the C locale. A single non-ASCII byte therefore aborts interpreter
46
+ startup for every program in the environment, before any user code runs:
47
+
48
+ Fatal Python error: init_import_site: Failed to import the site module
49
+ UnicodeDecodeError: 'ascii' codec can't decode byte 0xf0
50
+
51
+ The debug messages still carry an emoji; it is written as a \\U escape so
52
+ the file itself stays ASCII and the escape is resolved when the line is
53
+ executed.
54
+ """
55
+ testkit_root = Path(__file__).parent.parent
56
+ pth_file = testkit_root / "src" / "provide" / "testkit" / "provide_testkit_init.pth"
57
+
58
+ raw = pth_file.read_bytes()
59
+ offending = [(index, byte) for index, byte in enumerate(raw) if byte > 0x7F]
60
+
61
+ assert not offending, f".pth file must be ASCII; non-ASCII bytes at {offending}"
62
+
63
+ def test_pth_file_keeps_its_emoji_as_an_escape(self) -> None:
64
+ """Verify the ASCII rule was met by escaping the emoji, not deleting it."""
65
+ testkit_root = Path(__file__).parent.parent
66
+ pth_file = testkit_root / "src" / "provide" / "testkit" / "provide_testkit_init.pth"
67
+
68
+ content = pth_file.read_text(encoding="ascii")
69
+ resolved = content.encode("ascii").decode("unicode_escape")
70
+
71
+ assert "\N{ELECTRIC PLUG}" in resolved, (
72
+ ".pth debug messages should still carry the plug emoji, written as an escape"
73
+ )
74
+
41
75
  def test_pth_file_installed_in_site_packages(self) -> None:
42
76
  """Verify .pth file is installed to site-packages after package install."""
43
77
  # Get site-packages directories
@@ -1 +0,0 @@
1
- 0.4.3
@@ -1 +0,0 @@
1
- import os, sys; os.getenv("TESTKIT_PTH_LOG") and sys.stderr.write("🔌 PTH FILE: Loading provide_testkit_init.pth\n") and sys.stderr.flush(); exec("try:\n import provide.testkit._early_init\n if os.getenv('TESTKIT_PTH_LOG'): sys.stderr.write('🔌 PTH FILE: Loaded _early_init successfully\\n'); sys.stderr.flush()\nexcept ImportError:\n pass # Package uninstalled, silently skip\n")
File without changes