refactor(dart/transform): Test directive processor using protos

Directly test the `NgDepsModel` object created by the
`DirectiveProcessor` rather than string comparing output Dart code.
This commit is contained in:
Tim Blasi
2015-09-15 10:27:54 -07:00
parent 045cc8269f
commit 267121ee17
27 changed files with 347 additions and 715 deletions

View File

@ -19,7 +19,7 @@ Future<dynamic> initZoned(Transform t, _SimpleCallback fn) =>
Future<dynamic> setZoned(BuildLogger logger, _SimpleCallback fn) async {
return runZoned(() async {
try {
await fn();
return await fn();
} on AnalyzerError catch (e) {
// Do not worry about printing the stack trace, barback will handle that
// on its own when it catches the rethrown exception.

View File

@ -8,6 +8,7 @@ import 'package:angular2/src/transform/common/asset_reader.dart';
import 'package:angular2/src/transform/common/async_string_writer.dart';
import 'package:angular2/src/transform/common/code/ng_deps_code.dart';
import 'package:angular2/src/transform/common/logging.dart';
import 'package:angular2/src/transform/common/model/ng_deps_model.pb.dart';
import 'package:angular2/src/transform/common/xhr_impl.dart';
import 'package:angular2/src/transform/common/ng_meta.dart';
import 'package:barback/barback.dart' show AssetId;
@ -24,7 +25,7 @@ import 'inliner.dart';
/// If no Angular 2 `Directive`s are found in `code`, returns the empty
/// string unless `forceGenerate` is true, in which case an empty ngDeps
/// file is created.
Future<String> createNgDeps(AssetReader reader, AssetId assetId,
Future<NgDepsModel> createNgDeps(AssetReader reader, AssetId assetId,
AnnotationMatcher annotationMatcher, NgMeta ngMeta,
{bool inlineViews}) async {
// TODO(kegluneq): Shortcut if we can determine that there are no
@ -64,10 +65,7 @@ Future<String> createNgDeps(AssetReader reader, AssetId assetId,
await inlineViewProps(new XhrImpl(reader, assetId), ngDepsModel);
}
var buffer = new StringBuffer();
var ngDepsWriter = new NgDepsWriter(buffer);
ngDepsWriter.writeNgDepsModel(ngDepsModel);
return '$buffer';
return ngDepsModel;
}
/// Processes `visitor.parts`, reading and appending their contents to the

View File

@ -4,6 +4,7 @@ import 'dart:async';
import 'dart:convert';
import 'package:angular2/src/transform/common/asset_reader.dart';
import 'package:angular2/src/transform/common/code/ng_deps_code.dart';
import 'package:angular2/src/transform/common/logging.dart' as log;
import 'package:angular2/src/transform/common/names.dart';
import 'package:angular2/src/transform/common/options.dart';
@ -35,17 +36,20 @@ class DirectiveProcessor extends Transformer {
var asset = transform.primaryInput;
var reader = new AssetReader.fromTransform(transform);
var ngMeta = new NgMeta.empty();
var ngDepsSrc = await createNgDeps(
var ngDepsModel = await createNgDeps(
reader, asset.id, options.annotationMatcher, ngMeta,
inlineViews: options.inlineViews);
if (ngDepsSrc != null && ngDepsSrc.isNotEmpty) {
if (ngDepsModel != null) {
var ngDepsAssetId =
transform.primaryInput.id.changeExtension(DEPS_EXTENSION);
if (await transform.hasInput(ngDepsAssetId)) {
log.logger.error('Clobbering ${ngDepsAssetId}. '
'This probably will not end well');
}
transform.addOutput(new Asset.fromString(ngDepsAssetId, ngDepsSrc));
var buf = new StringBuffer();
var writer = new NgDepsWriter(buf);
writer.writeNgDepsModel(ngDepsModel);
transform.addOutput(new Asset.fromString(ngDepsAssetId, '$buf'));
}
if (!ngMeta.isEmpty) {
var ngAliasesId =