# -*- coding: utf-8 -*- r'''把 verify_all.ps1 里的「锁屏检测 + SKIP」删掉。 == 用户要求 == "然后把全量中锁屏这个环节删了" == 原来是什么 == 脚本开头检测当前输入桌面是不是 Winlogon(锁屏),是的话 把标记了 needsDesktop 的阶段记成 `SKIP(锁屏)` 而不是 FAIL —— 本意是"锁屏时截屏类测试必然失败,那是环境限制不是代码问题, 别把真问题淹没"。 == 为什么删 == 那个好意带来一个更糟的后果:**锁屏时那几关根本不跑,于是回归 "全绿"了但实际什么都没验**。用户看到"全部通过"会以为没问题, 而关键的 Java 端到端、协议回归那几关其实一跳而过。 **"因为环境不满足所以不测"比"测了发现失败"更危险** —— 失败至少是信息,跳过是假的安全感。 == 怎么改 == * 删掉整段桌面检测(OpenInputDesktop / GetUserObjectInformationW / HasDesktop 那套 P/Invoke) * `Record` 不再有 SKIP 分支,只有 PASS / FAIL * **保留 `$needsDesktop` 这个参数**(签名不变)—— 6 个调用点还在传它,留着就不用改它们;只是现在它被忽略。 为什么不把那 6 处也改掉:改调用点增加出错面,而参数留着完全无害。 以后真要重新引入"某些阶段在特定环境下跳过",签名还在。 == 顺带 == `_tests/hidden_desktop.py` 那套(在隐藏桌面上跑窗口类测试) **不动** —— 那是为了让测试不打扰用户,跟"锁屏跳过"是两回事。 ''' from __future__ import annotations import sys from pathlib import Path ROOT = Path(__file__).resolve().parent.parent VERIFY = ROOT / "_tests" / "verify_all.ps1" OLD_START = "# 当前会话是不是锁屏 / 没有交互桌面?" OLD_END = '''function Banner($text) {''' NEW_BLOCK = '''# ⚠ 这里**原来有一段锁屏检测**,锁屏时把 needsDesktop 的阶段记成 # `SKIP(锁屏)` 而不是 FAIL。**已经按用户要求删掉了。** # # 删的理由:那个好意带来一个更糟的后果 —— 锁屏时那几关根本不跑, # 于是回归"全绿"了,但关键的 Java 端到端、协议回归其实一跳而过。 # 用户看到"全部通过"会以为没问题。 # # **"因为环境不满足所以不测"比"测了发现失败"更危险**: # 失败至少是信息,跳过是假的安全感。 # # 现在一律真跑、真记。环境不合适导致失败的话,就去修环境或改测试, # 而不是让它变成 SKIP。 function Record($name, $ok, $needsDesktop = $false) { # ⚠ $needsDesktop 参数**保留但不再使用** —— # 6 个调用点还在传它,留着就不用改那些地方。 # 以后真要重新引入"特定环境下跳过",签名已经在了。 $script:results += [pscustomobject]@{ 项目 = $name; 结果 = $(if ($ok) { "PASS" } else { "FAIL" }) } } ''' def main() -> int: print("=" * 58) print(" 删掉全量里的锁屏 SKIP") print("=" * 58) print() raw = VERIFY.read_bytes() bom = raw.startswith(b"\xef\xbb\xbf") t = raw.decode("utf-8-sig") if "已经按用户要求删掉了" in t: print(" 已经删过了") return 0 i = t.find(OLD_START) j = t.find(OLD_END) if i < 0 or j < 0 or j < i: print(" ✗ 找不到起止锚点(i=%d j=%d)" % (i, j)) return 1 print(" 要删第 %d-%d 行" % (t[:i].count("\n") + 1, t[:j].count("\n") + 1)) # 往上吃掉紧邻的 $script:results = @() 之后的空行(把那行留着) t = t[:i] + NEW_BLOCK + t[j:] VERIFY.write_bytes((b"\xef\xbb\xbf" if bom else b"") + t.encode("utf-8")) print(" ✓ 删掉了锁屏检测和 SKIP 分支") # 复核 back = VERIFY.read_text(encoding="utf-8-sig") checks = [ ("没有 desktopAvailable", "desktopAvailable" not in back), ("没有 SKIP(锁屏)", "SKIP(锁屏)" not in back), ("没有 OpenInputDesktop", "OpenInputDesktop" not in back), ("没有 Winlogon", "Winlogon" not in back), ("Record 还在", "function Record(" in back), ("$needsDesktop 参数保留", "$needsDesktop = $false" in back), ("Banner 还在", "function Banner(" in back), ] print() for label, ok in checks: print(" [%s] %s" % ("PASS" if ok else "FAIL", label)) return 0 if all(ok for _l, ok in checks) else 1 if __name__ == "__main__": sys.exit(main())