test(cli): create the non-ASCII Windows profile through the wide API

The Windows regression test for #2145 created its profile directory
with test_mkdirp and read the result as a boolean. test_mkdirp returns
0 on success, so the test failed as soon as the directory existed and
never reached the detection it was written to check.

Inverting the check is not enough on its own. test_mkdirp uses
cbm_mkdir, which is the narrow _mkdir on Windows. Under an ANSI code
page such as 1252 it does not create the intended name: it creates a
directory whose name is the UTF-8 bytes read as code-page characters.
The old narrow stat finds that mangled directory and the new wide
lookup correctly does not, so the test would pass without the fix and
fail with it. th_mkdir_p goes through the wide API and creates the
real name, the way a non-ASCII Windows profile actually looks.

Since 2b329fe7, Claude Code is detected from settings.json,
.claude.json or the claude CLI, through cbm_file_exists, which is
already wide on Windows; a bare .claude directory no longer marks it
as detected. The test now asserts Cursor, which is detected by its
directory alone, so the assertion goes through dir_exists, the
function this branch changes.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
This commit is contained in:
Martin Vogel committed 2026-10-20 19:30:41 +02:00
1 parent a36c6927c2
commit c21c42b4d6
1 file changed
+10 -5
+10 -5
View File
@@ -14597,19 +14597,24 @@ TEST(cli_detect_agents_finds_zed_in_roaming_appdata) {
#endif
#ifdef _WIN32
/* #2145: a profile path outside the ANSI code page must stay visible to agent
* detection. The directory is created with th_mkdir_p, which goes through the
* wide-char API: test_mkdirp uses cbm_mkdir, the narrow _mkdir on Windows,
* which would create a code-page-mangled name instead of this one. Cursor is
* detected by its directory alone, so the assertion goes through dir_exists. */
TEST(cli_detect_agents_handles_non_ascii_windows_profile) {
char home[1024];
snprintf(home, sizeof(home), "%s/cbm-用户-profile", cbm_tmpdir());
test_rmdir_r(home);
char claude_dir[1024];
snprintf(claude_dir, sizeof(claude_dir), "%s/.claude", home);
if (!test_mkdirp(claude_dir))
char cursor_dir[1024];
snprintf(cursor_dir, sizeof(cursor_dir), "%s/.cursor", home);
if (th_mkdir_p(cursor_dir) != 0)
FAIL("could not create non-ASCII Windows profile path");
cbm_detected_agents_t agents = cbm_detect_agents(home);
test_rmdir_r(home);
if (!agents.claude_code)
FAIL("Claude detection must support non-ASCII Windows profile paths");
if (!agents.cursor)
FAIL("agent detection must support non-ASCII Windows profile paths");
PASS();
}
#endif