36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import subprocess
 | 
						|
from pathlib import Path
 | 
						|
 | 
						|
import pytest
 | 
						|
 | 
						|
 | 
						|
# PyInstaller has been very unproactive about replacing 'imp' with 'importlib'.
 | 
						|
@pytest.mark.filterwarnings('ignore::DeprecationWarning')
 | 
						|
# It also leaks io.BytesIO()s.
 | 
						|
@pytest.mark.filterwarnings('ignore::ResourceWarning')
 | 
						|
@pytest.mark.parametrize("mode", ["--onedir", "--onefile"])
 | 
						|
@pytest.mark.slow
 | 
						|
def test_pyinstaller(mode, tmp_path):
 | 
						|
    """Compile and run pyinstaller-smoke.py using PyInstaller."""
 | 
						|
 | 
						|
    pyinstaller_cli = pytest.importorskip("PyInstaller.__main__").run
 | 
						|
 | 
						|
    source = Path(__file__).with_name("pyinstaller-smoke.py").resolve()
 | 
						|
    args = [
 | 
						|
        # Place all generated files in ``tmp_path``.
 | 
						|
        '--workpath', str(tmp_path / "build"),
 | 
						|
        '--distpath', str(tmp_path / "dist"),
 | 
						|
        '--specpath', str(tmp_path),
 | 
						|
        mode,
 | 
						|
        str(source),
 | 
						|
    ]
 | 
						|
    pyinstaller_cli(args)
 | 
						|
 | 
						|
    if mode == "--onefile":
 | 
						|
        exe = tmp_path / "dist" / source.stem
 | 
						|
    else:
 | 
						|
        exe = tmp_path / "dist" / source.stem / source.stem
 | 
						|
 | 
						|
    p = subprocess.run([str(exe)], check=True, stdout=subprocess.PIPE)
 | 
						|
    assert p.stdout.strip() == b"I made it!"
 |