Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(589)

Unified Diff: pkg/barback/test/utils.dart

Issue 23311006: Add the ability to dynamically modify transforms to barback. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes. Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
« no previous file with comments | « pkg/barback/test/package_graph/transform_test.dart ('k') | sdk/lib/_internal/pub/lib/src/pub_package_provider.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698