blob: bda6877d2c7bc325f74ebfe548f0197ed724b84f [file] [log] [blame]
// 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:initialize/transformer.dart';
import 'package:unittest/compact_vm_config.dart';
main() {
useCompactVMConfiguration();
var transformer = new InitializeTransformer(
'web/index.dart', 'web/index.bootstrap.dart', 'web/index.html');
testPhases('transformer', [[transformer]], {
'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: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';
@DynamicInit('Bar')
@DynamicInit('Bar2')
class Bar {}
@DynamicInit('bar()')
@initMethod
bar() {}
''',
// Mock out the Initialize package plus some initializers.
'initialize|lib/initialize.dart': '''
library initialize;
abstract class Initializer<T> {}
class _ConstInit extends Initializer<dynamic> {
const ConstInit();
}
const _ConstInit constInit = const _ConstInit();
class DynamicInit extends Initializer<dynamic> {
final String _name;
const DynamicInit(this._name);
}
class _InitMethod implements Initializer<Function> {
const _InitMethod();
}
const _InitMethod initMethod = const _InitMethod();
''',
}, {
'a|web/index.html': '''
<html><head></head><body>
<script type="application/dart" src="index.bootstrap.dart"></script>
</body></html>'''.replaceAll(' ', ''),
'a|web/index.bootstrap.dart': '''
import 'package:initialize/src/static_loader.dart';
import 'index.dart' as i0;
import 'package:bar/bar.dart' as i1;
import 'package:initialize/initialize.dart' as i2;
import 'foo.dart' as i3;
main() {
initializers.addAll([
new InitEntry(const i2.DynamicInit('bar'), #bar),
new InitEntry(const i2.DynamicInit('bar2'), #bar),
new InitEntry(const i2.DynamicInit('bar()'), i1.bar),
new InitEntry(i2.initMethod, i1.bar),
new InitEntry(const i2.DynamicInit('Bar'), i1.Bar),
new InitEntry(const i2.DynamicInit('Bar2'), i1.Bar),
new InitEntry(i2.constInit, #foo),
new InitEntry(i2.initMethod, i3.foo),
new InitEntry(i2.constInit, i3.Foo),
]);
i0.main();
}
'''.replaceAll(' ', ''),
});
}