blob: 94bbb7686f82fdf8907a80961891c2c9c12e8c51 [file] [log] [blame]
// Copyright (c) 2017, 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.
// @dart = 2.9
import "package:expect/expect.dart";
// Test re-entrant initializer - calls throw CyclicInitializationError.
var trace;
final foo = bar;
get bar {
trace.add('bar');
try {
return foo ?? 1;
} catch (e) {
trace.add(e is CyclicInitializationError);
}
try {
return foo ?? 2;
} catch (e) {
trace.add(e is CyclicInitializationError);
}
return 42;
}
void testTopLevel() {
trace = [];
var result = foo;
Expect.equals(42, result);
Expect.equals('bar,true,true', trace.join(','));
trace = [];
result = foo;
Expect.equals(42, result);
Expect.equals('', trace.join(','));
}
class X {
static final foo = X.bar;
static get bar {
trace.add('X.bar');
try {
return foo ?? 1;
} catch (e) {
trace.add(e is CyclicInitializationError);
}
try {
return foo ?? 2;
} catch (e) {
trace.add(e is CyclicInitializationError);
}
return 49;
}
}
void testClassStatic() {
trace = [];
var result = X.foo;
Expect.equals(49, result);
Expect.equals('X.bar,true,true', trace.join(','));
trace = [];
result = X.foo;
Expect.equals(49, result);
Expect.equals('', trace.join(','));
}
main() {
testTopLevel();
testClassStatic();
}