blob: cc49664193d0840593b431c8166904675563c139 [file] [log] [blame]
// 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 test program for testing file I/O.
// @dart = 2.9
import 'dart:async';
import 'dart:collection';
import 'dart:convert';
import 'dart:io';
import "package:async_helper/async_helper.dart";
import "package:expect/expect.dart";
import "package:path/path.dart";
String tempDirectory;
void main() {
if (Platform.isWindows) {
testWindowsCases();
} else {
testPosixCases();
}
asyncStart();
createTempDirectories().then(testObjects).whenComplete(() {
asyncEnd();
new Directory(tempDirectory).delete(recursive: true);
});
}
testPosixCases() {
Expect.equals('/dir', FileSystemEntity.parentOf('/dir/file'));
Expect.equals('/dir', FileSystemEntity.parentOf('/dir/file/'));
Expect.equals('/dir', FileSystemEntity.parentOf('/dir//file//'));
Expect.equals('/', FileSystemEntity.parentOf('/dir'));
Expect.equals('/', FileSystemEntity.parentOf('/dir///'));
Expect.equals('/', FileSystemEntity.parentOf('/'));
Expect.equals('.', FileSystemEntity.parentOf('file'));
Expect.equals('.', FileSystemEntity.parentOf('file//'));
Expect.equals('.', FileSystemEntity.parentOf(''));
Expect.equals('.', FileSystemEntity.parentOf('..'));
Expect.equals('.', FileSystemEntity.parentOf('.'));
Expect.equals('.', FileSystemEntity.parentOf(''));
Expect.equals('/', FileSystemEntity.parentOf('/'));
Expect.equals('/', FileSystemEntity.parentOf('//'));
Expect.equals('/', FileSystemEntity.parentOf('//file///'));
Expect.equals('dir', FileSystemEntity.parentOf('dir/file'));
Expect.equals('dir', FileSystemEntity.parentOf('dir/file/'));
Expect.equals('dir', FileSystemEntity.parentOf('dir/file//'));
Expect.equals('dir/subdir', FileSystemEntity.parentOf('dir/subdir/file'));
Expect.equals('dir//subdir', FileSystemEntity.parentOf('dir//subdir//file/'));
Expect.equals(
'dir/sub.dir', FileSystemEntity.parentOf('dir/sub.dir/fi le///'));
Expect.equals('dir/..', FileSystemEntity.parentOf('dir/../file/'));
Expect.equals('dir/..', FileSystemEntity.parentOf('dir/../..'));
Expect.equals('.', FileSystemEntity.parentOf('./..'));
Expect.equals('..', FileSystemEntity.parentOf('../.'));
}
testWindowsCases() {
Expect.equals(r'C:/dir', FileSystemEntity.parentOf(r'C:/dir/file'));
Expect.equals(r'C:/dir', FileSystemEntity.parentOf(r'C:/dir/file/'));
Expect.equals(r'C:\dir', FileSystemEntity.parentOf(r'C:\dir\file'));
Expect.equals(r'C:\dir', FileSystemEntity.parentOf(r'C:\dir\file\'));
Expect.equals(r'C:\dir', FileSystemEntity.parentOf(r'C:\dir\\file\\'));
Expect.equals(r'C:\', FileSystemEntity.parentOf(r'C:\dir'));
Expect.equals(r'C:\', FileSystemEntity.parentOf(r'C:\dir\/\'));
Expect.equals(r'C:\', FileSystemEntity.parentOf(r'C:\'));
// FileSystemEntity.isAbsolute returns false for 'C:'.
Expect.equals(r'.', FileSystemEntity.parentOf(r'C:'));
Expect.equals(r'\\server\share\dir',
FileSystemEntity.parentOf(r'\\server\share\dir\file'));
Expect.equals(r'\\server\share\dir',
FileSystemEntity.parentOf(r'\\server\share\dir\file\'));
Expect.equals(
r'\\server\share', FileSystemEntity.parentOf(r'\\server\share\file'));
Expect.equals(r'\\server\', FileSystemEntity.parentOf(r'\\server\share'));
Expect.equals(r'\\server\', FileSystemEntity.parentOf(r'\\server\share\'));
Expect.equals(r'\\server\', FileSystemEntity.parentOf(r'\\server\'));
Expect.equals(r'\\server/', FileSystemEntity.parentOf(r'\\server/'));
Expect.equals(r'\\serve', FileSystemEntity.parentOf(r'\\serve'));
Expect.equals(r'.', FileSystemEntity.parentOf(r'file'));
Expect.equals(r'.', FileSystemEntity.parentOf(r''));
Expect.equals(r'.', FileSystemEntity.parentOf(r'..'));
Expect.equals(r'.', FileSystemEntity.parentOf(r'.'));
Expect.equals(r'.', FileSystemEntity.parentOf(r''));
Expect.equals(r'/', FileSystemEntity.parentOf(r'/'));
Expect.equals(r'\', FileSystemEntity.parentOf(r'\'));
Expect.equals(r'\', FileSystemEntity.parentOf(r'\file\\/'));
Expect.equals(r'dir', FileSystemEntity.parentOf(r'dir\file'));
Expect.equals(r'dir', FileSystemEntity.parentOf(r'dir\file\'));
Expect.equals(r'dir', FileSystemEntity.parentOf(r'dir/file/'));
Expect.equals(r'dir\subdir', FileSystemEntity.parentOf(r'dir\subdir\file'));
Expect.equals(
r'dir\sub.dir', FileSystemEntity.parentOf(r'dir\sub.dir\fi le'));
}
Future createTempDirectories() {
return Directory.systemTemp
.createTemp('dart_parent_')
.then((dir) {
tempDirectory = dir.path;
})
.then((_) => new File(join(tempDirectory, 'file1')).create())
.then((_) => new Link(join(tempDirectory, 'link1')).create('.'))
.then((_) => new Directory(join(tempDirectory, 'dir1')).create());
}
testObjects(var ignored) {
['file1', 'link1', 'dir1', 'file2', 'link2', 'dir2'].map(testPath);
}
testPath(String path) {
Expect.equals(tempDirectory, new File(join(tempDirectory, path)).parent.path);
Expect.equals(tempDirectory, new Link(join(tempDirectory, path)).parent.path);
Expect.equals(
tempDirectory, new Directory(join(tempDirectory, path)).parent.path);
}