aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Ai Hoshino <ambiguous404@gmail.com> 2023-07-25 20:49:48 +0800
committerGravatar GitHub <noreply@github.com> 2023-07-25 05:49:48 -0700
commit0297cb15271e309acb543896f24f4ddac9833428 (patch)
treee979b2a5d84c42ff74d09a04d9d7e1534728c222
parent4209703b351f8155aff411d52927e1d72165770a (diff)
downloadbun-0297cb15271e309acb543896f24f4ddac9833428.tar.gz
bun-0297cb15271e309acb543896f24f4ddac9833428.tar.zst
bun-0297cb15271e309acb543896f24f4ddac9833428.zip
fix the encoding of `dirname`'s return value. (#3799)
-rw-r--r--src/bun.js/node/types.zig2
-rw-r--r--test/js/node/path/path.test.js39
2 files changed, 40 insertions, 1 deletions
diff --git a/src/bun.js/node/types.zig b/src/bun.js/node/types.zig
index bc2144095..23d693d69 100644
--- a/src/bun.js/node/types.zig
+++ b/src/bun.js/node/types.zig
@@ -1782,7 +1782,7 @@ pub const Path = struct {
else
@This().dirnamePosix(base_slice);
- return JSC.ZigString.init(out).toValueGC(globalThis);
+ return JSC.ZigString.init(out).withEncoding().toValueGC(globalThis);
}
pub fn extname(globalThis: *JSC.JSGlobalObject, _: bool, args_ptr: [*]JSC.JSValue, args_len: u16) callconv(.C) JSC.JSValue {
if (comptime is_bindgen) return JSC.JSValue.jsUndefined();
diff --git a/test/js/node/path/path.test.js b/test/js/node/path/path.test.js
index deab41796..8f32bdb2c 100644
--- a/test/js/node/path/path.test.js
+++ b/test/js/node/path/path.test.js
@@ -66,6 +66,20 @@ describe("dirname", () => {
expect(path.posix.dirname("\\a")).toBe(".");
expect(path.posix.dirname("a")).toBe(".");
expect(path.posix.dirname("/a/b//c")).toBe("/a/b/");
+ expect(path.posix.dirname("/文檔")).toBe("/");
+ expect(path.posix.dirname("/文檔/")).toBe("/");
+ expect(path.posix.dirname("/文檔/新建文件夾")).toBe("/文檔");
+ expect(path.posix.dirname("/文檔/新建文件夾/")).toBe("/文檔");
+ expect(path.posix.dirname("//新建文件夾")).toBe("//");
+ expect(path.posix.dirname("///新建文件夾")).toBe("//");
+ expect(path.posix.dirname("////新建文件夾")).toBe("///");
+ expect(path.posix.dirname("/////新建文件夾")).toBe("////");
+ expect(path.posix.dirname("新建文件夾")).toBe(".");
+ expect(path.posix.dirname("新建文件夾/")).toBe(".");
+ expect(path.posix.dirname("文檔/新建文件夾")).toBe("文檔");
+ expect(path.posix.dirname("文檔/")).toBe(".");
+ expect(path.posix.dirname("文檔///新建文件夾")).toBe("文檔//");
+ expect(path.posix.dirname("文檔//新建文件夾")).toBe("文檔/");
});
it("path.win32.dirname", () => {
expect(path.win32.dirname("c:\\")).toBe("c:\\");
@@ -105,6 +119,31 @@ describe("dirname", () => {
expect(path.win32.dirname("/")).toBe("/");
expect(path.win32.dirname("////")).toBe("/");
expect(path.win32.dirname("foo")).toBe(".");
+ expect(path.win32.dirname("c:\\")).toBe("c:\\");
+ expect(path.win32.dirname("c:\\文檔")).toBe("c:\\");
+ expect(path.win32.dirname("c:\\文檔\\")).toBe("c:\\");
+ expect(path.win32.dirname("c:\\文檔\\新建文件夾")).toBe("c:\\文檔");
+ expect(path.win32.dirname("c:\\文檔\\新建文件夾\\")).toBe("c:\\文檔");
+ expect(path.win32.dirname("c:\\文檔\\新建文件夾\\baz")).toBe("c:\\文檔\\新建文件夾");
+ expect(path.win32.dirname("c:\\文檔 1\\新建文件夾")).toBe("c:\\文檔 1");
+ expect(path.win32.dirname("c:\\\\文檔")).toBe("c:\\");
+ expect(path.win32.dirname("\\文檔")).toBe("\\");
+ expect(path.win32.dirname("\\文檔\\")).toBe("\\");
+ expect(path.win32.dirname("\\文檔\\新建文件夾")).toBe("\\文檔");
+ expect(path.win32.dirname("\\文檔\\新建文件夾\\")).toBe("\\文檔");
+ expect(path.win32.dirname("\\文檔\\新建文件夾\\baz")).toBe("\\文檔\\新建文件夾");
+ expect(path.win32.dirname("\\文檔 1\\baz")).toBe("\\文檔 1");
+ expect(path.win32.dirname("c:")).toBe("c:");
+ expect(path.win32.dirname("c:文檔")).toBe("c:");
+ expect(path.win32.dirname("c:文檔\\")).toBe("c:");
+ expect(path.win32.dirname("c:文檔\\新建文件夾")).toBe("c:文檔");
+ expect(path.win32.dirname("c:文檔\\新建文件夾\\")).toBe("c:文檔");
+ expect(path.win32.dirname("c:文檔\\新建文件夾\\baz")).toBe("c:文檔\\新建文件夾");
+ expect(path.win32.dirname("c:文檔 1\\baz")).toBe("c:文檔 1");
+ expect(path.win32.dirname("/文檔/新建文件夾/")).toBe("/文檔");
+ expect(path.win32.dirname("/文檔/新建文件夾")).toBe("/文檔");
+ expect(path.win32.dirname("/文檔")).toBe("/");
+ expect(path.win32.dirname("新建文件夾")).toBe(".");
});
});