96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
		
		
			
		
	
	
			96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
|  | # -*- coding: utf-8 -*- | ||
|  | import os | ||
|  | import sys | ||
|  | import subprocess | ||
|  | from textwrap import dedent | ||
|  | 
 | ||
|  | import pytest | ||
|  | 
 | ||
|  | DIR = os.path.abspath(os.path.dirname(__file__)) | ||
|  | MAIN_DIR = os.path.dirname(os.path.dirname(DIR)) | ||
|  | 
 | ||
|  | 
 | ||
|  | @pytest.mark.parametrize("std", [11, 0]) | ||
|  | def test_simple_setup_py(monkeypatch, tmpdir, std): | ||
|  |     monkeypatch.chdir(tmpdir) | ||
|  |     monkeypatch.syspath_prepend(MAIN_DIR) | ||
|  | 
 | ||
|  |     (tmpdir / "setup.py").write_text( | ||
|  |         dedent( | ||
|  |             u"""\
 | ||
|  |             import sys | ||
|  |             sys.path.append({MAIN_DIR!r}) | ||
|  | 
 | ||
|  |             from setuptools import setup, Extension | ||
|  |             from pybind11.setup_helpers import build_ext, Pybind11Extension | ||
|  | 
 | ||
|  |             std = {std} | ||
|  | 
 | ||
|  |             ext_modules = [ | ||
|  |                 Pybind11Extension( | ||
|  |                     "simple_setup", | ||
|  |                     sorted(["main.cpp"]), | ||
|  |                     cxx_std=std, | ||
|  |                 ), | ||
|  |             ] | ||
|  | 
 | ||
|  |             cmdclass = dict() | ||
|  |             if std == 0: | ||
|  |                 cmdclass["build_ext"] = build_ext | ||
|  | 
 | ||
|  | 
 | ||
|  |             setup( | ||
|  |                 name="simple_setup_package", | ||
|  |                 cmdclass=cmdclass, | ||
|  |                 ext_modules=ext_modules, | ||
|  |             ) | ||
|  |             """
 | ||
|  |         ).format(MAIN_DIR=MAIN_DIR, std=std), | ||
|  |         encoding="ascii", | ||
|  |     ) | ||
|  | 
 | ||
|  |     (tmpdir / "main.cpp").write_text( | ||
|  |         dedent( | ||
|  |             u"""\
 | ||
|  |             #include <pybind11/pybind11.h> | ||
|  | 
 | ||
|  |             int f(int x) { | ||
|  |                 return x * 3; | ||
|  |             } | ||
|  |             PYBIND11_MODULE(simple_setup, m) { | ||
|  |                 m.def("f", &f); | ||
|  |             } | ||
|  |             """
 | ||
|  |         ), | ||
|  |         encoding="ascii", | ||
|  |     ) | ||
|  | 
 | ||
|  |     subprocess.check_call( | ||
|  |         [sys.executable, "setup.py", "build_ext", "--inplace"], | ||
|  |         stdout=sys.stdout, | ||
|  |         stderr=sys.stderr, | ||
|  |     ) | ||
|  | 
 | ||
|  |     # Debug helper printout, normally hidden | ||
|  |     for item in tmpdir.listdir(): | ||
|  |         print(item.basename) | ||
|  | 
 | ||
|  |     assert ( | ||
|  |         len([f for f in tmpdir.listdir() if f.basename.startswith("simple_setup")]) == 1 | ||
|  |     ) | ||
|  |     assert len(list(tmpdir.listdir())) == 4  # two files + output + build_dir | ||
|  | 
 | ||
|  |     (tmpdir / "test.py").write_text( | ||
|  |         dedent( | ||
|  |             u"""\
 | ||
|  |             import simple_setup | ||
|  |             assert simple_setup.f(3) == 9 | ||
|  |             """
 | ||
|  |         ), | ||
|  |         encoding="ascii", | ||
|  |     ) | ||
|  | 
 | ||
|  |     subprocess.check_call( | ||
|  |         [sys.executable, "test.py"], stdout=sys.stdout, stderr=sys.stderr | ||
|  |     ) |