blob: 0ffff8337b308b352ebdeccfbab5807857ee7ce8 [file] [log] [blame]
// Copyright (c) 2017, 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.
/// Manages the directories where tests can appear and the relationships
/// between them.
import 'package:path/path.dart' as p;
const oneRootDirs = const [
"corelib",
"html",
"isolate",
"language",
"lib",
"standalone"
];
const strongRootDirs = const [
"corelib_strong",
"language_strong",
"lib_strong",
];
const twoRootDirs = const ["corelib_2", "language_2", "lib_2", "standalone_2"];
final fromRootDirs = oneRootDirs.toList()..addAll(strongRootDirs);
// Note: The order is significant. "html" and "isolate" need to come first so
// that they don't get handled by the general "lib" directory.
final _directories = [
new _Directory("corelib", "corelib_strong", "corelib_2"),
new _Directory("html", p.join("lib_strong", "html"), p.join("lib_2", "html")),
new _Directory(
"isolate", p.join("lib_strong", "isolate"), p.join("lib_2", "isolate")),
new _Directory("language", "language_strong", "language_2"),
new _Directory("lib", "lib_strong", "lib_2"),
new _Directory("standalone", "", "standalone_2"),
];
/// Maps a Dart 1.0 or DDC root directory to its resulting migration Dart 2.0
/// directory.
String toTwoDirectory(String fromDir) {
for (var dir in _directories) {
if (dir.one == fromDir || dir.strong == fromDir) return dir.two;
}
throw new ArgumentError.value(fromDir, "fromDir");
}
/// Given a path within a Dart 1.0 or strong mode directory, returns the
/// corresponding Dart 2.0 path.
String toTwoPath(String fromPath) {
for (var dir in _directories) {
if (p.isWithin(dir.one, fromPath)) {
var relative = p.relative(fromPath, from: dir.one);
return p.join(dir.two, relative);
}
if (p.isWithin(dir.strong, fromPath)) {
var relative = p.relative(fromPath, from: dir.strong);
return p.join(dir.two, relative);
}
}
throw new ArgumentError.value(fromPath, "fromPath");
}
/// Given a path within a Dart 2.0 directory, returns the corresponding Dart 1.0
/// path.
String toOnePath(String twoPath) {
for (var dir in _directories) {
if (p.isWithin(dir.two, twoPath)) {
var relative = p.relative(twoPath, from: dir.two);
return p.join(dir.one, relative);
}
}
throw new ArgumentError.value(twoPath, "twoPath");
}
/// Given a path within a Dart 2.0 directory, returns the corresponding DDC
/// strong mode.
String toStrongPath(String twoPath) {
for (var dir in _directories) {
if (p.isWithin(dir.two, twoPath)) {
var relative = p.relative(twoPath, from: dir.two);
return p.join(dir.strong, relative);
}
}
throw new ArgumentError.value(twoPath, "twoPath");
}
class _Directory {
final String one;
final String strong;
final String two;
_Directory(this.one, this.strong, this.two);
}