@@ -123,3 +123,78 @@ def test_pep517_install_with_no_cache_dir(script, tmpdir, data):
123123 project_dir ,
124124 )
125125 result .assert_installed ('project' , editable = False )
126+
127+
128+ def make_pyproject_with_setup (tmpdir , build_system = True , set_backend = True ):
129+ project_dir = (tmpdir / 'project' ).mkdir ()
130+ setup_script = (
131+ 'from setuptools import setup\n '
132+ )
133+ expect_script_dir_on_path = True
134+ if build_system :
135+ buildsys = {
136+ 'requires' : ['setuptools' , 'wheel' ],
137+ }
138+ if set_backend :
139+ buildsys ['build-backend' ] = 'setuptools.build_meta'
140+ expect_script_dir_on_path = False
141+ project_data = pytoml .dumps ({'build-system' : buildsys })
142+ else :
143+ project_data = ''
144+
145+ if expect_script_dir_on_path :
146+ setup_script += (
147+ 'from pep517_test import __version__\n '
148+ )
149+ else :
150+ setup_script += (
151+ 'try:\n '
152+ ' import pep517_test\n '
153+ 'except ImportError:\n '
154+ ' pass\n '
155+ 'else:\n '
156+ ' raise RuntimeError("Source dir incorrectly on sys.path")\n '
157+ )
158+
159+ setup_script += (
160+ 'setup(name="pep517_test", version="0.1", packages=["pep517_test"])'
161+ )
162+
163+ project_dir .join ('pyproject.toml' ).write (project_data )
164+ project_dir .join ('setup.py' ).write (setup_script )
165+ package_dir = (project_dir / "pep517_test" ).mkdir ()
166+ package_dir .join ('__init__.py' ).write ('__version__ = "0.1"' )
167+ return project_dir , "pep517_test"
168+
169+
170+ def test_no_build_system_section (script , tmpdir , data , common_wheels ):
171+ """Check builds with setup.py, pyproject.toml, but no build-system section.
172+ """
173+ project_dir , name = make_pyproject_with_setup (tmpdir , build_system = False )
174+ result = script .pip (
175+ 'install' , '--no-cache-dir' , '--no-index' , '-f' , common_wheels ,
176+ project_dir ,
177+ )
178+ result .assert_installed (name , editable = False )
179+
180+
181+ def test_no_build_backend_entry (script , tmpdir , data , common_wheels ):
182+ """Check builds with setup.py, pyproject.toml, but no build-backend entry.
183+ """
184+ project_dir , name = make_pyproject_with_setup (tmpdir , set_backend = False )
185+ result = script .pip (
186+ 'install' , '--no-cache-dir' , '--no-index' , '-f' , common_wheels ,
187+ project_dir ,
188+ )
189+ result .assert_installed (name , editable = False )
190+
191+
192+ def test_explicit_setuptools_backend (script , tmpdir , data , common_wheels ):
193+ """Check builds with setup.py, pyproject.toml, and a build-backend entry.
194+ """
195+ project_dir , name = make_pyproject_with_setup (tmpdir )
196+ result = script .pip (
197+ 'install' , '--no-cache-dir' , '--no-index' , '-f' , common_wheels ,
198+ project_dir ,
199+ )
200+ result .assert_installed (name , editable = False )
0 commit comments