|  | // 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.notFound, 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(); | 
|  | } | 
|  | } |