authorgravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2023-07-23 00:21:07-07:00
committergravatar for squeek502@hotmail.comRyan Liptak <squeek502@hotmail.com> 2023-07-23 01:26:26-07:00
log21ecb1ba0fabe471476df9ca328c8aa14767af24
tree3c4cbab05d69d56d71eb94280acec7959a285d9e
parent1ae378e7a253ec845d8ee8d52b5505c9aa177369

Consolidate 'delete a read-only file on windows' test cases

These two tests can't be disambiguated at comptime, since the filesystem that the test is running on also matters for whether or not POSIX_SEMANTICS / IGNORE_READONLY_ATTRIBUTE can actually be used (since they are only supported on NTFS).

1 files changed, 18 insertions(+), 25 deletions(-)

lib/std/fs/test.zig+18-25
...@@ -1416,34 +1416,13 @@ test "File.PermissionsUnix" {...@@ -1416,34 +1416,13 @@ test "File.PermissionsUnix" {
1416 try testing.expect(!permissions_unix.unixHas(.other, .execute));1416 try testing.expect(!permissions_unix.unixHas(.other, .execute));
1417}1417}
14181418
1419test "delete a read-only file on windows with file pending semantics" {1419test "delete a read-only file on windows" {
1420 if (builtin.os.tag != .windows or builtin.target.os.version_range.windows.min.isAtLeast(.win10_rs1))1420 if (builtin.os.tag != .windows)
1421 return error.SkipZigTest;1421 return error.SkipZigTest;
14221422
1423 var tmp = tmpDir(.{});1423 var tmp = testing.tmpDir(.{});
1424 defer tmp.cleanup();1424 defer tmp.cleanup();
1425 {
1426 const file = try tmp.dir.createFile("test_file", .{ .read = true });
1427 defer file.close();
1428 // Create a file and make it read-only
1429 const metadata = try file.metadata();
1430 var permissions = metadata.permissions();
1431 permissions.setReadOnly(true);
1432 try file.setPermissions(permissions);
1433 try testing.expectError(error.AccessDenied, tmp.dir.deleteFile("test_file"));
1434 // Now make the file not read-only
1435 permissions.setReadOnly(false);
1436 try file.setPermissions(permissions);
1437 }
1438 try tmp.dir.deleteFile("test_file");
1439}
1440
1441test "delete a read-only file on windows with posix semantis" {
1442 if (builtin.os.tag != .windows or !builtin.target.os.version_range.windows.min.isAtLeast(.win10_rs1))
1443 return error.SkipZigTest;
14441425
1445 var tmp = tmpDir(.{});
1446 defer tmp.cleanup();
1447 const file = try tmp.dir.createFile("test_file", .{ .read = true });1426 const file = try tmp.dir.createFile("test_file", .{ .read = true });
1448 defer file.close();1427 defer file.close();
1449 // Create a file and make it read-only1428 // Create a file and make it read-only
...@@ -1451,7 +1430,21 @@ test "delete a read-only file on windows with posix semantis" {...@@ -1451,7 +1430,21 @@ test "delete a read-only file on windows with posix semantis" {
1451 var permissions = metadata.permissions();1430 var permissions = metadata.permissions();
1452 permissions.setReadOnly(true);1431 permissions.setReadOnly(true);
1453 try file.setPermissions(permissions);1432 try file.setPermissions(permissions);
1454 try tmp.dir.deleteFile("test_file"); // file is unmapped and deleted once last handle closed1433
1434 // If the OS and filesystem support it, POSIX_SEMANTICS and IGNORE_READONLY_ATTRIBUTE
1435 // is used meaning that the deletion of a read-only file will succeed.
1436 // Otherwise, this delete will fail and the read-only flag must be unset before it's
1437 // able to be deleted.
1438 const delete_result = tmp.dir.deleteFile("test_file");
1439 if (delete_result) {
1440 try testing.expectError(error.FileNotFound, tmp.dir.deleteFile("test_file"));
1441 } else |err| {
1442 try testing.expectEqual(@as(anyerror, error.AccessDenied), err);
1443 // Now make the file not read-only
1444 permissions.setReadOnly(false);
1445 try file.setPermissions(permissions);
1446 try tmp.dir.deleteFile("test_file");
1447 }
1455}1448}
14561449
1457test "delete a setAsCwd directory on Windows" {1450test "delete a setAsCwd directory on Windows" {