"""
Pyodide and other single-threaded Python builds will be missing the
_multiprocessing module. Test that joblib still works in this environment.
"""

import os
import subprocess
import sys


def test_missing_multiprocessing(tmp_path):
    """
    Test that import joblib works even if _multiprocessing is missing.

    pytest has already imported everything from joblib. The most reasonable way
    to test importing joblib with modified environment is to invoke a separate
    Python process. This also ensures that we don't break other tests by
    importing a bad `_multiprocessing` module.
    """
    (tmp_path / "_multiprocessing.py").write_text(
        'raise ImportError("No _multiprocessing module!")'
    )
    env = dict(os.environ)
    # For subprocess, use current sys.path with our custom version of
    # multiprocessing inserted.
    env["PYTHONPATH"] = ":".join([str(tmp_path)] + sys.path)
    subprocess.check_call(
        [
            sys.executable,
            "-c",
            "import joblib, math; "
            "joblib.Parallel(n_jobs=1)("
            "joblib.delayed(math.sqrt)(i**2) for i in range(10))",
        ],
        env=env,
    )
