| // Copyright 2014 The Flutter 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:async'; | |
| import 'package:flutter_tools/src/build_info.dart'; | |
| import 'package:flutter_tools/src/build_system/build_system.dart'; | |
| class TestBuildSystem implements BuildSystem { | |
| /// Create a [BuildSystem] instance that returns the provided results in order. | |
| TestBuildSystem.list(this._results, [this._onRun]) : _exception = null, _singleResult = null; | |
| /// Create a [BuildSystem] instance that returns the provided result for every build | |
| /// and buildIncremental request. | |
| TestBuildSystem.all(this._singleResult, [this._onRun]) | |
| : _exception = null, | |
| _results = <BuildResult>[]; | |
| /// Create a [BuildSystem] instance that always throws the provided error for every build | |
| /// and buildIncremental request. | |
| TestBuildSystem.error(this._exception) | |
| : _singleResult = null, | |
| _results = <BuildResult>[], | |
| _onRun = null; | |
| final List<BuildResult> _results; | |
| final BuildResult? _singleResult; | |
| final Exception? _exception; | |
| final void Function(Target target, Environment environment)? _onRun; | |
| var _nextResult = 0; | |
| @override | |
| Future<BuildResult> build( | |
| Target target, | |
| Environment environment, { | |
| BuildSystemConfig buildSystemConfig = const BuildSystemConfig(), | |
| }) async { | |
| if (_onRun != null) { | |
| _onRun.call(target, environment); | |
| } | |
| if (_exception != null) { | |
| throw _exception; | |
| } | |
| if (_singleResult != null) { | |
| return _singleResult; | |
| } | |
| if (_nextResult >= _results.length) { | |
| throw StateError('Unexpected build request of ${target.name}'); | |
| } | |
| return _results[_nextResult++]; | |
| } | |
| @override | |
| Future<BuildResult> buildIncremental( | |
| Target target, | |
| Environment environment, | |
| BuildResult? previousBuild, | |
| ) async { | |
| if (_onRun != null) { | |
| _onRun.call(target, environment); | |
| } | |
| if (_exception != null) { | |
| throw _exception; | |
| } | |
| if (_singleResult != null) { | |
| return _singleResult; | |
| } | |
| if (_nextResult >= _results.length) { | |
| throw StateError('Unexpected buildIncremental request of ${target.name}'); | |
| } | |
| return _results[_nextResult++]; | |
| } | |
| } | |
| /// Encodes a map of key-value pairs into a comma-separated base64 encoded string. | |
| /// | |
| /// ## Example | |
| /// | |
| /// ```dart | |
| /// print(encodeDartDefines({'FLUTTER_WEB': 'true', 'FLUTTER_WEB_CANVASKIT_URL': 'https://example.com'})); | |
| /// // RkxVVFRFUl9XRUI9dHJ1ZQo=,RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL2V4YW1wbGUuY29t | |
| /// ``` | |
| String encodeDartDefinesMap(Map<String, String> defines) { | |
| final flattened = <String>[ | |
| for (final MapEntry<String, String> entry in defines.entries) '${entry.key}=${entry.value}', | |
| ]; | |
| return encodeDartDefines(flattened); | |
| } |