test(dart/transform): e2e test inliner_for_test
Add an e2e test for the `inliner_for_test` transformer.
This commit is contained in:
parent
f638834fcf
commit
349416ea53
|
@ -7,19 +7,22 @@ import 'package:analyzer/src/generated/ast.dart';
|
||||||
import 'package:angular2/src/core/compiler/xhr.dart' show XHR;
|
import 'package:angular2/src/core/compiler/xhr.dart' show XHR;
|
||||||
import 'package:angular2/src/transform/common/asset_reader.dart';
|
import 'package:angular2/src/transform/common/asset_reader.dart';
|
||||||
import 'package:barback/barback.dart';
|
import 'package:barback/barback.dart';
|
||||||
|
import 'package:dart_style/dart_style.dart';
|
||||||
|
|
||||||
import 'common/asset_reader.dart';
|
import 'common/asset_reader.dart';
|
||||||
import 'common/async_string_writer.dart';
|
import 'common/async_string_writer.dart';
|
||||||
import 'common/logging.dart';
|
import 'common/logging.dart';
|
||||||
|
import 'common/options_reader.dart';
|
||||||
import 'common/url_resolver.dart';
|
import 'common/url_resolver.dart';
|
||||||
import 'common/xhr_impl.dart';
|
import 'common/xhr_impl.dart';
|
||||||
import 'directive_processor/inliner.dart';
|
import 'directive_processor/inliner.dart';
|
||||||
|
|
||||||
/// Processes .dart files and inlines `templateUrl` and styleUrls` values.
|
/// Processes .dart files and inlines `templateUrl` and styleUrls` values.
|
||||||
class InlinerForTest extends Transformer implements DeclaringTransformer {
|
class InlinerForTest extends Transformer implements DeclaringTransformer {
|
||||||
final BarbackSettings settings;
|
final DartFormatter _formatter;
|
||||||
|
|
||||||
InlinerForTest(this.settings);
|
InlinerForTest({bool formatCode: false})
|
||||||
|
: _formatter = formatCode ? new DartFormatter() : null;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool isPrimary(AssetId id) => id.extension.endsWith('dart');
|
bool isPrimary(AssetId id) => id.extension.endsWith('dart');
|
||||||
|
@ -40,13 +43,17 @@ class InlinerForTest extends Transformer implements DeclaringTransformer {
|
||||||
if (inlinedCode == null || inlinedCode.isEmpty) {
|
if (inlinedCode == null || inlinedCode.isEmpty) {
|
||||||
transform.addOutput(transform.primaryInput);
|
transform.addOutput(transform.primaryInput);
|
||||||
} else {
|
} else {
|
||||||
|
if (_formatter != null) {
|
||||||
|
inlinedCode = _formatter.format(inlinedCode);
|
||||||
|
}
|
||||||
transform.addOutput(new Asset.fromString(primaryId, inlinedCode));
|
transform.addOutput(new Asset.fromString(primaryId, inlinedCode));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
factory InlinerForTest.asPlugin(BarbackSettings settings) {
|
factory InlinerForTest.asPlugin(BarbackSettings settings) {
|
||||||
return new InlinerForTest(settings);
|
return new InlinerForTest(
|
||||||
|
formatCode: parseBarbackSettings(settings).formatCode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,10 +96,10 @@ class _ViewPropInliner extends ToSourceVisitor {
|
||||||
switch (keyString) {
|
switch (keyString) {
|
||||||
case 'templateUrl':
|
case 'templateUrl':
|
||||||
_populateTemplateUrl(node.expression);
|
_populateTemplateUrl(node.expression);
|
||||||
break;
|
return null;
|
||||||
case 'styleUrls':
|
case 'styleUrls':
|
||||||
_populateStyleUrls(node.expression);
|
_populateStyleUrls(node.expression);
|
||||||
break;
|
return null;
|
||||||
}
|
}
|
||||||
return super.visitNamedExpression(node);
|
return super.visitNamedExpression(node);
|
||||||
}
|
}
|
||||||
|
@ -113,7 +120,7 @@ class _ViewPropInliner extends ToSourceVisitor {
|
||||||
logger.warning('style url is not a String (${url})');
|
logger.warning('style url is not a String (${url})');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_writer.println('],');
|
_writer.println(']');
|
||||||
}
|
}
|
||||||
|
|
||||||
void _populateTemplateUrl(Expression value) {
|
void _populateTemplateUrl(Expression value) {
|
||||||
|
@ -124,7 +131,7 @@ class _ViewPropInliner extends ToSourceVisitor {
|
||||||
}
|
}
|
||||||
_writer.print("template: r'''");
|
_writer.print("template: r'''");
|
||||||
_writer.asyncPrint(_readOrEmptyString(url));
|
_writer.asyncPrint(_readOrEmptyString(url));
|
||||||
_writer.println("''',");
|
_writer.println("'''");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Attempts to read the content from [url]. If [url] is relative, uses
|
/// Attempts to read the content from [url]. If [url] is relative, uses
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
library examples.src.hello_world.absolute_url_expression_files;
|
||||||
|
|
||||||
|
import 'package:angular2/angular2.dart'
|
||||||
|
show Component, Directive, View, NgElement;
|
||||||
|
|
||||||
|
@Component(selector: 'hello-app')
|
||||||
|
@View(
|
||||||
|
template: r'''{{greeting}}''',
|
||||||
|
styles: const [r'''.greeting { .color: blue; }''',])
|
||||||
|
class HelloCmp {}
|
||||||
|
|
||||||
|
@Injectable() hello() {}
|
|
@ -9,5 +9,4 @@ import 'package:angular2/angular2.dart'
|
||||||
styleUrls: const ['package:other_package/template.css'])
|
styleUrls: const ['package:other_package/template.css'])
|
||||||
class HelloCmp {}
|
class HelloCmp {}
|
||||||
|
|
||||||
@Injectable()
|
@Injectable() hello() {}
|
||||||
hello() {}
|
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
library angular2.test.transform.inliner_for_test.all_tests;
|
library angular2.test.transform.inliner_for_test.all_tests;
|
||||||
|
|
||||||
import 'dart:async';
|
|
||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
import 'package:angular2/src/transform/common/asset_reader.dart';
|
import 'package:angular2/src/transform/common/asset_reader.dart';
|
||||||
import 'package:angular2/src/transform/inliner_for_test.dart';
|
import 'package:angular2/src/transform/inliner_for_test.dart';
|
||||||
import 'package:barback/barback.dart';
|
import 'package:barback/barback.dart';
|
||||||
|
import 'package:code_transformers/tests.dart';
|
||||||
import 'package:guinness/guinness.dart';
|
import 'package:guinness/guinness.dart';
|
||||||
import 'package:dart_style/dart_style.dart';
|
import 'package:dart_style/dart_style.dart';
|
||||||
|
|
||||||
|
@ -15,10 +13,11 @@ main() {
|
||||||
allTests();
|
allTests();
|
||||||
}
|
}
|
||||||
|
|
||||||
allTests() {
|
|
||||||
AssetReader absoluteReader;
|
|
||||||
DartFormatter formatter = new DartFormatter();
|
DartFormatter formatter = new DartFormatter();
|
||||||
|
|
||||||
|
void allTests() {
|
||||||
|
AssetReader absoluteReader;
|
||||||
|
|
||||||
beforeEach(() {
|
beforeEach(() {
|
||||||
absoluteReader = new TestAssetReader();
|
absoluteReader = new TestAssetReader();
|
||||||
});
|
});
|
||||||
|
@ -79,6 +78,68 @@ allTests() {
|
||||||
|
|
||||||
expect(output).toContain("{{greeting}}");
|
expect(output).toContain("{{greeting}}");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
_runAbsoluteUrlEndToEndTest();
|
||||||
|
_runMultiStylesEndToEndTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
AssetId _assetId(String path) => new AssetId('a', 'inliner_for_test/$path');
|
AssetId _assetId(String path) => new AssetId('a', 'inliner_for_test/$path');
|
||||||
|
|
||||||
|
void _runAbsoluteUrlEndToEndTest() {
|
||||||
|
InlinerForTest transformer = new InlinerForTest(formatCode: true);
|
||||||
|
var inputMap = {
|
||||||
|
'a|absolute_url_expression_files/hello.dart':
|
||||||
|
_readFile('absolute_url_expression_files/hello.dart'),
|
||||||
|
'other_package|lib/template.css':
|
||||||
|
_readFile('absolute_url_expression_files/template.css'),
|
||||||
|
'other_package|lib/template.html':
|
||||||
|
_readFile('absolute_url_expression_files/template.html')
|
||||||
|
};
|
||||||
|
var outputMap = {
|
||||||
|
'a|absolute_url_expression_files/hello.dart':
|
||||||
|
_readFile('absolute_url_expression_files/expected/hello.dart')
|
||||||
|
};
|
||||||
|
testPhases(
|
||||||
|
'Inliner For Test should inline `templateUrl` and `styleUrls` values '
|
||||||
|
'expressed as absolute urls',
|
||||||
|
[
|
||||||
|
[transformer]
|
||||||
|
],
|
||||||
|
inputMap,
|
||||||
|
outputMap,
|
||||||
|
[]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _runMultiStylesEndToEndTest() {
|
||||||
|
InlinerForTest transformer = new InlinerForTest(formatCode: true);
|
||||||
|
var inputMap = {
|
||||||
|
'pkg|web/hello.dart': _readFile('multiple_style_urls_files/hello.dart'),
|
||||||
|
'pkg|web/template.css': _readFile('multiple_style_urls_files/template.css'),
|
||||||
|
'pkg|web/template_other.css':
|
||||||
|
_readFile('multiple_style_urls_files/template_other.css'),
|
||||||
|
'pkg|web/template.html':
|
||||||
|
_readFile('multiple_style_urls_files/template.html')
|
||||||
|
};
|
||||||
|
var outputMap = {
|
||||||
|
'pkg|web/hello.dart':
|
||||||
|
_readFile('multiple_style_urls_files/expected/hello.dart')
|
||||||
|
};
|
||||||
|
testPhases(
|
||||||
|
'Inliner For Test should inline `templateUrl` and `styleUrls` values '
|
||||||
|
'expressed as relative urls',
|
||||||
|
[
|
||||||
|
[transformer]
|
||||||
|
],
|
||||||
|
inputMap,
|
||||||
|
outputMap,
|
||||||
|
[]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Smooths over differences in CWD between IDEs and running tests in Travis.
|
||||||
|
String _readFile(String path) {
|
||||||
|
var code = readFile('inliner_for_test/$path');
|
||||||
|
if (path.endsWith('.dart')) {
|
||||||
|
code = formatter.format(code);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
library examples.src.hello_world.multiple_style_urls_files;
|
||||||
|
|
||||||
|
import 'package:angular2/angular2.dart'
|
||||||
|
show Component, Directive, View, NgElement;
|
||||||
|
|
||||||
|
@Component(selector: 'hello-app')
|
||||||
|
@View(
|
||||||
|
template: r'''{{greeting}}''',
|
||||||
|
styles: const [
|
||||||
|
r'''.greeting { .color: blue; }''',
|
||||||
|
r'''.hello { .color: red; }''',
|
||||||
|
])
|
||||||
|
class HelloCmp {}
|
Loading…
Reference in New Issue