Move existing BindGenerator test to its own directory and to test that phase specificially, rather than the whole pipeline. Add another BindGenerator test.
134 lines
4.7 KiB
Dart
134 lines
4.7 KiB
Dart
library angular2.test.transform.integration;
|
|
|
|
import 'dart:io';
|
|
import 'package:angular2/transformer.dart';
|
|
import 'package:code_transformers/tests.dart';
|
|
import 'package:dart_style/dart_style.dart';
|
|
import 'package:unittest/unittest.dart';
|
|
|
|
import '../common/read_file.dart';
|
|
|
|
var formatter = new DartFormatter();
|
|
var transform = new AngularTransformerGroup(new TransformerOptions(
|
|
'web/index.dart', reflectionEntryPoint: 'web/index.dart'));
|
|
|
|
class IntegrationTestConfig {
|
|
final String name;
|
|
final Map<String, String> assetPathToInputPath;
|
|
final Map<String, String> assetPathToExpectedOutputPath;
|
|
|
|
IntegrationTestConfig(this.name,
|
|
{Map<String, String> inputs, Map<String, String> outputs})
|
|
: this.assetPathToInputPath = inputs,
|
|
this.assetPathToExpectedOutputPath = outputs;
|
|
}
|
|
|
|
void allTests() {
|
|
/*
|
|
* Each test has its own directory for inputs & an `expected` directory for
|
|
* expected outputs.
|
|
*
|
|
* In addition to these declared inputs, we inject a set of common inputs for
|
|
* every test.
|
|
*/
|
|
var commonInputs = {
|
|
'angular2|lib/src/core/annotations/annotations.dart':
|
|
'../../../lib/src/core/annotations/annotations.dart',
|
|
'angular2|lib/src/core/application.dart': '../common/application.dart',
|
|
'angular2|lib/src/reflection/reflection_capabilities.dart':
|
|
'../common/reflection_capabilities.dart'
|
|
};
|
|
|
|
var tests = [
|
|
new IntegrationTestConfig(
|
|
'should generate proper code for a Component defining only a selector.',
|
|
inputs: {
|
|
'a|web/index.dart': 'simple_annotation_files/index.dart',
|
|
'a|web/bar.dart': 'simple_annotation_files/bar.dart'
|
|
},
|
|
outputs: {
|
|
'a|web/bar.ngDeps.dart':
|
|
'simple_annotation_files/expected/bar.ngDeps.dart',
|
|
'a|web/index.ngDeps.dart':
|
|
'simple_annotation_files/expected/index.ngDeps.dart'
|
|
}),
|
|
new IntegrationTestConfig(
|
|
'should generate proper code for a Component using a selector defined '
|
|
'in another file.',
|
|
inputs: {
|
|
'a|web/index.dart': 'two_deps_files/index.dart',
|
|
'a|web/foo.dart': 'two_deps_files/foo.dart',
|
|
'a|web/bar.dart': 'two_deps_files/bar.dart'
|
|
},
|
|
outputs: {
|
|
'a|web/bar.ngDeps.dart': 'two_deps_files/expected/bar.ngDeps.dart'
|
|
}),
|
|
new IntegrationTestConfig(
|
|
'should generate proper code for a Component declaring a '
|
|
'componentService defined in another file.',
|
|
inputs: {
|
|
'a|web/index.dart': 'list_of_types_files/index.dart',
|
|
'a|web/foo.dart': 'list_of_types_files/foo.dart',
|
|
'a|web/bar.dart': 'list_of_types_files/bar.dart'
|
|
},
|
|
outputs: {
|
|
'a|web/bar.ngDeps.dart': 'list_of_types_files/expected/bar.ngDeps.dart'
|
|
}),
|
|
new IntegrationTestConfig(
|
|
'should generate a factory for a class with no declared ctor.',
|
|
inputs: {
|
|
'a|web/index.dart': 'synthetic_ctor_files/index.dart',
|
|
'a|web/bar.dart': 'synthetic_ctor_files/bar.dart'
|
|
},
|
|
outputs: {
|
|
'a|web/bar.ngDeps.dart': 'synthetic_ctor_files/expected/bar.ngDeps.dart'
|
|
}),
|
|
new IntegrationTestConfig('should preserve multiple annotations.',
|
|
inputs: {
|
|
'a|web/index.dart': 'two_annotations_files/index.dart',
|
|
'a|web/bar.dart': 'two_annotations_files/bar.dart',
|
|
'angular2|lib/src/core/annotations/template.dart':
|
|
'../../../lib/src/core/annotations/template.dart'
|
|
},
|
|
outputs: {
|
|
'a|web/bar.ngDeps.dart': 'two_annotations_files/expected/bar.ngDeps.dart'
|
|
}),
|
|
new IntegrationTestConfig(
|
|
'should ensure that dependencies are property chained.',
|
|
inputs: {
|
|
'a|web/index.dart': 'chained_deps_files/index.dart',
|
|
'a|web/foo.dart': 'chained_deps_files/foo.dart',
|
|
'a|web/bar.dart': 'chained_deps_files/bar.dart'
|
|
},
|
|
outputs: {
|
|
'a|web/bar.ngDeps.dart': 'chained_deps_files/expected/bar.ngDeps.dart',
|
|
'a|web/foo.ngDeps.dart': 'chained_deps_files/expected/foo.ngDeps.dart'
|
|
})
|
|
];
|
|
|
|
var cache = {};
|
|
|
|
for (var config in tests) {
|
|
|
|
// Read in input & output files.
|
|
config.assetPathToInputPath
|
|
..addAll(commonInputs)
|
|
..forEach((key, value) {
|
|
config.assetPathToInputPath[key] =
|
|
cache.putIfAbsent(value, () => _readFile(value));
|
|
});
|
|
config.assetPathToExpectedOutputPath.forEach((key, value) {
|
|
config.assetPathToExpectedOutputPath[key] = cache.putIfAbsent(value, () {
|
|
var code = _readFile(value);
|
|
return value.endsWith('dart') ? formatter.format(code) : code;
|
|
});
|
|
});
|
|
testPhases(config.name, [
|
|
[transform]
|
|
], config.assetPathToInputPath, config.assetPathToExpectedOutputPath, []);
|
|
}
|
|
}
|
|
|
|
/// Smooths over differences in CWD between IDEs and running tests in Travis.
|
|
String _readFile(String path) => readFile('integration/$path');
|