refactor(dart/transform): Separate log & zone code

- Move zone-related code out of logger.dart and into zone.dart.
- Rename `logger` => `log`.
- Add the ability to specify a zone-local `TemplateCompiler`.
This commit is contained in:
Tim Blasi
2015-11-04 17:05:35 -08:00
parent 4909feddde
commit 5d9b1e90dc
29 changed files with 264 additions and 200 deletions

View File

@ -1,11 +1,13 @@
library angular2.test.transform.deferred_rewriter.all_tests;
import 'package:barback/barback.dart';
import 'package:angular2/src/transform/deferred_rewriter/transformer.dart';
import 'package:angular2/src/transform/common/logging.dart' as log;
import 'package:dart_style/dart_style.dart';
import 'package:guinness/guinness.dart';
import 'package:path/path.dart' as path;
import 'package:angular2/src/transform/common/zone.dart' as zone;
import 'package:angular2/src/transform/deferred_rewriter/transformer.dart';
import '../common/read_file.dart';
import '../common/recording_logger.dart';
@ -35,7 +37,7 @@ void allTests() {
void _testRewriteDeferredLibraries(String name, String inputPath) {
it(name, () {
return log.setZoned(new RecordingLogger(), () async {
return zone.exec(() async {
var inputId = _assetIdForPath(inputPath);
var reader = new TestAssetReader();
var expectedPath = path.join(
@ -50,7 +52,7 @@ void _testRewriteDeferredLibraries(String name, String inputPath) {
} else {
expect(formatter.format(output)).toEqual(formatter.format(input));
}
});
}, log: new RecordingLogger());
});
}

View File

@ -3,15 +3,16 @@ library angular2.test.transform.directive_metadata_linker.all_tests;
import 'dart:async';
import 'dart:convert';
import 'package:angular2/src/transform/common/asset_reader.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/model/import_export_model.pb.dart';
import 'package:angular2/src/transform/directive_metadata_linker/ng_meta_linker.dart';
import 'package:barback/barback.dart';
import 'package:dart_style/dart_style.dart';
import 'package:guinness/guinness.dart';
import 'package:angular2/src/transform/common/asset_reader.dart';
import 'package:angular2/src/transform/common/names.dart';
import 'package:angular2/src/transform/common/model/import_export_model.pb.dart';
import 'package:angular2/src/transform/common/zone.dart' as zone;
import 'package:angular2/src/transform/directive_metadata_linker/ng_meta_linker.dart';
import '../common/ng_meta_helper.dart';
import '../common/read_file.dart';
import '../common/recording_logger.dart';
@ -172,6 +173,6 @@ void allTests() {
}
Future<NgMeta> _testLink(AssetReader reader, AssetId assetId) {
return log.setZoned(
new RecordingLogger(), () => linkDirectiveMetadata(reader, assetId));
return zone.exec(() => linkDirectiveMetadata(reader, assetId),
log: new RecordingLogger());
}

View File

@ -2,20 +2,22 @@ library angular2.test.transform.directive_processor.all_tests;
import 'dart:async';
import 'package:angular2/src/core/change_detection/change_detection.dart';
import 'package:angular2/src/core/linker/interfaces.dart' show LifecycleHooks;
import 'package:angular2/src/core/dom/html_adapter.dart';
import 'package:angular2/src/transform/directive_processor/rewriter.dart';
import 'package:angular2/src/transform/common/annotation_matcher.dart';
import 'package:angular2/src/transform/common/code/ng_deps_code.dart';
import 'package:angular2/src/transform/common/asset_reader.dart';
import 'package:angular2/src/transform/common/logging.dart' as log;
import 'package:angular2/src/transform/common/model/ng_deps_model.pb.dart';
import 'package:angular2/src/transform/common/model/reflection_info_model.pb.dart';
import 'package:angular2/src/transform/common/ng_meta.dart';
import 'package:barback/barback.dart';
import 'package:dart_style/dart_style.dart';
import 'package:guinness/guinness.dart';
import 'package:angular2/src/core/change_detection/change_detection.dart';
import 'package:angular2/src/core/dom/html_adapter.dart';
import 'package:angular2/src/core/linker/interfaces.dart' show LifecycleHooks;
import 'package:angular2/src/transform/common/annotation_matcher.dart';
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/model/ng_deps_model.pb.dart';
import 'package:angular2/src/transform/common/model/reflection_info_model.pb.dart';
import 'package:angular2/src/transform/common/ng_meta.dart';
import 'package:angular2/src/transform/common/zone.dart' as zone;
import 'package:angular2/src/transform/directive_processor/rewriter.dart';
import '../common/read_file.dart';
import '../common/recording_logger.dart';
@ -494,32 +496,31 @@ void allTests() {
..prefix = 'dep2');
});
it('should merge `outputs` from the annotation and fields.',
() async {
it('should merge `outputs` from the annotation and fields.', () async {
var model = await _testCreateModel('directives_files/components.dart');
expect(model.types['ComponentWithOutputs'].outputs).
toEqual({'a': 'a', 'b': 'b', 'c': 'renamed'});
expect(model.types['ComponentWithOutputs'].outputs)
.toEqual({'a': 'a', 'b': 'b', 'c': 'renamed'});
});
it('should merge `inputs` from the annotation and fields.',
() async {
it('should merge `inputs` from the annotation and fields.', () async {
var model = await _testCreateModel('directives_files/components.dart');
expect(model.types['ComponentWithInputs'].inputs).
toEqual({'a': 'a', 'b': 'b', 'c': 'renamed'});
expect(model.types['ComponentWithInputs'].inputs)
.toEqual({'a': 'a', 'b': 'b', 'c': 'renamed'});
});
it('should merge host bindings from the annotation and fields.',
() async {
it('should merge host bindings from the annotation and fields.', () async {
var model = await _testCreateModel('directives_files/components.dart');
expect(model.types['ComponentWithHostBindings'].hostProperties).
toEqual({'a': 'a', 'b': 'b', 'renamed': 'c'});
expect(model.types['ComponentWithHostBindings'].hostProperties)
.toEqual({'a': 'a', 'b': 'b', 'renamed': 'c'});
});
it('should merge host listeners from the annotation and fields.',
() async {
it('should merge host listeners from the annotation and fields.', () async {
var model = await _testCreateModel('directives_files/components.dart');
expect(model.types['ComponentWithHostListeners'].hostListeners).
toEqual({'a': 'onA()', 'b': 'onB()', 'c': 'onC(\$event.target,\$event.target.value)'});
expect(model.types['ComponentWithHostListeners'].hostListeners).toEqual({
'a': 'onA()',
'b': 'onB()',
'c': 'onC(\$event.target,\$event.target.value)'
});
});
it('should warn if @Component has a `template` and @View is present.',
@ -568,7 +569,7 @@ Future<NgMeta> _testCreateModel(String inputPath,
AssetReader reader,
TransformLogger logger}) {
if (logger == null) logger = new RecordingLogger();
return log.setZoned(logger, () async {
return zone.exec(() async {
var inputId = _assetIdForPath(inputPath);
if (reader == null) {
reader = new TestAssetReader();
@ -580,7 +581,7 @@ Future<NgMeta> _testCreateModel(String inputPath,
var annotationMatcher = new AnnotationMatcher()..addAll(customDescriptors);
return createNgMeta(reader, inputId, annotationMatcher);
});
}, log: logger);
}
AssetId _assetIdForPath(String path) =>

View File

@ -2,16 +2,17 @@ library angular2.test.transform.inliner_for_test.all_tests;
import 'dart:async';
import 'package:angular2/src/transform/common/annotation_matcher.dart';
import 'package:angular2/src/transform/common/asset_reader.dart';
import 'package:angular2/src/transform/common/logging.dart' as log;
import 'package:angular2/src/transform/common/options.dart';
import 'package:angular2/src/transform/inliner_for_test/transformer.dart';
import 'package:barback/barback.dart';
import 'package:code_transformers/tests.dart';
import 'package:guinness/guinness.dart';
import 'package:dart_style/dart_style.dart';
import 'package:angular2/src/transform/common/annotation_matcher.dart';
import 'package:angular2/src/transform/common/asset_reader.dart';
import 'package:angular2/src/transform/common/options.dart';
import 'package:angular2/src/transform/common/zone.dart' as zone;
import 'package:angular2/src/transform/inliner_for_test/transformer.dart';
import '../common/read_file.dart';
import '../common/recording_logger.dart';
@ -118,8 +119,8 @@ void allTests() {
}
Future<String> _testInline(AssetReader reader, AssetId assetId) {
return log.setZoned(
new RecordingLogger(), () => inline(reader, assetId, annotationMatcher));
return zone.exec(() => inline(reader, assetId, annotationMatcher),
log: new RecordingLogger());
}
AssetId _assetId(String path) => new AssetId('a', 'inliner_for_test/$path');

View File

@ -4,15 +4,16 @@ import 'dart:async';
import 'dart:convert';
import 'package:barback/barback.dart';
import 'package:angular2/src/core/change_detection/codegen_name_util.dart'
show CONTEXT_ACCESSOR;
import 'package:angular2/src/core/dom/html_adapter.dart';
import 'package:angular2/src/transform/common/logging.dart' as log;
import 'package:angular2/src/transform/template_compiler/generator.dart';
import 'package:dart_style/dart_style.dart';
import 'package:path/path.dart' as path;
import 'package:guinness/guinness.dart';
import 'package:angular2/src/core/change_detection/codegen_name_util.dart'
show CONTEXT_ACCESSOR;
import 'package:angular2/src/core/dom/html_adapter.dart';
import 'package:angular2/src/transform/template_compiler/generator.dart';
import 'package:angular2/src/transform/common/zone.dart' as zone;
import '../common/compile_directive_metadata/ng_for.ng_meta.dart' as ngMeta;
import '../common/ng_meta_helper.dart';
import '../common/read_file.dart';
@ -76,8 +77,10 @@ void allTests() {
Future<String> process(AssetId assetId, {List<String> ambientDirectives}) {
logger = new RecordingLogger();
return log.setZoned(logger, () => processTemplates(reader, assetId,
ambientDirectives: ambientDirectives));
return zone.exec(
() => processTemplates(reader, assetId,
ambientDirectives: ambientDirectives),
log: logger);
}
// TODO(tbosch): This is just a temporary test that makes sure that the dart
@ -357,7 +360,8 @@ void allTests() {
barNgMeta.aliases['AMBIENT'] = [barComponentMeta.type.name];
updateReader();
final outputs = await process(fooAssetId, ambientDirectives: ['package:a/bar.dart#AMBIENT']);
final outputs = await process(fooAssetId,
ambientDirectives: ['package:a/bar.dart#AMBIENT']);
final ngDeps = outputs.ngDeps;
expect(ngDeps).toBeNotNull();
expect(outputs.templatesCode)
@ -374,7 +378,8 @@ void allTests() {
barNgMeta.types['AMBIENT'] = barComponentMeta;
updateReader();
final outputs = await process(fooAssetId, ambientDirectives: ['package:a/bar.dart#AMBIENT']);
final outputs = await process(fooAssetId,
ambientDirectives: ['package:a/bar.dart#AMBIENT']);
final ngDeps = outputs.ngDeps;
expect(ngDeps).toBeNotNull();
expect(outputs.templatesCode)
@ -388,21 +393,25 @@ void allTests() {
expect(ngDeps).toBeNotNull();
});
it('should work when the ambient directives config is not formatted properly.', () async {
it('should work when the ambient directives config is not formatted properly.',
() async {
final outputs = await process(fooAssetId, ambientDirectives: ['INVALID']);
final ngDeps = outputs.ngDeps;
expect(ngDeps).toBeNotNull();
});
it('should work when the file with ambient directives cannot be found.', () async {
final outputs = await process(
fooAssetId, ambientDirectives: ['package:a/invalid.dart#AMBIENT']);
it('should work when the file with ambient directives cannot be found.',
() async {
final outputs = await process(fooAssetId,
ambientDirectives: ['package:a/invalid.dart#AMBIENT']);
final ngDeps = outputs.ngDeps;
expect(ngDeps).toBeNotNull();
});
it('should work when the ambient directives token cannot be found.', () async {
final outputs = await process(fooAssetId, ambientDirectives: ['package:a/bar.dart#AMBIENT']);
it('should work when the ambient directives token cannot be found.',
() async {
final outputs = await process(fooAssetId,
ambientDirectives: ['package:a/bar.dart#AMBIENT']);
final ngDeps = outputs.ngDeps;
expect(ngDeps).toBeNotNull();
});