| Index: pkg/barback/test/utils.dart
|
| diff --git a/pkg/barback/test/utils.dart b/pkg/barback/test/utils.dart
|
| index 99a7ec1d19d776d8101c08aeef52dc25a0a7bba2..cdeab38873022148a242bcf0ef7147f6682bf051 100644
|
| --- a/pkg/barback/test/utils.dart
|
| +++ b/pkg/barback/test/utils.dart
|
| @@ -61,9 +61,38 @@ void initGraph([assets,
|
| if (assets == null) assets = [];
|
| if (transformers == null) transformers = {};
|
|
|
| - _provider = new MockProvider(assets, transformers);
|
| + var assetList;
|
| + if (assets is Map) {
|
| + assetList = assets.keys.map((asset) {
|
| + var id = new AssetId.parse(asset);
|
| + return new _MockAsset(id, assets[asset]);
|
| + });
|
| + } else if (assets is Iterable) {
|
| + assetList = assets.map((asset) {
|
| + var id = new AssetId.parse(asset);
|
| + var contents = pathos.basenameWithoutExtension(id.path);
|
| + return new _MockAsset(id, contents);
|
| + });
|
| + }
|
| +
|
| + var assetMap = mapMapValues(groupBy(assetList, (asset) => asset.id.package),
|
| + (package, assets) => new AssetSet.from(assets));
|
| +
|
| + // Make sure that packages that have transformers but no assets are considered
|
| + // by MockProvider to exist.
|
| + for (var package in transformers.keys) {
|
| + assetMap.putIfAbsent(package, () => new AssetSet());
|
| + }
|
| +
|
| + _provider = new MockProvider(assetMap);
|
| _barback = new Barback(_provider);
|
| _nextBuildResult = 0;
|
| +
|
| + transformers.forEach(_barback.updateTransformers);
|
| +
|
| + // There should be one successful build after adding all the transformers but
|
| + // before adding any sources.
|
| + if (!transformers.isEmpty) buildShouldSucceed();
|
| }
|
|
|
| /// Updates [assets] in the current [PackageProvider].
|
| @@ -102,6 +131,13 @@ void removeSources(Iterable assets) {
|
| void removeSourcesSync(Iterable assets) =>
|
| _barback.removeSources(_parseAssets(assets));
|
|
|
| +/// Sets the transformers for [package] to [transformers].
|
| +void updateTransformers(String package,
|
| + Iterable<Iterable<Transformers>> transformers) {
|
| + schedule(() => _barback.updateTransformers(package, transformers),
|
| + "updating transformers for $package");
|
| +}
|
| +
|
| /// Parse a list of strings or [AssetId]s into a list of [AssetId]s.
|
| List<AssetId> _parseAssets(Iterable assets) {
|
| return assets.map((asset) {
|
| @@ -340,9 +376,9 @@ Future _futureShouldNotCompleteUntil(Future future, Future delay,
|
|
|
| /// An [AssetProvider] that provides the given set of assets.
|
| class MockProvider implements PackageProvider {
|
| - Iterable<String> get packages => _packages.keys;
|
| + Iterable<String> get packages => _assets.keys;
|
|
|
| - Map<String, _MockPackage> _packages;
|
| + Map<String, AssetSet> _assets;
|
|
|
| /// The set of assets for which [MockLoadException]s should be emitted if
|
| /// they're loaded.
|
| @@ -366,42 +402,19 @@ class MockProvider implements PackageProvider {
|
| _pauseCompleter = null;
|
| }
|
|
|
| - MockProvider(assets,
|
| - Map<String, Iterable<Iterable<Transformer>>> transformers) {
|
| - var assetList;
|
| - if (assets is Map) {
|
| - assetList = assets.keys.map((asset) {
|
| - var id = new AssetId.parse(asset);
|
| - return new _MockAsset(id, assets[asset]);
|
| - });
|
| - } else if (assets is Iterable) {
|
| - assetList = assets.map((asset) {
|
| - var id = new AssetId.parse(asset);
|
| - var contents = pathos.basenameWithoutExtension(id.path);
|
| - return new _MockAsset(id, contents);
|
| - });
|
| - }
|
| -
|
| - _packages = mapMapValues(groupBy(assetList, (asset) => asset.id.package),
|
| - (package, assets) {
|
| - var packageTransformers = transformers[package];
|
| - if (packageTransformers == null) packageTransformers = [];
|
| - return new _MockPackage(
|
| - new AssetSet.from(assets), packageTransformers.toList());
|
| - });
|
| -
|
| + MockProvider(this._assets) {
|
| // If there are no assets or transformers, add a dummy package. This better
|
| // simulates the real world, where there'll always be at least the
|
| // entrypoint package.
|
| - if (_packages.isEmpty) {
|
| - _packages = {"app": new _MockPackage(new AssetSet(), [])};
|
| + if (_assets.isEmpty) {
|
| + _assets = {"app": new AssetSet()};
|
| }
|
| }
|
|
|
| void _modifyAsset(String name, String contents) {
|
| var id = new AssetId.parse(name);
|
| _errors.remove(id);
|
| - _packages[id.package].assets[id].contents = contents;
|
| + _assets[id.package][id].contents = contents;
|
| }
|
|
|
| void _setAssetError(String name) => _errors.add(new AssetId.parse(name));
|
| @@ -411,23 +424,15 @@ class MockProvider implements PackageProvider {
|
| throw new UnimplementedError("Doesn't handle 'within' yet.");
|
| }
|
|
|
| - return _packages[package].assets.map((asset) => asset.id);
|
| - }
|
| -
|
| - Iterable<Iterable<Transformer>> getTransformers(String package) {
|
| - var mockPackage = _packages[package];
|
| - if (mockPackage == null) {
|
| - throw new ArgumentError("No package named $package.");
|
| - }
|
| - return mockPackage.transformers;
|
| + return _assets[package].map((asset) => asset.id);
|
| }
|
|
|
| Future<Asset> getAsset(AssetId id) {
|
| // Eagerly load the asset so we can test an asset's value changing between
|
| // when a load starts and when it finishes.
|
| - var package = _packages[id.package];
|
| + var assets = _assets[id.package];
|
| var asset;
|
| - if (package != null) asset = package.assets[id];
|
| + if (assets != null) asset = assets[id];
|
|
|
| var hasError = _errors.contains(id);
|
|
|
| @@ -455,16 +460,6 @@ class MockLoadException implements Exception {
|
| String toString() => "Error loading $id.";
|
| }
|
|
|
| -/// Used by [MockProvider] to keep track of which assets and transformers exist
|
| -/// for each package.
|
| -class _MockPackage {
|
| - final AssetSet assets;
|
| - final List<List<Transformer>> transformers;
|
| -
|
| - _MockPackage(this.assets, Iterable<Iterable<Transformer>> transformers)
|
| - : transformers = transformers.map((phase) => phase.toList()).toList();
|
| -}
|
| -
|
| /// An implementation of [Asset] that never hits the file system.
|
| class _MockAsset implements Asset {
|
| final AssetId id;
|
|
|