From a45e77df1b0024707914a446aa89d33baa223787 Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Sun, 27 Sep 2026 22:21:26 +0200 Subject: test: make both suites pass on Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Most of these failed on Windows for reasons that had nothing to do with the code under test, which is how real Windows defects hid among them: - Read and write files as UTF-8, and talk to Node in UTF-8. read_text(), write_text() and subprocess text=True use the locale codepage, cp1252 on Windows: "é", "—" and "→" arrived as "?" or crashed, some sixty tests. Calls to PowerShell and schtasks are left alone -- they answer in the console codepage. - Import ESM harness modules by file URL (as_uri): a raw "C:\..." path is not a module specifier. - test_cli_golden: mask the tmp path in its JSON-escaped form, spell it the POSIX way, record on Linux, mask the protocol version (the recording had failed everywhere since the MNP 4.0 bump) and argparse's version-dependent quoting; point USERPROFILE at the tmp home, or `member invite` and `operator pair` wrote their codes into the developer's profile. - test_disk_io_off_loop: expect what a free loop can reach on the platform's timer, 15.6 ms on Windows, not an assumed 5 ms. - test_root_paths_are_operator_only: expect the OS's spelling of the path. - test_audio_meta_cache: find ffprobe with shutil.which. Node suite on Windows: 1489 passed, none failed. Hub suite: 3 failures left, all older than this change (two SQLite concurrency tests, one transfer resume). Co-Authored-By: Claude Opus 5.5 --- packages/meshbay-hub/tests/test_search_media_merge.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'packages/meshbay-hub/tests/test_search_media_merge.py') diff --git a/packages/meshbay-hub/tests/test_search_media_merge.py b/packages/meshbay-hub/tests/test_search_media_merge.py index 3464902..082de7e 100644 --- a/packages/meshbay-hub/tests/test_search_media_merge.py +++ b/packages/meshbay-hub/tests/test_search_media_merge.py @@ -50,7 +50,7 @@ EXPORT = re.compile(r"^export \{[^}]*\};?\s*$", re.M) def _block(path, header): """One top-level `function name(...) {` ... `}` read out of a module.""" - src = path.read_text() + src = path.read_text(encoding="utf-8") m = re.search(r"^" + re.escape(header) + r".*?^\}", src, re.M | re.S) assert m, ( f"{header} is no longer where this test reads it from in {path.name} — " @@ -60,7 +60,7 @@ def _block(path, header): def _const(name): m = re.search(r"^const " + re.escape(name) + r" = .*?;$", - SEARCH_PAGE.read_text(), re.M) + SEARCH_PAGE.read_text(encoding="utf-8"), re.M) assert m, f"{name} moved — the search-page units cannot be lifted" return m.group(0) @@ -70,7 +70,7 @@ def pipeline(): """Everything the three views need, in one script.""" return "\n".join([ "const t = (k) => k;", - EXPORT.sub("", MERGE.read_text()), + EXPORT.sub("", MERGE.read_text(encoding="utf-8")), _block(VIDEO_APP, "function underVideoRoot(entry, directories) {"), _block(VIDEO_APP, "function buildSeasons(episodes) {"), _block(VIDEO_APP, "function groupVideoEntries(entries, videoDirectories) {"), @@ -90,9 +90,9 @@ def pipeline(): def _node(tmp_path, pipeline, body): script = tmp_path / "case.js" - script.write_text(f"{pipeline}\n{body}\n") + script.write_text(f"{pipeline}\n{body}\n", encoding="utf-8") out = subprocess.run( - ["node", str(script)], capture_output=True, text=True, timeout=30) + ["node", str(script)], capture_output=True, text=True, encoding="utf-8", timeout=30) assert out.returncode == 0, out.stderr return json.loads(out.stdout) -- cgit v1.2.3