2dcd56ef43
There are far too many files here to review everyone carefully. Spot checking most of the diffs look good as test code is generally written with less care than application code so lots of ugly formatting get through. If people notice files where the automated formatting bothers them feel free to comment indicating file names and I'll move spaces within comments to make the formatting cleaner and use comments to force block formatting as I have done for other case where formatting looked bad. BUG= R=efortuna@google.com Review-Url: https://codereview.chromium.org/2771453003 .
139 lines
4.2 KiB
Dart
139 lines
4.2 KiB
Dart
// 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.
|
|
|
|
// Check that ?? is compile-time constant.
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
const theNull = null;
|
|
const notNull = const Object();
|
|
|
|
// Top-level const field initializer.
|
|
const test1 = theNull ?? notNull;
|
|
const test2 = notNull ?? theNull;
|
|
const test3 = theNull ?? theNull ?? notNull;
|
|
const test4 = theNull ?? theNull ?? theNull;
|
|
|
|
class P {
|
|
final v;
|
|
const P(this.v);
|
|
}
|
|
|
|
// Annotation parameter (not checked by test!)
|
|
@P(theNull ?? notNull)
|
|
@P(notNull ?? theNull)
|
|
@P(theNull ?? theNull ?? notNull)
|
|
@P(theNull ?? theNull ?? theNull)
|
|
class C {
|
|
// Static const field initializer.
|
|
static const test5 = theNull ?? notNull;
|
|
static const test6 = notNull ?? theNull;
|
|
static const test7 = theNull ?? theNull ?? notNull;
|
|
static const test8 = theNull ?? theNull ?? theNull;
|
|
|
|
// (Constructor) parameter defaults.
|
|
final test9;
|
|
final test10;
|
|
final test11;
|
|
final test12;
|
|
|
|
// Const constructor initializer list.
|
|
final test13;
|
|
final test14;
|
|
final test15;
|
|
final test16;
|
|
final test17;
|
|
|
|
const C(x,
|
|
[this.test9 = theNull ?? notNull,
|
|
this.test10 = notNull ?? theNull,
|
|
this.test11 = theNull ?? theNull ?? notNull,
|
|
this.test12 = theNull ?? theNull ?? theNull])
|
|
: test13 = theNull ?? x,
|
|
test14 = notNull ?? x,
|
|
test15 = x ?? notNull,
|
|
test16 = theNull ?? theNull ?? x,
|
|
test17 = theNull ?? x ?? notNull;
|
|
|
|
List methodLocal() {
|
|
// Method local const variable initializer.
|
|
const test18 = theNull ?? notNull;
|
|
const test19 = notNull ?? theNull;
|
|
const test20 = theNull ?? theNull ?? notNull;
|
|
const test21 = theNull ?? theNull ?? theNull;
|
|
|
|
return const [test18, test19, test20, test21];
|
|
}
|
|
|
|
List expressionLocal() {
|
|
// Constant expression sub-expression.
|
|
return const [
|
|
theNull ?? notNull,
|
|
notNull ?? theNull,
|
|
theNull ?? theNull ?? notNull,
|
|
theNull ?? theNull ?? theNull
|
|
];
|
|
}
|
|
}
|
|
|
|
main() {
|
|
Expect.identical(notNull, test1, "test1");
|
|
Expect.identical(notNull, test2, "test2");
|
|
Expect.identical(notNull, test3, "test3");
|
|
Expect.identical(theNull, test4, "test4");
|
|
|
|
Expect.identical(notNull, C.test5, "test5");
|
|
Expect.identical(notNull, C.test6, "test6");
|
|
Expect.identical(notNull, C.test7, "test7");
|
|
Expect.identical(theNull, C.test8, "test8");
|
|
|
|
const c1 = const C(null);
|
|
Expect.identical(notNull, c1.test9, "test9");
|
|
Expect.identical(notNull, c1.test10, "test10");
|
|
Expect.identical(notNull, c1.test11, "test11");
|
|
Expect.identical(theNull, c1.test12, "test12");
|
|
|
|
Expect.identical(theNull, c1.test13, "test13");
|
|
Expect.identical(notNull, c1.test14, "test14");
|
|
Expect.identical(notNull, c1.test15, "test15");
|
|
Expect.identical(theNull, c1.test16, "test16");
|
|
Expect.identical(notNull, c1.test17, "test17");
|
|
|
|
var list = c1.methodLocal();
|
|
Expect.identical(notNull, list[0], "test18");
|
|
Expect.identical(notNull, list[1], "test19");
|
|
Expect.identical(notNull, list[2], "test20");
|
|
Expect.identical(theNull, list[3], "test21");
|
|
|
|
list = c1.expressionLocal();
|
|
Expect.identical(notNull, list[0], "test22");
|
|
Expect.identical(notNull, list[1], "test23");
|
|
Expect.identical(notNull, list[2], "test24");
|
|
Expect.identical(theNull, list[3], "test25");
|
|
|
|
const c2 = const C(42);
|
|
Expect.identical(notNull, c2.test9, "test26");
|
|
Expect.identical(notNull, c2.test10, "test27");
|
|
Expect.identical(notNull, c2.test11, "test28");
|
|
Expect.identical(theNull, c2.test12, "test29");
|
|
|
|
Expect.identical(42, c2.test13, "test30");
|
|
Expect.identical(notNull, c2.test14, "test31");
|
|
Expect.identical(42, c2.test15, "test32");
|
|
Expect.identical(42, c2.test16, "test33");
|
|
Expect.identical(42, c2.test17, "test34");
|
|
|
|
list = c2.methodLocal();
|
|
Expect.identical(notNull, list[0], "test35");
|
|
Expect.identical(notNull, list[1], "test36");
|
|
Expect.identical(notNull, list[2], "test37");
|
|
Expect.identical(theNull, list[3], "test38");
|
|
|
|
list = c2.expressionLocal();
|
|
Expect.identical(notNull, list[0], "test39");
|
|
Expect.identical(notNull, list[1], "test40");
|
|
Expect.identical(notNull, list[2], "test41");
|
|
Expect.identical(theNull, list[3], "test42");
|
|
}
|