10
10
from subprocess import run
11
11
from tempfile import TemporaryDirectory
12
12
13
- from build import ProjectBuilder
13
+ from build import ProjectBuilder , BuildBackendException
14
14
from build .env import DefaultIsolatedEnv
15
15
from twisted .python .filepath import FilePath
16
16
from twisted .trial .unittest import TestCase
@@ -116,10 +116,44 @@ def test_setuptools_no_package(self):
116
116
117
117
self .assertEqual (metadata .version ("example_no_package" ), "0.0.0" )
118
118
119
+ def test_setuptools_missing_versionpy (self ):
120
+ """
121
+ The setuptools plugin is a no-op when the ``_version.py`` file
122
+ isn't present.
123
+ """
124
+ src = FilePath (self .mktemp ())
125
+ src .makedirs ()
126
+ src .child ("setup.py" ).setContent (
127
+ b"""\
128
+ from setuptools import setup
129
+
130
+ setup(
131
+ name="example_missing_versionpy",
132
+ version="0.0.1",
133
+ packages=["example_missing_versionpy"],
134
+ zip_safe=False,
135
+ )
136
+ """
137
+ )
138
+ src .child ("pyproject.toml" ).setContent (
139
+ b"""\
140
+ [tool.incremental]
141
+ name = "example_missing_versionpy"
142
+ """
143
+ )
144
+ package_dir = src .child ("example_missing_versionpy" )
145
+ package_dir .makedirs ()
146
+ package_dir .child ("__init__.py" ).setContent (b"" )
147
+ # No _version.py exists
148
+
149
+ build_and_install (src )
150
+
151
+ # The version from setup.py wins.
152
+ self .assertEqual (metadata .version ("example_missing_versionpy" ), "0.0.1" )
153
+
119
154
def test_setuptools_bad_versionpy (self ):
120
155
"""
121
- The setuptools plugin is a no-op when reading the version
122
- from ``_version.py`` fails.
156
+ The setuptools plugin surfaces syntax errors in ``_version.py``.
123
157
"""
124
158
src = FilePath (self .mktemp ())
125
159
src .makedirs ()
@@ -145,10 +179,9 @@ def test_setuptools_bad_versionpy(self):
145
179
package_dir .makedirs ()
146
180
package_dir .child ("_version.py" ).setContent (b"bad version.py" )
147
181
148
- build_and_install (src )
149
-
150
- # The version from setup.py wins.
151
- self .assertEqual (metadata .version ("example_bad_versionpy" ), "0.1.2" )
182
+ with self .assertRaises (BuildBackendException ):
183
+ # This also spews a SyntaxError traceback to stdout.
184
+ build_and_install (src )
152
185
153
186
def test_hatchling_get_version (self ):
154
187
"""
0 commit comments