chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
"""Regression tests for PowerShell 5.1 compatibility (GitHub issue #2680).
|
||||
|
||||
PowerShell 5.1 (built-in on Windows) defaults to the system's legacy encoding
|
||||
when reading .ps1 files. Non-ASCII characters in UTF-8-encoded scripts cause
|
||||
parse errors because multi-byte sequences are misinterpreted as individual bytes.
|
||||
|
||||
These tests ensure that all shipped .ps1 files remain ASCII-only so they work
|
||||
on both PowerShell 5.1 and 7+.
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parent.parent
|
||||
|
||||
# All directories that contain shipped PowerShell scripts.
|
||||
_PS1_DIRS = [
|
||||
REPO_ROOT / "scripts" / "powershell",
|
||||
REPO_ROOT / "extensions" / "git" / "scripts" / "powershell",
|
||||
]
|
||||
|
||||
|
||||
def _collect_ps1_files():
|
||||
"""Yield all .ps1 files under the known script directories."""
|
||||
for d in _PS1_DIRS:
|
||||
if d.is_dir():
|
||||
yield from sorted(d.rglob("*.ps1"))
|
||||
|
||||
|
||||
_PS1_FILES = list(_collect_ps1_files())
|
||||
|
||||
|
||||
@pytest.mark.parametrize("ps1_file", _PS1_FILES, ids=lambda p: str(p.relative_to(REPO_ROOT)))
|
||||
def test_ps1_file_is_ascii_only(ps1_file: Path):
|
||||
"""Every .ps1 file must contain only ASCII characters (PS 5.1 compat)."""
|
||||
content = ps1_file.read_bytes()
|
||||
non_ascii = [
|
||||
(i + 1, byte)
|
||||
for i, byte in enumerate(content)
|
||||
if byte > 127
|
||||
]
|
||||
assert not non_ascii, (
|
||||
f"{ps1_file.relative_to(REPO_ROOT)} contains non-ASCII bytes "
|
||||
f"(PowerShell 5.1 incompatible): "
|
||||
f"first at byte offset {non_ascii[0][0]} (0x{non_ascii[0][1]:02x})"
|
||||
)
|
||||
|
||||
|
||||
def test_ps1_files_discovered():
|
||||
"""Sanity check: at least the known script files are found."""
|
||||
names = {p.name for p in _PS1_FILES}
|
||||
assert "common.ps1" in names
|
||||
assert "initialize-repo.ps1" in names
|
||||
Reference in New Issue
Block a user