| ... | @@ -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 | } |
| 1418 | | 1418 | |
| 1419 | test "delete a read-only file on windows with file pending semantics" { | 1419 | test "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; |
| 1422 | | 1422 | |
| 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 | | | |
| 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 | 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-only | 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,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 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 | test "delete a setAsCwd directory on Windows" { | 1450 | test "delete a setAsCwd directory on Windows" { |