blob: 68ba81f64a7b12d7893aaa06d86681b8026ebd66 [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.
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);
}
}