-
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
Add more `Link.createSync()` tests. Part 2
- Loading branch information
Showing
24 changed files
with
1,421 additions
and
55 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,60 @@ | ||
// 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 void createSync( | ||
/// String target, | ||
/// {bool recursive = false} | ||
/// ) | ||
/// Synchronously create the link. Calling createSync on an existing link will | ||
/// throw an exception. | ||
/// | ||
/// 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 `target` exists then the type of the link will | ||
/// match the type `target`. Test [Link] pointing to a not existing entity as a | ||
/// target (expect `file` on Windows and `notFound` on other platforms). | ||
/// @author sgrekhov22@gmail.com | ||
import "dart:io"; | ||
import "../../../Utils/expect.dart"; | ||
import "../file_utils.dart"; | ||
|
||
main() { | ||
inSandbox(_main); | ||
} | ||
|
||
_main(Directory sandbox) { | ||
Link target = getTempLinkSync( | ||
parent: sandbox, target: getTempFilePath(parent: sandbox)); | ||
Link link = Link(getTempFilePath(parent: sandbox)); | ||
link.createSync(target.path); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(link.path)); | ||
File file = File(link.targetSync()); | ||
file.createSync(); | ||
Expect.equals( | ||
FileSystemEntityType.file, FileSystemEntity.typeSync(link.path)); | ||
} else { | ||
Expect.equals( | ||
FileSystemEntityType.notFound, FileSystemEntity.typeSync(link.path)); | ||
} | ||
} |
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,57 @@ | ||
// 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 void createSync( | ||
/// String target, | ||
/// {bool recursive = false} | ||
/// ) | ||
/// Synchronously create the link. Calling createSync on an existing link will | ||
/// throw an exception. | ||
/// | ||
/// 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 `target` does not exist then the type of the link | ||
/// will be `file` on Windows and `notFound` on other platforms. | ||
/// @author sgrekhov22@gmail.com | ||
import "dart:io"; | ||
import "../../../Utils/expect.dart"; | ||
import "../file_utils.dart"; | ||
|
||
main() { | ||
inSandbox(_main); | ||
} | ||
|
||
_main(Directory sandbox) { | ||
Link link = Link(getTempFilePath(parent: sandbox)); | ||
link.createSync(getTempFilePath(parent: sandbox)); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(link.path)); | ||
File file = File(link.targetSync()); | ||
file.createSync(); | ||
Expect.equals( | ||
FileSystemEntityType.file, FileSystemEntity.typeSync(link.path)); | ||
} else { | ||
Expect.equals( | ||
FileSystemEntityType.notFound, FileSystemEntity.typeSync(link.path)); | ||
} | ||
} |
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,68 @@ | ||
// 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 void createSync( | ||
/// String target, | ||
/// {bool recursive = false} | ||
/// ) | ||
/// Synchronously create the link. Calling createSync on an existing link will | ||
/// throw an exception. | ||
/// | ||
/// 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 sgrekhov22@gmail.com | ||
import "dart:io"; | ||
import "../../../Utils/expect.dart"; | ||
import "../file_utils.dart"; | ||
|
||
main() { | ||
inSandbox(_main); | ||
} | ||
|
||
_main(Directory sandbox) { | ||
Directory target1 = getTempDirectorySync(parent: sandbox); | ||
Link link = Link(getTempFilePath(parent: sandbox)); | ||
link.createSync(target1.path); | ||
Expect.equals( | ||
FileSystemEntityType.directory, FileSystemEntity.typeSync(link.path)); | ||
target1.deleteSync(); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(link.path)); | ||
} else { | ||
Expect.equals( | ||
FileSystemEntityType.notFound, FileSystemEntity.typeSync(link.path)); | ||
} | ||
Directory target2 = Directory(target1.path); | ||
target2.createSync(); | ||
Expect.equals( | ||
FileSystemEntityType.directory, FileSystemEntity.typeSync(link.path)); | ||
target2.deleteSync(); | ||
|
||
Link target3 = Link(target1.path); | ||
Directory linkTarget = getTempDirectorySync(); | ||
target3.createSync(linkTarget.path); | ||
Expect.equals( | ||
FileSystemEntityType.directory, FileSystemEntity.typeSync(link.path)); | ||
} |
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,79 @@ | ||
// 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 void createSync( | ||
/// String target, | ||
/// {bool recursive = false} | ||
/// ) | ||
/// Synchronously create the link. Calling createSync on an existing link will | ||
/// throw an exception. | ||
/// | ||
/// 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 sgrekhov22@gmail.com | ||
import "dart:io"; | ||
import "../../../Utils/expect.dart"; | ||
import "../file_utils.dart"; | ||
|
||
main() { | ||
inSandbox(_main); | ||
} | ||
|
||
_main(Directory sandbox) { | ||
Directory target1 = getTempDirectorySync(parent: sandbox); | ||
Link link = Link(getTempFilePath(parent: sandbox)); | ||
link.createSync(target1.path); | ||
Expect.equals( | ||
FileSystemEntityType.directory, FileSystemEntity.typeSync(link.path)); | ||
target1.deleteSync(); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(link.path)); | ||
} else { | ||
Expect.equals( | ||
FileSystemEntityType.notFound, FileSystemEntity.typeSync(link.path)); | ||
} | ||
File target2 = File(target1.path); | ||
target2.createSync(); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(link.path)); | ||
} else { | ||
Expect.equals( | ||
FileSystemEntityType.file, FileSystemEntity.typeSync(link.path)); | ||
} | ||
target2.deleteSync(); | ||
|
||
Link target3 = Link(target1.path); | ||
File linkTarget = getTempFileSync(); | ||
target3.createSync(linkTarget.path); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(link.path)); | ||
} else { | ||
Expect.equals( | ||
FileSystemEntityType.file, FileSystemEntity.typeSync(link.path)); | ||
} | ||
} |
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,68 @@ | ||
// 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 void createSync( | ||
/// String target, | ||
/// {bool recursive = false} | ||
/// ) | ||
/// Synchronously create the link. Calling createSync on an existing link will | ||
/// throw an exception. | ||
/// | ||
/// 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 sgrekhov22@gmail.com | ||
import "dart:io"; | ||
import "../../../Utils/expect.dart"; | ||
import "../file_utils.dart"; | ||
|
||
main() { | ||
inSandbox(_main); | ||
} | ||
|
||
_main(Directory sandbox) { | ||
File target1 = getTempFileSync(parent: sandbox); | ||
Link link = Link(getTempFilePath(parent: sandbox)); | ||
link.createSync(target1.path); | ||
Expect.equals( | ||
FileSystemEntityType.file, FileSystemEntity.typeSync(link.path)); | ||
target1.deleteSync(); | ||
if (Platform.isWindows) { | ||
Expect.equals( | ||
FileSystemEntityType.link, FileSystemEntity.typeSync(link.path)); | ||
} else { | ||
Expect.equals( | ||
FileSystemEntityType.notFound, FileSystemEntity.typeSync(link.path)); | ||
} | ||
File target2 = File(target1.path); | ||
target2.createSync(); | ||
Expect.equals( | ||
FileSystemEntityType.file, FileSystemEntity.typeSync(link.path)); | ||
target2.deleteSync(); | ||
|
||
Link target3 = Link(target1.path); | ||
File linkTarget = getTempFileSync(); | ||
target3.createSync(linkTarget.path); | ||
Expect.equals( | ||
FileSystemEntityType.file, FileSystemEntity.typeSync(link.path)); | ||
} |
Oops, something went wrong.