mirror of
https://github.com/github/spec-kit.git
synced 2026-07-03 12:28:06 +08:00
* Initial plan * fix: replace non-ASCII chars in PS1 files, add encoding regression tests, fix ANSI stripping in tests, update docs --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
"""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
|