blob: 277b5ba697eb0adcc752b492a1fc047353c4888a [file] [log] [blame]
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// Directory rename test.
import "dart:io";
import "package:expect/expect.dart";
import 'test_utils.dart' show withTempDir;
testRenameToNewPath() async {
await withTempDir('testRenameToNewPath', (Directory tempDir) async {
final dir1 = Directory("${tempDir.path}/dir1");
dir1.createSync();
dir1.renameSync("${tempDir.path}/dir2");
Expect.isTrue(Directory("${tempDir.path}/dir2").existsSync());
});
}
testRenamePath() async {
// Verifies that the returned directory has the correct path.
await withTempDir('testRenameToNewPath', (Directory tempDir) async {
final oldDir = Directory("${tempDir.path}/dir1");
oldDir.createSync();
final newDir = oldDir.renameSync("${tempDir.path}/dir2");
Expect.isTrue(
oldDir.path == "${tempDir.path}/dir1",
"${oldDir.path} != '${tempDir.path}/dir1'"
"- path should not be updated");
Expect.isTrue(
newDir.path == "${tempDir.path}/dir2",
"${newDir.path} != '${tempDir.path}/dir2'"
"- path should be updated");
});
}
testRenameToSamePath() async {
await withTempDir('testRenameToSamePath', (Directory tempDir) async {
final dir = Directory("${tempDir.path}/dir");
dir.createSync();
final file = File("${dir.path}/file");
file.createSync();
dir.renameSync(dir.path);
Expect.isTrue(file.existsSync());
});
}
testRenameToExistingFile() async {
await withTempDir('testRenameToExistingFile', (Directory tempDir) async {
final dir = Directory("${tempDir.path}/dir");
dir.createSync();
final file = File("${tempDir.path}/file");
file.createSync();
// Overwriting an exsting file is not allowed.
try {
dir.renameSync(file.path);
Expect.fail('Directory.rename should fail to rename a non-directory');
} on FileSystemException catch (e) {
if (Platform.isWindows) {
Expect.isTrue(e.osError!.message.contains('file already exists'),
'Unexpected error: $e');
} else if (Platform.isLinux || Platform.isMacOS) {
Expect.isTrue(e.osError!.message.contains('Not a directory'),
'Unexpected error: $e');
}
}
});
}
testRenameToExistingEmptyDirectory() async {
await withTempDir('testRenameToExistingEmptyDirectory',
(Directory tempDir) async {
final dir1 = Directory("${tempDir.path}/dir1");
dir1.createSync();
File("${dir1.path}/file").createSync();
final dir2 = Directory("${tempDir.path}/dir2");
dir2.createSync();
try {
dir1.renameSync(dir2.path);
// Verify that the file contained in dir1 has been moved.
if (Platform.isWindows) {
Expect.fail(
'Directory.rename should fail to rename over an existing directory '
'on Windows');
} else {
Expect.isTrue(File("${dir2.path}/file").existsSync());
}
} on FileSystemException catch (e) {
if (Platform.isWindows) {
Expect.isTrue(e.osError!.message.contains('file already exists'));
} else {
Expect.fail('Directory.rename should allow moves to empty directories');
}
}
});
}
testRenameToExistingNonEmptyDirectory() async {
await withTempDir('testRenameToExistingNonEmptyDirectory',
(Directory tempDir) async {
final dir1 = Directory("${tempDir.path}/dir1");
dir1.createSync();
File("${dir1.path}/file1").createSync();
final dir2 = Directory("${tempDir.path}/dir2");
dir2.createSync();
File("${dir2.path}/file2").createSync();
try {
dir1.renameSync(dir2.path);
Expect.fail(
'Directory.rename should fail to rename a non-empty directory');
} on FileSystemException catch (e) {
if (Platform.isWindows) {
Expect.isTrue(e.osError!.message.contains('file already exists'),
'Unexpected error: $e');
} else if (Platform.isLinux || Platform.isMacOS) {
Expect.isTrue(e.osError!.message.contains('Directory not empty'),
'Unexpected error: $e');
}
}
});
}
testRenameButActuallyFile() async {
await withTempDir('testRenameButActuallyFile', (Directory tempDir) async {
final file = File("${tempDir.path}/file");
file.createSync();
final dir = Directory(file.path);
try {
dir.renameSync("${tempDir.path}/dir");
Expect.fail("Expected a failure to rename the file.");
} on FileSystemException catch (e) {
Expect.isTrue(
e.message.contains('Rename failed'), 'Unexpected error: $e');
if (Platform.isWindows) {
Expect.isTrue(e.osError!.message.contains('cannot find the file'),
'Unexpected error: $e');
} else if (Platform.isLinux || Platform.isMacOS) {
Expect.isTrue(e.osError!.message.contains('Not a directory'),
'Unexpected error: $e');
}
}
});
}
main() async {
await testRenameToNewPath();
await testRenamePath();
await testRenameToSamePath();
await testRenameToExistingFile();
await testRenameToExistingEmptyDirectory();
await testRenameToExistingNonEmptyDirectory();
await testRenameButActuallyFile();
}