blob: 363cb3ab2d9b24228465254b5531dfd31b1e117a [file] [log] [blame]
// 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.
// @dart = 2.9
import "package:expect/expect.dart";
// Regression test for issue #24839 - http://dartbug.com/24839
const u1 = null;
const int u2 = null;
const List u3 = null;
const u4 = const bool.hasEnvironment("XXXXX")
? const String.fromEnvironment("XXXXX")
: null;
const u5 = const bool.hasEnvironment("XXXXX")
? const int.fromEnvironment("XXXXX")
: null;
const u6 = bool.hasEnvironment("XXXXX")
? const bool.fromEnvironment("XXXXX")
: null;
const n1 = 42;
const n2 = 3.1415;
const int n3 = 37;
const double n4 = 4.6692;
const num n5 = b3 ? 1 : 2.71828;
const n6 = const int.fromEnvironment("XXXXX", defaultValue: 87);
const s1 = "s1";
const String s2 = "s2";
const String s3 = "$s1$s2";
const s4 = const String.fromEnvironment("XXXXX", defaultValue: "s4");
const b1 = true;
const b2 = false;
const b3 = b1 && (b2 || !b1);
const b4 = const bool.fromEnvironment("XXXXX", defaultValue: true);
// Individually
const su1 = "$u1";
const su2 = "$u2";
const su3 = "$u3";
const su4 = "$u4";
const su5 = "$u5";
const su6 = "$u6";
const sn1 = "$n1";
const sn2 = "$n2";
const sn3 = "$n3";
const sn4 = "$n4";
const sn5 = "$n5";
const sn6 = "$n6";
const ss1 = "$s1";
const ss2 = "$s2";
const ss3 = "$s3";
const ss4 = "$s4";
const sb1 = "$b1";
const sb2 = "$b2";
const sb3 = "$b3";
const sb4 = "$b4";
// Constant variables in interpolation.
const interpolation1 =
"$u1 $u2 $u3 $u4 $u5 $u6 $n1 $n2 $n3 $n4 $n5 $n6 $s1 $s2 $s3 $s4 $b1 $b2 $b3 $b4";
// Constant expressions in interpolation.
// (Single string, the linebreak to fit this into 80 chars is inside an
// interpolation, which is allowed, even for single-line strings).
const interpolation2 =
"${u1} ${u2} ${u3} ${u4} ${u5} ${u6} ${n1} ${n2} ${n3} ${n4} ${n5} ${n6} ${
s1} ${s2} ${s3} ${s4} ${b1} ${b2} ${b3} ${b4}";
// Adjacent string literals are combined.
const interpolation3 = "$u1 $u2 $u3 $u4 $u5 "
'$u6 $n1 $n2 $n3 $n4 '
"""$n5 $n6 $s1 $s2 $s3 """
'''$s4 $b1 $b2 $b3 $b4''';
// Nested interpolations.
const interpolation4 = "${"$u1 $u2 $u3 $u4 $u5 " '$u6 $n1 $n2 $n3 $n4'} ${
"""$n5 $n6 $s1 $s2 $s3 """ '''$s4 $b1 $b2 $b3 $b4'''}";
main() {
Expect.equals(u1.toString(), su1);
Expect.equals(u2.toString(), su2);
Expect.equals(u3.toString(), su3);
Expect.equals(u4.toString(), su4);
Expect.equals(u5.toString(), su5);
Expect.equals(u6.toString(), su6);
Expect.equals(n1.toString(), sn1);
Expect.equals(n2.toString(), sn2);
Expect.equals(n3.toString(), sn3);
Expect.equals(n4.toString(), sn4);
Expect.equals(n5.toString(), sn5);
Expect.equals(n6.toString(), sn6);
Expect.equals(s1.toString(), ss1);
Expect.equals(s2.toString(), ss2);
Expect.equals(s3.toString(), ss3);
Expect.equals(s4.toString(), ss4);
Expect.equals(b1.toString(), sb1);
Expect.equals(b2.toString(), sb2);
Expect.equals(b3.toString(), sb3);
Expect.equals(b4.toString(), sb4);
var expect = "null null null null null null 42 3.1415 37 4.6692 2.71828 87 "
"s1 s2 s1s2 s4 true false false true";
Expect.equals(expect, interpolation1);
Expect.equals(expect, interpolation2);
Expect.equals(expect, interpolation3);
Expect.equals(expect, interpolation4);
}