Files
VPSMaster/tests/test_i18n.py
T

59 lines
2.7 KiB
Python

import json
import re
import subprocess
import sys
import pytest
from proxydoctor.checks import Command, inspect
from proxydoctor.cli import redact
from proxydoctor.i18n import MESSAGES, translator
from test_checks import Ubuntu
def test_english_ubuntu_report_has_no_chinese_and_same_results():
host = Ubuntu()
zh = inspect(host, lang="zh")
en = inspect(host, lang="en")
assert not re.search(r"[\u4e00-\u9fff]", json.dumps(en, ensure_ascii=False))
assert en["language"] == "en"
assert [(c["id"], c["status"]) for c in zh["checks"]] == [(c["id"], c["status"]) for c in en["checks"]]
@pytest.mark.parametrize("lang", ["zh", "en"])
def test_reports_and_help_in_selected_language(lang):
base = [sys.executable, "-m", "proxydoctor"]
result = subprocess.run(base + ["check", "--lang", lang, "--json", "--public-ip", "2001:db8::123"],
capture_output=True, encoding="utf-8")
assert result.returncode in (0, 1)
data = json.loads(result.stdout)
assert data["language"] == lang
assert "2001:db8::123" not in result.stdout
assert data["checks"][0]["title"] == ("操作系统" if lang == "zh" else "Operating system")
for arguments in (["--lang", lang, "check", "--help"], ["check", "--lang=" + lang, "--help"]):
help_result = subprocess.run(base + arguments, capture_output=True, encoding="utf-8")
assert help_result.returncode == 0
assert ("代理端口" if lang == "zh" else "Intended proxy port") in help_result.stdout
error = subprocess.run(base + ["check", "--lang", lang, "--port", "0"], capture_output=True, encoding="utf-8")
assert error.returncode == 2
assert ("端口必须" if lang == "zh" else "Port must") in error.stderr
def test_success_conflict_and_firewall_branches_translate():
host = Ubuntu({("ss", "-H", "-lntu"): Command(0, "tcp LISTEN 0 5 [::]:8388 *:*\n"),
("ufw", "status"): Command(0, "Status: active"),
("nft", "list", "ruleset"): Command(0, ""),
("iptables", "-S"): Command(0, "-P INPUT ACCEPT"),
("sshd", "-T"): Command(0, "permitrootlogin yes\npasswordauthentication yes\n"),
("systemctl", "is-active", "sing-box.service"): Command(0, "active")})
en = redact(inspect(host, public_ip="8.8.8.8", lang="en"), "en")
assert not re.search(r"[\u4e00-\u9fff]", json.dumps(en, ensure_ascii=False))
assert "[IP REDACTED]" in json.dumps(en)
def test_catalog_preserves_placeholders_and_rejects_unknown_language():
for zh, en in MESSAGES.items():
assert re.findall(r"\{[^}]+\}", zh) == re.findall(r"\{[^}]+\}", en)
with pytest.raises(ValueError):
translator("fr")