blob: 2664910f2e276c899d1309e76201aede61d0380d [file] [log] [blame]
// Copyright (c) 2016, 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.
import 'package:compiler/src/compiler.dart' show Compiler;
import 'package:compiler/src/elements/elements.dart';
import 'package:test/test.dart';
import 'helper.dart' show check;
main() {
test('simple default constructor', () {
String code = '''
class A {
}
main() {
var a = new A();
return a;
}''';
return check(code, lookup: defaultConstructorFor('A'));
});
test('simple default constructor with field', () {
String code = '''
class A {
int x = 1;
}
main() {
var a = new A();
return a;
}''';
return check(code, lookup: defaultConstructorFor('A'));
});
test('redirecting constructor with field', () {
String code = '''
class Foo {
final int value;
const Foo({int number: 0}) : this.poodle(number * 2);
const Foo.poodle(this.value);
}
main() => new Foo(number: 3);
''';
return check(code, lookup: defaultConstructorFor('Foo'));
});
// TODO(efortuna): Kernel needs to have some additional constructor
// implementaion work before this is legitimately equivalent code to the
// original AST.
/* test('initialized field and constructor', () {
String code = '''
import 'dart:_foreign_helper' show JS, JS_EMBEDDED_GLOBAL;
import 'package:expect/expect.dart';
class Foo {
final value = JS('bool', '#()', JS_EMBEDDED_GLOBAL('', 'foo'));
Foo() {
print('hello world');
}
}
main() => new Foo();
''';
return check(code, lookup: defaultConstructorFor('Foo'));
});*/
}
defaultConstructorFor(String className) => (Compiler compiler) {
ClassElement clazz = compiler.mainApp.find(className);
return clazz.lookupDefaultConstructor();
};