Skip to content

Commit 8fa6ca6

Browse files
authored
Merge pull request #8879 from squeek502/dot-and-dotdot-test
Add . and .. tests for std.fs functions
2 parents b3e4832 + 7801945 commit 8fa6ca6

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

lib/std/fs/test.zig

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -932,3 +932,75 @@ test "walker" {
932932
try testing.expectEqualStrings(expected_dir_name, try fs.path.relative(allocator, tmp_path, entry.path));
933933
}
934934
}
935+
936+
test ". and .. in fs.Dir functions" {
937+
if (builtin.os.tag == .wasi) return error.SkipZigTest;
938+
939+
var tmp = tmpDir(.{});
940+
defer tmp.cleanup();
941+
942+
try tmp.dir.makeDir("./subdir");
943+
try tmp.dir.access("./subdir", .{});
944+
var created_subdir = try tmp.dir.openDir("./subdir", .{});
945+
created_subdir.close();
946+
947+
const created_file = try tmp.dir.createFile("./subdir/../file", .{});
948+
created_file.close();
949+
try tmp.dir.access("./subdir/../file", .{});
950+
951+
try tmp.dir.copyFile("./subdir/../file", tmp.dir, "./subdir/../copy", .{});
952+
try tmp.dir.rename("./subdir/../copy", "./subdir/../rename");
953+
const renamed_file = try tmp.dir.openFile("./subdir/../rename", .{});
954+
renamed_file.close();
955+
try tmp.dir.deleteFile("./subdir/../rename");
956+
957+
try tmp.dir.writeFile("./subdir/../update", "something");
958+
const prev_status = try tmp.dir.updateFile("./subdir/../file", tmp.dir, "./subdir/../update", .{});
959+
try testing.expectEqual(fs.PrevStatus.stale, prev_status);
960+
961+
try tmp.dir.deleteDir("./subdir");
962+
}
963+
964+
test ". and .. in absolute functions" {
965+
if (builtin.os.tag == .wasi) return error.SkipZigTest;
966+
967+
var tmp = tmpDir(.{});
968+
defer tmp.cleanup();
969+
970+
var arena = ArenaAllocator.init(testing.allocator);
971+
defer arena.deinit();
972+
const allocator = &arena.allocator;
973+
974+
const base_path = blk: {
975+
const relative_path = try fs.path.join(&arena.allocator, &[_][]const u8{ "zig-cache", "tmp", tmp.sub_path[0..] });
976+
break :blk try fs.realpathAlloc(&arena.allocator, relative_path);
977+
};
978+
979+
const subdir_path = try fs.path.join(allocator, &[_][]const u8{ base_path, "./subdir" });
980+
try fs.makeDirAbsolute(subdir_path);
981+
try fs.accessAbsolute(subdir_path, .{});
982+
var created_subdir = try fs.openDirAbsolute(subdir_path, .{});
983+
created_subdir.close();
984+
985+
const created_file_path = try fs.path.join(allocator, &[_][]const u8{ subdir_path, "../file" });
986+
const created_file = try fs.createFileAbsolute(created_file_path, .{});
987+
created_file.close();
988+
try fs.accessAbsolute(created_file_path, .{});
989+
990+
const copied_file_path = try fs.path.join(allocator, &[_][]const u8{ subdir_path, "../copy" });
991+
try fs.copyFileAbsolute(created_file_path, copied_file_path, .{});
992+
const renamed_file_path = try fs.path.join(allocator, &[_][]const u8{ subdir_path, "../rename" });
993+
try fs.renameAbsolute(copied_file_path, renamed_file_path);
994+
const renamed_file = try fs.openFileAbsolute(renamed_file_path, .{});
995+
renamed_file.close();
996+
try fs.deleteFileAbsolute(renamed_file_path);
997+
998+
const update_file_path = try fs.path.join(allocator, &[_][]const u8{ subdir_path, "../update" });
999+
const update_file = try fs.createFileAbsolute(update_file_path, .{});
1000+
try update_file.writeAll("something");
1001+
update_file.close();
1002+
const prev_status = try fs.updateFileAbsolute(created_file_path, update_file_path, .{});
1003+
try testing.expectEqual(fs.PrevStatus.stale, prev_status);
1004+
1005+
try fs.deleteDirAbsolute(subdir_path);
1006+
}

0 commit comments

Comments
 (0)