Files
sdk/tests/language_2/field_initialization_order_test.dart
T
Aske Simon Christensen a4b3009ca5 Require super initializer to be at the end of the initializer list.
Drops code to handle special evaluation order rules for super
initializer before the end.

Initializer check code now also recovers from initializer errors.

Fixes https://github.com/dart-lang/sdk/issues/33101

Change-Id: I1024853bfd3acfef42630bdc2fc47782746b07c0
Reviewed-on: https://dart-review.googlesource.com/68060
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2018-08-22 10:43:08 +00:00

87 lines
2.1 KiB
Dart

// Copyright (c) 2012, 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:expect/expect.dart";
// Test that field initializers are evaluated in the right order.
int counter = 0;
class Mark {
static StringBuffer buffer;
Mark(value) {
buffer.write('$value.');
}
}
class OneField {
var a = new Mark('a');
OneField();
OneField.init() : a = new Mark('ai');
}
class TwoFields {
var b = new Mark('b');
var a = new Mark('a');
TwoFields();
TwoFields.initA() : a = new Mark('ai');
TwoFields.initB() : b = new Mark('bi');
TwoFields.initBoth()
: a = new Mark('ai'),
b = new Mark('bi');
}
class InheritOneField extends OneField {
var b = new Mark('b');
InheritOneField() : super();
InheritOneField.init()
: b = new Mark('bi'),
super();
InheritOneField.superWithInit() : super.init();
InheritOneField.initWithSuperInit_correctOrder()
: b = new Mark('bi'),
super.init();
InheritOneField.initWithSuperInit_incorrectOrder()
:
super.init(), //# 01: compile-time error
b = new Mark('bi')
, super.init() //# none: ok
;
}
String run(callback) {
Mark.buffer = new StringBuffer();
callback();
return Mark.buffer.toString();
}
main() {
Expect.equals('a.', run(() => new OneField()));
Expect.equals('a.ai.', run(() => new OneField.init()));
Expect.equals('b.a.', run(() => new TwoFields()));
Expect.equals('b.a.ai.', run(() => new TwoFields.initA()));
Expect.equals('b.a.bi.', run(() => new TwoFields.initB()));
Expect.equals('b.a.ai.bi.', run(() => new TwoFields.initBoth()));
Expect.equals('b.a.', run(() => new InheritOneField()));
Expect.equals('b.bi.a.', run(() => new InheritOneField.init()));
Expect.equals('b.a.ai.', run(() => new InheritOneField.superWithInit()));
Expect.equals(
'b.bi.a.ai.', run(() => new InheritOneField.initWithSuperInit_correctOrder()));
Expect.equals(
'b.bi.a.ai.', run(() => new InheritOneField.initWithSuperInit_incorrectOrder()));
}