blob: 8aa3dbd831149744f4f07cd9664cedadfcec364d [file] [log] [blame]
// Copyright (c) 2016, 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.
library fasta.testing.environment_variable;
import 'dart:async' show Future;
import 'dart:io' show Directory, File, Platform;
import '../deprecated_problems.dart' show deprecated_inputError;
class EnvironmentVariable {
final String name;
final String what;
const EnvironmentVariable(this.name, this.what);
Future<String> get value async {
String value = Platform.environment[name];
if (value == null) return variableNotDefined();
await validate(value);
return value;
}
Future<Null> validate(String value) => new Future<Null>.value();
variableNotDefined() {
deprecated_inputError(
null, null, "The environment variable '$name' isn't defined. $what");
}
}
class EnvironmentVariableFile extends EnvironmentVariable {
const EnvironmentVariableFile(String name, String what) : super(name, what);
Future<Null> validate(String value) async {
if (!await new File(value).exists()) notFound(value);
return null;
}
notFound(String value) {
deprecated_inputError(
null,
null,
"The environment variable '$name' has the value "
"'$value', that isn't a file. $what");
}
}
class EnvironmentVariableDirectory extends EnvironmentVariable {
const EnvironmentVariableDirectory(String name, String what)
: super(name, what);
Future<Null> validate(String value) async {
if (!await new Directory(value).exists()) notFound(value);
return null;
}
notFound(String value) {
deprecated_inputError(
null,
null,
"The environment variable '$name' has the value "
"'$value', that isn't a directory. $what");
}
}
Future<bool> fileExists(Uri base, String path) async {
return await new File.fromUri(base.resolve(path)).exists();
}