| // 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 late 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())); |
| } |