0c5f2a3532
Bug: https://github.com/dart-lang/sdk/issues/30410 Change-Id: I96c9ca8a5aff4a4337022047ea0b844335efdfcf Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/161260 Reviewed-by: Alexander Aprelev <aam@google.com> Commit-Queue: Zichang Guo <zichangguo@google.com>
132 lines
5.1 KiB
Dart
132 lines
5.1 KiB
Dart
// Copyright (c) 2013, 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.
|
|
|
|
import "dart:io";
|
|
|
|
import 'package:expect/expect.dart';
|
|
|
|
testJunctionTypeDelete() {
|
|
var temp =
|
|
Directory.systemTemp.createTempSync('dart_windows_file_system_links');
|
|
var x = '${temp.path}${Platform.pathSeparator}x';
|
|
var y = '${temp.path}${Platform.pathSeparator}y';
|
|
|
|
new Directory(x).createSync();
|
|
new Link(y).create(x).then((_) {
|
|
Expect.isTrue(new Directory(y).existsSync());
|
|
Expect.isTrue(new Directory(x).existsSync());
|
|
Expect.isTrue(FileSystemEntity.isLinkSync(y));
|
|
Expect.isFalse(FileSystemEntity.isLinkSync(x));
|
|
Expect.isTrue(FileSystemEntity.isDirectorySync(y));
|
|
Expect.isTrue(FileSystemEntity.isDirectorySync(x));
|
|
Expect.equals(FileSystemEntityType.directory, FileSystemEntity.typeSync(y));
|
|
Expect.equals(FileSystemEntityType.directory, FileSystemEntity.typeSync(x));
|
|
Expect.equals(FileSystemEntityType.link,
|
|
FileSystemEntity.typeSync(y, followLinks: false));
|
|
Expect.equals(FileSystemEntityType.directory,
|
|
FileSystemEntity.typeSync(x, followLinks: false));
|
|
Expect.equals(x, new Link(y).targetSync());
|
|
|
|
// Test Junction pointing to a missing directory.
|
|
new Directory(x).deleteSync();
|
|
Expect.isTrue(new Link(y).existsSync());
|
|
Expect.isFalse(new Directory(x).existsSync());
|
|
Expect.isTrue(FileSystemEntity.isLinkSync(y));
|
|
Expect.isFalse(FileSystemEntity.isLinkSync(x));
|
|
Expect.isFalse(FileSystemEntity.isDirectorySync(y));
|
|
Expect.isFalse(FileSystemEntity.isDirectorySync(x));
|
|
Expect.equals(FileSystemEntityType.link, FileSystemEntity.typeSync(y));
|
|
Expect.equals(FileSystemEntityType.notFound, FileSystemEntity.typeSync(x));
|
|
Expect.equals(FileSystemEntityType.link,
|
|
FileSystemEntity.typeSync(y, followLinks: false));
|
|
Expect.equals(FileSystemEntityType.notFound,
|
|
FileSystemEntity.typeSync(x, followLinks: false));
|
|
Expect.equals(x, new Link(y).targetSync());
|
|
|
|
// Delete Junction pointing to a missing directory.
|
|
new Link(y).deleteSync();
|
|
Expect.isFalse(FileSystemEntity.isLinkSync(y));
|
|
Expect.equals(FileSystemEntityType.notFound, FileSystemEntity.typeSync(y));
|
|
Expect.throws(() => new Link(y).targetSync());
|
|
|
|
new Directory(x).createSync();
|
|
new Link(y).create(x).then((_) {
|
|
Expect.equals(FileSystemEntityType.link,
|
|
FileSystemEntity.typeSync(y, followLinks: false));
|
|
Expect.equals(FileSystemEntityType.directory,
|
|
FileSystemEntity.typeSync(x, followLinks: false));
|
|
Expect.equals(x, new Link(y).targetSync());
|
|
|
|
// Delete Junction pointing to an existing directory.
|
|
new Directory(y).deleteSync();
|
|
Expect.equals(
|
|
FileSystemEntityType.notFound, FileSystemEntity.typeSync(y));
|
|
Expect.equals(FileSystemEntityType.notFound,
|
|
FileSystemEntity.typeSync(y, followLinks: false));
|
|
Expect.equals(
|
|
FileSystemEntityType.directory, FileSystemEntity.typeSync(x));
|
|
Expect.equals(FileSystemEntityType.directory,
|
|
FileSystemEntity.typeSync(x, followLinks: false));
|
|
Expect.throws(() => new Link(y).targetSync());
|
|
|
|
temp.deleteSync(recursive: true);
|
|
});
|
|
});
|
|
}
|
|
|
|
void testLinkToFile() {
|
|
final temp =
|
|
Directory.systemTemp.createTempSync('dart_windows_file_system_links');
|
|
// Create file
|
|
File file = new File(temp.path + Platform.pathSeparator + "test-file.tmp");
|
|
file.createSync();
|
|
// Create link pointing to the file above
|
|
Link link = new Link(temp.path + Platform.pathSeparator + "test-link.lnk");
|
|
link.createSync(file.path);
|
|
|
|
Link link2 = new Link(temp.path + Platform.pathSeparator + "test-link2.lnk");
|
|
link2.createSync(link.path);
|
|
|
|
try {
|
|
Expect.isTrue(FileSystemEntity.isLinkSync(link.path));
|
|
Expect.isTrue(FileSystemEntity.isLinkSync(link2.path));
|
|
Expect.isTrue(FileSystemEntity.isFileSync(link2.path));
|
|
Expect.isFalse(FileSystemEntity.isDirectorySync(link2.path));
|
|
} finally {
|
|
temp.deleteSync(recursive: true);
|
|
}
|
|
}
|
|
|
|
void testLinkToDirectory() {
|
|
final temp =
|
|
Directory.systemTemp.createTempSync('dart_windows_file_system_links');
|
|
// Create file
|
|
Directory dir = Directory(temp.path + Platform.pathSeparator + "test-dir");
|
|
dir.createSync();
|
|
// Create link pointing to the file above
|
|
Link link = Link(temp.path + Platform.pathSeparator + "test-link.lnk");
|
|
link.createSync(dir.path);
|
|
|
|
Link link2 = Link(temp.path + Platform.pathSeparator + "test-link2.lnk");
|
|
link2.createSync(link.path);
|
|
|
|
try {
|
|
Expect.isTrue(FileSystemEntity.isLinkSync(link.path));
|
|
Expect.isTrue(FileSystemEntity.isLinkSync(link2.path));
|
|
Expect.isFalse(FileSystemEntity.isFileSync(link2.path));
|
|
Expect.isTrue(FileSystemEntity.isDirectorySync(link2.path));
|
|
} finally {
|
|
temp.deleteSync(recursive: true);
|
|
}
|
|
}
|
|
|
|
main() {
|
|
// Links on other platforms are tested by file_system_[async_]links_test.
|
|
if (Platform.operatingSystem == 'windows') {
|
|
testJunctionTypeDelete();
|
|
testLinkToFile();
|
|
testLinkToDirectory();
|
|
}
|
|
}
|