| // Copyright 2020 The Fuchsia Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| import 'dart:io'; | |
| import 'package:meta/meta.dart'; | |
| /// Wraps [Platform] for the sake of mocking env results in tests. | |
| /// | |
| /// For now, this class only has a pass-thru to [Platform.environment] | |
| /// since that's all that's currently needed, but in theory it may be nice to | |
| /// use this to test all sorts of platform-related checks we might make. | |
| /// | |
| /// Note that, for now, this is unnecessary if there is actually a way to mock | |
| /// environment variables on a per-test basis, but after some research, I am | |
| /// unaware of any such trick. | |
| /// | |
| /// Usage: | |
| /// ```dart | |
| /// final envReader = EnvReader(environment: Platform.environment); | |
| /// String envVariableValue = envReader.getEnv('MY_ENV_VAR'); | |
| /// ``` | |
| class EnvReader { | |
| final String cwd; | |
| final Map<String, String> environment; | |
| final Map<String, String> overrides; | |
| EnvReader({ | |
| @required this.environment, | |
| @required this.cwd, | |
| this.overrides = const {}, | |
| }); | |
| factory EnvReader.fromEnvironment() => | |
| EnvReader(environment: Platform.environment, cwd: Directory.current.path); | |
| String getEnv(String variableName, [String defaultValue]) { | |
| // print('asking for $variableName with overrides: $overrides'); | |
| // print('asking for $variableName with environment: $environment'); | |
| return overrides[variableName] ?? environment[variableName] ?? defaultValue; | |
| } | |
| String getCwd() => overrides['cwd'] ?? cwd; | |
| } |