| // 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. |
| import 'dart:async'; |
| import 'dart:convert'; |
| |
| import 'id.dart'; |
| |
| /// Standard interface for writing an asset into a package's outputs. |
| abstract class AssetWriter { |
| /// Writes [bytes] to a binary file located at [id]. |
| /// |
| /// Returns a [Future] that completes after writing the asset out. |
| /// |
| /// * Throws a `PackageNotFoundException` if `id.package` is not found. |
| /// * Throws an `InvalidOutputException` if the output was not valid. |
| Future<void> writeAsBytes(AssetId id, List<int> bytes); |
| |
| /// Writes [contents] to a text file located at [id] with [encoding]. |
| /// |
| /// Returns a [Future] that completes after writing the asset out. |
| /// |
| /// * Throws a `PackageNotFoundException` if `id.package` is not found. |
| /// * Throws an `InvalidOutputException` if the output was not valid. |
| Future<void> writeAsString(AssetId id, String contents, |
| {Encoding encoding = utf8}); |
| } |
| |
| /// An [AssetWriter] which tracks all [assetsWritten] during its lifetime. |
| class AssetWriterSpy implements AssetWriter { |
| final AssetWriter _delegate; |
| final _assetsWritten = Set<AssetId>(); |
| |
| AssetWriterSpy(this._delegate); |
| |
| Iterable<AssetId> get assetsWritten => _assetsWritten; |
| |
| @override |
| Future<void> writeAsBytes(AssetId id, List<int> bytes) { |
| _assetsWritten.add(id); |
| return _delegate.writeAsBytes(id, bytes); |
| } |
| |
| @override |
| Future<void> writeAsString(AssetId id, String contents, |
| {Encoding encoding = utf8}) { |
| _assetsWritten.add(id); |
| return _delegate.writeAsString(id, contents, encoding: encoding); |
| } |
| } |