| // 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. | 
 |  | 
 | // @dart = 2.9 | 
 |  | 
 | 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(); | 
 |   } | 
 | } |