| Index: packages/initialize/test/transformer_test.dart
|
| diff --git a/packages/initialize/test/transformer_test.dart b/packages/initialize/test/transformer_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3b637c76f50250e8f600e9969bc22c77ee870ceb
|
| --- /dev/null
|
| +++ b/packages/initialize/test/transformer_test.dart
|
| @@ -0,0 +1,421 @@
|
| +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +library initialize.transformer_test;
|
| +
|
| +import 'common.dart';
|
| +import 'package:analyzer/src/generated/element.dart';
|
| +import 'package:dart_style/dart_style.dart';
|
| +import 'package:initialize/transformer.dart';
|
| +import 'package:unittest/compact_vm_config.dart';
|
| +import 'package:unittest/unittest.dart';
|
| +
|
| +var formatter = new DartFormatter();
|
| +
|
| +main() {
|
| + useCompactVMConfiguration();
|
| +
|
| + group('Html entry points', htmlEntryPointTests);
|
| + group('Dart entry points', dartEntryPointTests);
|
| + group('InitializerPlugins', pluginTests);
|
| +}
|
| +
|
| +void htmlEntryPointTests() {
|
| + var phases = [[new InitializeTransformer(['web/*.html'])]];
|
| +
|
| + testPhases('basic', phases, {
|
| + 'a|web/index.html': '''
|
| + <html><head></head><body>
|
| + <script type="application/dart" src="index.dart"></script>
|
| + </body></html>
|
| + '''.replaceAll(' ', ''),
|
| + 'a|web/index.dart': '''
|
| + library web_foo;
|
| +
|
| + import 'foo.dart';
|
| + ''',
|
| + 'a|web/foo.dart': '''
|
| + @constInit
|
| + library foo;
|
| +
|
| + import 'package:initialize/initialize.dart';
|
| + import 'package:test_initializers/common.dart';
|
| + import 'package:bar/bar.dart';
|
| +
|
| + @constInit
|
| + class Foo extends Bar {}
|
| +
|
| + @initMethod
|
| + foo() {}
|
| + ''',
|
| + 'bar|lib/bar.dart': '''
|
| + @DynamicInit('bar')
|
| + @DynamicInit('bar2')
|
| + library bar;
|
| +
|
| + import 'package:initialize/initialize.dart';
|
| + import 'package:test_initializers/common.dart';
|
| + import 'baz.dart';
|
| +
|
| + @DynamicInit('Bar')
|
| + @DynamicInit('Bar2')
|
| + class Bar {}
|
| +
|
| + @DynamicInit('bar()')
|
| + @initMethod
|
| + bar() {}
|
| + ''',
|
| + 'bar|lib/baz.dart': '''
|
| + @constInit
|
| + library baz;
|
| +
|
| + import 'package:test_initializers/common.dart';
|
| + ''',
|
| + // Mock out the Initialize package plus some initializers.
|
| + 'initialize|lib/initialize.dart': mockInitialize,
|
| + 'test_initializers|lib/common.dart': commonInitializers,
|
| + }, {
|
| + 'a|web/index.html': '''
|
| + <html><head></head><body>
|
| + <script type="application/dart" src="index.initialize.dart"></script>
|
| +
|
| + </body></html>'''.replaceAll(' ', ''),
|
| + 'a|web/index.initialize.dart': formatter.format('''
|
| + import 'package:initialize/src/static_loader.dart';
|
| + import 'package:initialize/initialize.dart';
|
| + import 'index.dart' as i0;
|
| + import 'package:bar/baz.dart' as i1;
|
| + import 'package:test_initializers/common.dart' as i2;
|
| + import 'package:bar/bar.dart' as i3;
|
| + import 'package:initialize/initialize.dart' as i4;
|
| + import 'foo.dart' as i5;
|
| +
|
| + main() {
|
| + initializers.addAll([
|
| + new InitEntry(i2.constInit, const LibraryIdentifier(#baz, 'bar', 'baz.dart')),
|
| + new InitEntry(const i2.DynamicInit('bar'), const LibraryIdentifier(#bar, 'bar', 'bar.dart')),
|
| + new InitEntry(const i2.DynamicInit('bar2'), const LibraryIdentifier(#bar, 'bar', 'bar.dart')),
|
| + new InitEntry(const i2.DynamicInit('bar()'), i3.bar),
|
| + new InitEntry(i4.initMethod, i3.bar),
|
| + new InitEntry(const i2.DynamicInit('Bar'), i3.Bar),
|
| + new InitEntry(const i2.DynamicInit('Bar2'), i3.Bar),
|
| + new InitEntry(i2.constInit, const LibraryIdentifier(#foo, null, 'foo.dart')),
|
| + new InitEntry(i4.initMethod, i5.foo),
|
| + new InitEntry(i2.constInit, i5.Foo),
|
| + ]);
|
| +
|
| + return i0.main();
|
| + }
|
| + ''')
|
| + }, []);
|
| +}
|
| +
|
| +void dartEntryPointTests() {
|
| + var phases = [[new InitializeTransformer(['web/index.dart'])]];
|
| +
|
| + testPhases('constructor arguments', phases, {
|
| + 'a|web/index.dart': '''
|
| + @DynamicInit(foo)
|
| + @DynamicInit(_foo)
|
| + @DynamicInit(Foo.foo)
|
| + @DynamicInit(bar.Foo.bar)
|
| + @DynamicInit(bar.Foo.foo)
|
| + @DynamicInit(const [foo, Foo.foo, 'foo'])
|
| + @DynamicInit(const {'foo': foo, 'Foo.foo': Foo.foo, 'bar': 'bar'})
|
| + @DynamicInit('foo')
|
| + @DynamicInit(true)
|
| + @DynamicInit(null)
|
| + @DynamicInit(1)
|
| + @DynamicInit(1.1)
|
| + @DynamicInit('foo-\$x\${y}')
|
| + @DynamicInit(1 + 2)
|
| + @DynamicInit(1.0 + 0.2)
|
| + @DynamicInit(1 == 1)
|
| + @NamedArgInit(1, name: 'Bill')
|
| + library web_foo;
|
| +
|
| + import 'package:test_initializers/common.dart';
|
| + import 'foo.dart';
|
| + import 'foo.dart' as bar;
|
| +
|
| + const x = 'x';
|
| + const y = 'y';
|
| + const _foo = '_foo';
|
| +
|
| + class MyConst {
|
| + const MyConst;
|
| + }
|
| + ''',
|
| + 'a|web/foo.dart': '''
|
| + library foo;
|
| +
|
| + const String foo = 'foo';
|
| +
|
| + class Bar {
|
| + const Bar();
|
| + }
|
| +
|
| + class Foo {
|
| + static foo = 'Foo.foo';
|
| + static bar = const Bar();
|
| + }
|
| + ''',
|
| + // Mock out the Initialize package plus some initializers.
|
| + 'initialize|lib/initialize.dart': mockInitialize,
|
| + 'test_initializers|lib/common.dart': commonInitializers,
|
| + }, {
|
| + 'a|web/index.initialize.dart': formatter.format('''
|
| + import 'package:initialize/src/static_loader.dart';
|
| + import 'package:initialize/initialize.dart';
|
| + import 'index.dart' as i0;
|
| + import 'package:test_initializers/common.dart' as i1;
|
| + import 'foo.dart' as i2;
|
| +
|
| + main() {
|
| + initializers.addAll([
|
| + new InitEntry(const i1.DynamicInit(i2.foo), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit('_foo'), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit(i2.Foo.foo), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit(i2.Foo.bar), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit(i2.Foo.foo), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit(const [i2.foo, i2.Foo.foo, 'foo']), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit(const {'foo': i2.foo, 'Foo.foo': i2.Foo.foo, 'bar': 'bar'}), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit('foo'), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit(true), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit(null), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit(1), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit(1.1), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit('foo-xy'), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit(3), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit(1.2), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.DynamicInit(true), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + new InitEntry(const i1.NamedArgInit(1, name: 'Bill'), const LibraryIdentifier(#web_foo, null, 'index.dart')),
|
| + ]);
|
| +
|
| + return i0.main();
|
| + }
|
| + ''')
|
| + }, []);
|
| +
|
| + testPhases('exported library annotations', phases, {
|
| + 'a|web/index.dart': '''
|
| + library web_foo;
|
| +
|
| + export 'foo.dart';
|
| + ''',
|
| + 'a|web/foo.dart': '''
|
| + @constInit
|
| + library foo;
|
| +
|
| + import 'package:test_initializers/common.dart';
|
| +
|
| + @constInit
|
| + foo() {};
|
| +
|
| + @constInit
|
| + class Foo {}
|
| + ''',
|
| + // Mock out the Initialize package plus some initializers.
|
| + 'initialize|lib/initialize.dart': mockInitialize,
|
| + 'test_initializers|lib/common.dart': commonInitializers,
|
| + }, {
|
| + 'a|web/index.initialize.dart': formatter.format('''
|
| + import 'package:initialize/src/static_loader.dart';
|
| + import 'package:initialize/initialize.dart';
|
| + import 'index.dart' as i0;
|
| + import 'foo.dart' as i1;
|
| + import 'package:test_initializers/common.dart' as i2;
|
| +
|
| + main() {
|
| + initializers.addAll([
|
| + new InitEntry(i2.constInit, const LibraryIdentifier(#foo, null, 'foo.dart')),
|
| + new InitEntry(i2.constInit, i1.foo),
|
| + new InitEntry(i2.constInit, i1.Foo),
|
| + ]);
|
| +
|
| + return i0.main();
|
| + }
|
| + ''')
|
| + }, []);
|
| +
|
| + testPhases('imports from exported libraries', phases, {
|
| + 'a|web/index.dart': '''
|
| + library web_foo;
|
| +
|
| + export 'foo.dart';
|
| + ''',
|
| + 'a|web/foo.dart': '''
|
| + library foo;
|
| +
|
| + import 'foo/bar.dart';
|
| + ''',
|
| + 'a|web/foo/bar.dart': '''
|
| + @constInit
|
| + library bar;
|
| +
|
| + import 'package:test_initializers/common.dart';
|
| +
|
| + @constInit
|
| + bar() {};
|
| +
|
| + @constInit
|
| + class Bar {}
|
| + ''',
|
| + // Mock out the Initialize package plus some initializers.
|
| + 'initialize|lib/initialize.dart': mockInitialize,
|
| + 'test_initializers|lib/common.dart': commonInitializers,
|
| + }, {
|
| + 'a|web/index.initialize.dart': formatter.format('''
|
| + import 'package:initialize/src/static_loader.dart';
|
| + import 'package:initialize/initialize.dart';
|
| + import 'index.dart' as i0;
|
| + import 'foo/bar.dart' as i1;
|
| + import 'package:test_initializers/common.dart' as i2;
|
| +
|
| + main() {
|
| + initializers.addAll([
|
| + new InitEntry(i2.constInit, const LibraryIdentifier(#bar, null, 'foo/bar.dart')),
|
| + new InitEntry(i2.constInit, i1.bar),
|
| + new InitEntry(i2.constInit, i1.Bar),
|
| + ]);
|
| +
|
| + return i0.main();
|
| + }
|
| + ''')
|
| + }, []);
|
| +
|
| + testPhases('library parts and exports', phases, {
|
| + 'a|web/index.dart': '''
|
| + @constInit
|
| + library index;
|
| +
|
| + import 'package:test_initializers/common.dart';
|
| + export 'export.dart';
|
| +
|
| + part 'foo.dart';
|
| + part 'bar.dart';
|
| +
|
| + @constInit
|
| + index() {};
|
| +
|
| + @constInit
|
| + class Index {};
|
| + ''',
|
| + 'a|web/foo.dart': '''
|
| + part of index;
|
| +
|
| + @constInit
|
| + foo() {};
|
| +
|
| + @constInit
|
| + class Foo {};
|
| + ''',
|
| + 'a|web/bar.dart': '''
|
| + part of index;
|
| +
|
| + @constInit
|
| + bar() {};
|
| +
|
| + @constInit
|
| + class Bar {};
|
| + ''',
|
| + 'a|web/export.dart': '''
|
| + @constInit
|
| + library export;
|
| +
|
| + import 'package:test_initializers/common.dart';
|
| +
|
| + @constInit
|
| + class Export {};
|
| + ''',
|
| + // Mock out the Initialize package plus some initializers.
|
| + 'initialize|lib/initialize.dart': mockInitialize,
|
| + 'test_initializers|lib/common.dart': commonInitializers,
|
| + }, {
|
| + 'a|web/index.initialize.dart': formatter.format('''
|
| + import 'package:initialize/src/static_loader.dart';
|
| + import 'package:initialize/initialize.dart';
|
| + import 'index.dart' as i0;
|
| + import 'export.dart' as i1;
|
| + import 'package:test_initializers/common.dart' as i2;
|
| +
|
| + main() {
|
| + initializers.addAll([
|
| + new InitEntry(i2.constInit, const LibraryIdentifier(#export, null, 'export.dart')),
|
| + new InitEntry(i2.constInit, i1.Export),
|
| + new InitEntry(i2.constInit, const LibraryIdentifier(#index, null, 'index.dart')),
|
| + new InitEntry(i2.constInit, i0.bar),
|
| + new InitEntry(i2.constInit, i0.foo),
|
| + new InitEntry(i2.constInit, i0.index),
|
| + new InitEntry(i2.constInit, i0.Bar),
|
| + new InitEntry(i2.constInit, i0.Foo),
|
| + new InitEntry(i2.constInit, i0.Index),
|
| + ]);
|
| +
|
| + return i0.main();
|
| + }
|
| + ''')
|
| + }, []);
|
| +}
|
| +
|
| +class SkipConstructorsPlugin extends InitializerPlugin {
|
| + bool shouldApply(InitializerPluginData data) {
|
| + return data.initializer.annotationElement.element is ConstructorElement;
|
| + }
|
| +
|
| + String apply(_) => null;
|
| +}
|
| +
|
| +void pluginTests() {
|
| + var phases = [
|
| + [
|
| + new InitializeTransformer(['web/index.dart'],
|
| + plugins: [new SkipConstructorsPlugin()])
|
| + ]
|
| + ];
|
| +
|
| + testPhases('can omit statements', phases, {
|
| + 'a|web/index.dart': '''
|
| + library index;
|
| +
|
| + import 'package:initialize/initialize.dart';
|
| + import 'package:test_initializers/common.dart';
|
| + import 'foo.dart';
|
| +
|
| + @initMethod
|
| + @DynamicInit('index')
|
| + index() {}
|
| + ''',
|
| + 'a|web/foo.dart': '''
|
| + library foo;
|
| +
|
| + import 'package:initialize/initialize.dart';
|
| + import 'package:test_initializers/common.dart';
|
| +
|
| + @initMethod
|
| + @DynamicInit('Foo')
|
| + foo() {}
|
| + ''',
|
| + // Mock out the Initialize package plus some initializers.
|
| + 'initialize|lib/initialize.dart': mockInitialize,
|
| + 'test_initializers|lib/common.dart': commonInitializers,
|
| + }, {
|
| + 'a|web/index.initialize.dart': formatter.format('''
|
| + import 'package:initialize/src/static_loader.dart';
|
| + import 'package:initialize/initialize.dart';
|
| + import 'index.dart' as i0;
|
| + import 'foo.dart' as i1;
|
| + import 'package:initialize/initialize.dart' as i2;
|
| + import 'package:test_initializers/common.dart' as i3;
|
| +
|
| + main() {
|
| + initializers.addAll([
|
| + new InitEntry(i2.initMethod, i1.foo),
|
| + new InitEntry(i2.initMethod, i0.index),
|
| + ]);
|
| +
|
| + return i0.main();
|
| + }
|
| + ''')
|
| + }, []);
|
| +}
|
|
|