-
Notifications
You must be signed in to change notification settings - Fork 28
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
- Loading branch information
Showing
10 changed files
with
825 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
// Copyright (c) 2023, 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. | ||
|
||
/// @assertion Future<Link> create( | ||
/// String target, { | ||
/// bool recursive: false | ||
/// }) | ||
/// Creates a symbolic link in the file system. | ||
/// | ||
/// The created link will point to the path at `target`, whether that path | ||
/// exists or not. | ||
/// | ||
/// Returns a `Future<Link>` that completes with the link when it has been | ||
/// created. If the link path already exists, the future will complete with an | ||
/// error. | ||
/// | ||
/// If `recursive` is `false`, the default, the link is created only if all | ||
/// directories in its path exist. If `recursive` is `true`, all non-existing | ||
/// parent paths are created first. The directories in the path of target are | ||
/// not affected, unless they are also in [path]. | ||
/// | ||
/// On the Windows platform, this call will create a true symbolic link instead | ||
/// of a junction. The link represents a file or directory and does not change | ||
/// its type after creation. If `target` exists then the type of the link will | ||
/// match the type `target`, otherwise a file symlink is created. | ||
/// | ||
/// In order to create a symbolic link on Windows, Dart must be run in | ||
/// Administrator mode or the system must have Developer Mode enabled, otherwise | ||
/// a [FileSystemException] will be raised with `ERROR_PRIVILEGE_NOT_HELD` set | ||
/// as the errno when this call is made. | ||
/// | ||
/// On other platforms, the POSIX `symlink()` call is used to make a symbolic | ||
/// link containing the string `target`. If `target` is a relative path, it will | ||
/// be interpreted relative to the directory containing the link. | ||
/// | ||
/// @description Checks that if a link with the target directory was created and | ||
/// then this directory was deleted and created again, then the link stays valid | ||
/// @author [email protected] | ||
import "dart:io"; | ||
import "../../../Utils/expect.dart"; | ||
import "../file_utils.dart"; | ||
|
||
main() async { | ||
await inSandbox(_main); | ||
} | ||
|
||
_main(Directory sandbox) async { | ||
Directory target1 = getTempDirectorySync(parent: sandbox); | ||
Link link = Link(getTempFilePath(parent: sandbox)); | ||
asyncStart(); | ||
await link.create(target1.path).then((Link created) { | ||
Expect.equals(FileSystemEntityType.directory, | ||
FileSystemEntity.typeSync(created.path)); | ||
target1.deleteSync(); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(created.path)); | ||
} else { | ||
Expect.equals(FileSystemEntityType.notFound, | ||
FileSystemEntity.typeSync(created.path)); | ||
} | ||
Directory target2 = Directory(target1.path); | ||
target2.createSync(); | ||
Expect.equals(FileSystemEntityType.directory, | ||
FileSystemEntity.typeSync(created.path)); | ||
target2.deleteSync(); | ||
|
||
Link target3 = Link(target1.path); | ||
Directory linkTarget = getTempDirectorySync(); | ||
target3.createSync(linkTarget.path); | ||
Expect.equals(FileSystemEntityType.directory, | ||
FileSystemEntity.typeSync(created.path)); | ||
asyncEnd(); | ||
}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
// Copyright (c) 2023, 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. | ||
|
||
/// @assertion Future<Link> create( | ||
/// String target, { | ||
/// bool recursive: false | ||
/// }) | ||
/// Creates a symbolic link in the file system. | ||
/// | ||
/// The created link will point to the path at `target`, whether that path | ||
/// exists or not. | ||
/// | ||
/// Returns a `Future<Link>` that completes with the link when it has been | ||
/// created. If the link path already exists, the future will complete with an | ||
/// error. | ||
/// | ||
/// If `recursive` is `false`, the default, the link is created only if all | ||
/// directories in its path exist. If `recursive` is `true`, all non-existing | ||
/// parent paths are created first. The directories in the path of target are | ||
/// not affected, unless they are also in [path]. | ||
/// | ||
/// On the Windows platform, this call will create a true symbolic link instead | ||
/// of a junction. The link represents a file or directory and does not change | ||
/// its type after creation. If `target` exists then the type of the link will | ||
/// match the type `target`, otherwise a file symlink is created. | ||
/// | ||
/// In order to create a symbolic link on Windows, Dart must be run in | ||
/// Administrator mode or the system must have Developer Mode enabled, otherwise | ||
/// a [FileSystemException] will be raised with `ERROR_PRIVILEGE_NOT_HELD` set | ||
/// as the errno when this call is made. | ||
/// | ||
/// On other platforms, the POSIX `symlink()` call is used to make a symbolic | ||
/// link containing the string `target`. If `target` is a relative path, it will | ||
/// be interpreted relative to the directory containing the link. | ||
/// | ||
/// @description Checks that if a link with the target directory was created and | ||
/// then this directory was deleted and a file with the same name created, then | ||
/// on Windows the link became invalid on other platforms it changes its type | ||
/// @author [email protected] | ||
import "dart:io"; | ||
import "../../../Utils/expect.dart"; | ||
import "../file_utils.dart"; | ||
|
||
main() async { | ||
await inSandbox(_main); | ||
} | ||
|
||
_main(Directory sandbox) async { | ||
Directory target1 = getTempDirectorySync(parent: sandbox); | ||
Link link = Link(getTempFilePath(parent: sandbox)); | ||
asyncStart(); | ||
await link.create(target1.path).then((Link created) { | ||
Expect.equals(FileSystemEntityType.directory, | ||
FileSystemEntity.typeSync(created.path)); | ||
target1.deleteSync(); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(created.path)); | ||
} else { | ||
Expect.equals(FileSystemEntityType.notFound, | ||
FileSystemEntity.typeSync(created.path)); | ||
} | ||
File target2 = File(target1.path); | ||
target2.createSync(); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(created.path)); | ||
} else { | ||
Expect.equals(FileSystemEntityType.file, | ||
FileSystemEntity.typeSync(created.path)); | ||
} | ||
target2.deleteSync(); | ||
|
||
Link target3 = Link(target1.path); | ||
File linkTarget = getTempFileSync(); | ||
target3.createSync(linkTarget.path); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(created.path)); | ||
} else { | ||
Expect.equals(FileSystemEntityType.file, | ||
FileSystemEntity.typeSync(created.path)); | ||
} | ||
asyncEnd(); | ||
}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
// Copyright (c) 2023, 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. | ||
|
||
/// @assertion Future<Link> create( | ||
/// String target, { | ||
/// bool recursive: false | ||
/// }) | ||
/// Creates a symbolic link in the file system. | ||
/// | ||
/// The created link will point to the path at `target`, whether that path | ||
/// exists or not. | ||
/// | ||
/// Returns a `Future<Link>` that completes with the link when it has been | ||
/// created. If the link path already exists, the future will complete with an | ||
/// error. | ||
/// | ||
/// If `recursive` is `false`, the default, the link is created only if all | ||
/// directories in its path exist. If `recursive` is `true`, all non-existing | ||
/// parent paths are created first. The directories in the path of target are | ||
/// not affected, unless they are also in [path]. | ||
/// | ||
/// On the Windows platform, this call will create a true symbolic link instead | ||
/// of a junction. The link represents a file or directory and does not change | ||
/// its type after creation. If `target` exists then the type of the link will | ||
/// match the type `target`, otherwise a file symlink is created. | ||
/// | ||
/// In order to create a symbolic link on Windows, Dart must be run in | ||
/// Administrator mode or the system must have Developer Mode enabled, otherwise | ||
/// a [FileSystemException] will be raised with `ERROR_PRIVILEGE_NOT_HELD` set | ||
/// as the errno when this call is made. | ||
/// | ||
/// On other platforms, the POSIX `symlink()` call is used to make a symbolic | ||
/// link containing the string `target`. If `target` is a relative path, it will | ||
/// be interpreted relative to the directory containing the link. | ||
/// | ||
/// @description Checks that if a link with the target file was created and | ||
/// then this file was deleted and created again, then the link stays valid | ||
/// @author [email protected] | ||
import "dart:io"; | ||
import "../../../Utils/expect.dart"; | ||
import "../file_utils.dart"; | ||
|
||
main() async { | ||
await inSandbox(_main); | ||
} | ||
|
||
_main(Directory sandbox) async { | ||
File target1 = getTempFileSync(parent: sandbox); | ||
Link link = Link(getTempFilePath(parent: sandbox)); | ||
asyncStart(); | ||
await link.create(target1.path).then((Link created) { | ||
Expect.equals( | ||
FileSystemEntityType.file, FileSystemEntity.typeSync(created.path)); | ||
target1.deleteSync(); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(created.path)); | ||
} else { | ||
Expect.equals(FileSystemEntityType.notFound, | ||
FileSystemEntity.typeSync(created.path)); | ||
} | ||
File target2 = File(target1.path); | ||
target2.createSync(); | ||
Expect.equals(FileSystemEntityType.file, | ||
FileSystemEntity.typeSync(created.path)); | ||
target2.deleteSync(); | ||
|
||
Link target3 = Link(target1.path); | ||
File linkTarget = getTempFileSync(); | ||
target3.createSync(linkTarget.path); | ||
Expect.equals(FileSystemEntityType.file, | ||
FileSystemEntity.typeSync(created.path)); | ||
asyncEnd(); | ||
}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
// Copyright (c) 2023, 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. | ||
|
||
/// @assertion Future<Link> create( | ||
/// String target, { | ||
/// bool recursive: false | ||
/// }) | ||
/// Creates a symbolic link in the file system. | ||
/// | ||
/// The created link will point to the path at `target`, whether that path | ||
/// exists or not. | ||
/// | ||
/// Returns a `Future<Link>` that completes with the link when it has been | ||
/// created. If the link path already exists, the future will complete with an | ||
/// error. | ||
/// | ||
/// If `recursive` is `false`, the default, the link is created only if all | ||
/// directories in its path exist. If `recursive` is `true`, all non-existing | ||
/// parent paths are created first. The directories in the path of target are | ||
/// not affected, unless they are also in [path]. | ||
/// | ||
/// On the Windows platform, this call will create a true symbolic link instead | ||
/// of a junction. The link represents a file or directory and does not change | ||
/// its type after creation. If `target` exists then the type of the link will | ||
/// match the type `target`, otherwise a file symlink is created. | ||
/// | ||
/// In order to create a symbolic link on Windows, Dart must be run in | ||
/// Administrator mode or the system must have Developer Mode enabled, otherwise | ||
/// a [FileSystemException] will be raised with `ERROR_PRIVILEGE_NOT_HELD` set | ||
/// as the errno when this call is made. | ||
/// | ||
/// On other platforms, the POSIX `symlink()` call is used to make a symbolic | ||
/// link containing the string `target`. If `target` is a relative path, it will | ||
/// be interpreted relative to the directory containing the link. | ||
/// | ||
/// @description Checks that if a link with the target file was created and then | ||
/// this file was deleted and a directory with the same name created, then | ||
/// on Windows the link became invalid on other platforms it changes its type | ||
/// @author [email protected] | ||
import "dart:io"; | ||
import "../../../Utils/expect.dart"; | ||
import "../file_utils.dart"; | ||
|
||
main() async { | ||
await inSandbox(_main); | ||
} | ||
|
||
_main(Directory sandbox) async { | ||
File target1 = getTempFileSync(parent: sandbox); | ||
Link link = Link(getTempFilePath(parent: sandbox)); | ||
asyncStart(); | ||
await link.create(target1.path).then((Link created) { | ||
Expect.equals(FileSystemEntityType.file, | ||
FileSystemEntity.typeSync(created.path)); | ||
target1.deleteSync(); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(created.path)); | ||
} else { | ||
Expect.equals(FileSystemEntityType.notFound, | ||
FileSystemEntity.typeSync(created.path)); | ||
} | ||
Directory target2 = Directory(target1.path); | ||
target2.createSync(); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(created.path)); | ||
} else { | ||
Expect.equals(FileSystemEntityType.directory, | ||
FileSystemEntity.typeSync(created.path)); | ||
} | ||
target2.deleteSync(); | ||
|
||
Link target3 = Link(target1.path); | ||
Directory linkTarget = getTempDirectorySync(); | ||
target3.createSync(linkTarget.path); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(created.path)); | ||
} else { | ||
Expect.equals(FileSystemEntityType.file, | ||
FileSystemEntity.typeSync(created.path)); | ||
} | ||
asyncEnd(); | ||
}); | ||
} |
Oops, something went wrong.