aboutsummaryrefslogtreecommitdiff
path: root/lib/std/fs/test.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2021-08-14 11:08:10 +0300
committerGitHub <noreply@github.com>2021-08-14 11:08:10 +0300
commite9bf8014bd29360353a9bfdff4aa9d5a45bc59f6 (patch)
tree5bf91e0cb5e2489c297a5ccf1c8efcfe5d73e966 /lib/std/fs/test.zig
parentfcf2ce0ffee549ac882879364cd7e743ac10be20 (diff)
parentf6bb56f8c7bd173982d48925d952afb0fd1cd6e5 (diff)
downloadzig-e9bf8014bd29360353a9bfdff4aa9d5a45bc59f6.tar.gz
zig-e9bf8014bd29360353a9bfdff4aa9d5a45bc59f6.zip
Merge pull request #9559 from squeek502/walker-basename
fs.Dir.Walker: Fix basename missing its first character for direct children of the initial directory
Diffstat (limited to 'lib/std/fs/test.zig')
-rw-r--r--lib/std/fs/test.zig55
1 files changed, 36 insertions, 19 deletions
diff --git a/lib/std/fs/test.zig b/lib/std/fs/test.zig
index 54f3e238d3..7cc43bbb36 100644
--- a/lib/std/fs/test.zig
+++ b/lib/std/fs/test.zig
@@ -916,14 +916,30 @@ test "walker" {
var tmp = tmpDir(.{});
defer tmp.cleanup();
- const nb_dirs = 8;
-
- var i: usize = 0;
- var sub_dir = tmp.dir;
- while (i < nb_dirs) : (i += 1) {
- const dir_name = try std.fmt.allocPrint(allocator, "{}", .{i});
- try sub_dir.makeDir(dir_name);
- sub_dir = try sub_dir.openDir(dir_name, .{});
+ // iteration order of walker is undefined, so need lookup maps to check against
+
+ const expected_paths = std.ComptimeStringMap(void, .{
+ .{"dir1"},
+ .{"dir2"},
+ .{"dir3"},
+ .{"dir4"},
+ .{"dir3" ++ std.fs.path.sep_str ++ "sub1"},
+ .{"dir3" ++ std.fs.path.sep_str ++ "sub2"},
+ .{"dir3" ++ std.fs.path.sep_str ++ "sub2" ++ std.fs.path.sep_str ++ "subsub1"},
+ });
+
+ const expected_basenames = std.ComptimeStringMap(void, .{
+ .{"dir1"},
+ .{"dir2"},
+ .{"dir3"},
+ .{"dir4"},
+ .{"sub1"},
+ .{"sub2"},
+ .{"subsub1"},
+ });
+
+ for (expected_paths.kvs) |kv| {
+ try tmp.dir.makePath(kv.key);
}
const tmp_path = try fs.path.join(allocator, &[_][]const u8{ "zig-cache", "tmp", tmp.sub_path[0..] });
@@ -932,18 +948,19 @@ test "walker" {
var walker = try tmp_dir.walk(testing.allocator);
defer walker.deinit();
- i = 0;
- var expected_dir_name: []const u8 = "";
- while (i < nb_dirs) : (i += 1) {
- const name = try std.fmt.allocPrint(allocator, "{}", .{i});
- expected_dir_name = if (expected_dir_name.len == 0)
- name
- else
- try fs.path.join(allocator, &[_][]const u8{ expected_dir_name, name });
-
- var entry = (try walker.next()).?;
- try testing.expectEqualStrings(expected_dir_name, entry.path);
+ var num_walked: usize = 0;
+ while (try walker.next()) |entry| {
+ testing.expect(expected_basenames.has(entry.basename)) catch |err| {
+ std.debug.print("found unexpected basename: {s}\n", .{std.fmt.fmtSliceEscapeLower(entry.basename)});
+ return err;
+ };
+ testing.expect(expected_paths.has(entry.path)) catch |err| {
+ std.debug.print("found unexpected path: {s}\n", .{std.fmt.fmtSliceEscapeLower(entry.path)});
+ return err;
+ };
+ num_walked += 1;
}
+ try testing.expectEqual(expected_paths.kvs.len, num_walked);
}
test ". and .. in fs.Dir functions" {