| ... | ... | @@ -1416,34 +1416,13 @@ test "File.PermissionsUnix" { |
| 1416 | 1416 | try testing.expect(!permissions_unix.unixHas(.other, .execute)); |
| 1417 | 1417 | } |
| 1418 | 1418 | |
| 1419 | | test "delete a read-only file on windows with file pending semantics" { |
| 1420 | | if (builtin.os.tag != .windows or builtin.target.os.version_range.windows.min.isAtLeast(.win10_rs1)) |
| 1419 | test "delete a read-only file on windows" { |
| 1420 | if (builtin.os.tag != .windows) |
| 1421 | 1421 | return error.SkipZigTest; |
| 1422 | 1422 | |
| 1423 | | var tmp = tmpDir(.{}); |
| 1423 | var tmp = testing.tmpDir(.{}); |
| 1424 | 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 | | |
| 1441 | | test "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; |
| 1444 | 1425 | |
| 1445 | | var tmp = tmpDir(.{}); |
| 1446 | | defer tmp.cleanup(); |
| 1447 | 1426 | const file = try tmp.dir.createFile("test_file", .{ .read = true }); |
| 1448 | 1427 | defer file.close(); |
| 1449 | 1428 | // Create a file and make it read-only |
| ... | ... | @@ -1451,7 +1430,21 @@ test "delete a read-only file on windows with posix semantis" { |
| 1451 | 1430 | var permissions = metadata.permissions(); |
| 1452 | 1431 | permissions.setReadOnly(true); |
| 1453 | 1432 | try file.setPermissions(permissions); |
| 1454 | | try tmp.dir.deleteFile("test_file"); // file is unmapped and deleted once last handle closed |
| 1433 | |
| 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 | } |
| 1456 | 1449 | |
| 1457 | 1450 | test "delete a setAsCwd directory on Windows" { |