a323c55162
Change-Id: I4d492a63a41880ef8cd69321372a4853825b9efd Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/426321 Reviewed-by: Liam Appelbe <liama@google.com> Auto-Submit: Bob Nystrom <rnystrom@google.com> Commit-Queue: Liam Appelbe <liama@google.com>
184 lines
5.3 KiB
Dart
184 lines
5.3 KiB
Dart
// 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 existing 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();
|
|
}
|