mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 04:37:12 +00:00
1b2454b85e
Change-Id: Ib09f268c8a8edffba007cdd4962550a5e78ff808 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151090 Reviewed-by: Erik Ernst <eernst@google.com> Commit-Queue: Bob Nystrom <rnystrom@google.com> Auto-Submit: Bob Nystrom <rnystrom@google.com>
267 lines
10 KiB
Dart
267 lines
10 KiB
Dart
// Copyright (c) 2011, 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 test program testing string interpolation.
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
class WhatchamaCallIt {
|
|
WhatchamaCallIt() {}
|
|
|
|
String foo() {
|
|
// Test $this and Field name is defined in subclass.
|
|
dynamic self = this;
|
|
dynamic name = self.name;
|
|
return "$this and $name";
|
|
}
|
|
}
|
|
|
|
class ThingamaBob extends WhatchamaCallIt {
|
|
ThingamaBob(String s)
|
|
: name = s,
|
|
super();
|
|
String name;
|
|
toString() => "Hansel";
|
|
}
|
|
|
|
const String A = "svin";
|
|
const String B = "hest";
|
|
const int N = 1 + 1;
|
|
late String Printers;
|
|
late String AAR_Printers;
|
|
|
|
main() {
|
|
Printers = "Printers: $A and $B";
|
|
AAR_Printers = "AAR has $N $Printers.";
|
|
|
|
var x = 1;
|
|
var s = "eins und \$x macht zwei.";
|
|
print(s);
|
|
Expect.equals(r"eins und $x macht zwei.", s);
|
|
|
|
s = "eins und $x macht zwei.";
|
|
print(s);
|
|
Expect.equals(r"eins und 1 macht zwei.", s);
|
|
|
|
print(AAR_Printers);
|
|
Expect.equals(r"AAR has 2 Printers: svin and hest.", AAR_Printers);
|
|
|
|
var s$eins = "eins";
|
|
var $1 = 1;
|
|
var zw = "zw";
|
|
var ei = "ei";
|
|
var zw$ei = "\"Martini, dry? Nai zwai.\"";
|
|
s = "${s$eins} und ${$1} macht $zw$ei.";
|
|
print(s);
|
|
Expect.equals(r"eins und 1 macht zwei.", s);
|
|
|
|
dynamic t = new ThingamaBob("Gretel");
|
|
print(t.foo());
|
|
Expect.equals(t.foo(), "Hansel and Gretel");
|
|
|
|
testStringVariants();
|
|
}
|
|
|
|
class Stringable {
|
|
final String value;
|
|
Stringable(this.value);
|
|
String toString() => value;
|
|
operator *(int count) => new Stringable(value * count);
|
|
}
|
|
|
|
void testStringVariants() {
|
|
String latin = "ab\x00\xff";
|
|
String nonLatin = "\u2000\u{10000}\ufeff";
|
|
dynamic oLatin = new Stringable(latin);
|
|
dynamic oNonLatin = new Stringable(nonLatin);
|
|
|
|
// ASCII.
|
|
Expect.equals(latin * 3, "$latin$latin$latin");
|
|
Expect.equals(
|
|
latin * 64,
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin");
|
|
Expect.equals(
|
|
latin * 64,
|
|
"${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
|
|
"${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
|
|
"${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
|
|
"${latin * 4}${latin * 4}${latin * 4}${latin * 4}");
|
|
// Non-ASCII.
|
|
Expect.equals(nonLatin * 3, "$nonLatin$nonLatin$nonLatin");
|
|
Expect.equals(
|
|
nonLatin * 64,
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin");
|
|
Expect.equals(
|
|
nonLatin * 64,
|
|
"${nonLatin * 4}${nonLatin * 4}"
|
|
"${nonLatin * 4}${nonLatin * 4}"
|
|
"${nonLatin * 4}${nonLatin * 4}"
|
|
"${nonLatin * 4}${nonLatin * 4}"
|
|
"${nonLatin * 4}${nonLatin * 4}"
|
|
"${nonLatin * 4}${nonLatin * 4}"
|
|
"${nonLatin * 4}${nonLatin * 4}"
|
|
"${nonLatin * 4}${nonLatin * 4}");
|
|
// Mixed.
|
|
Expect.equals(latin * 3 + nonLatin, "$latin$latin$latin$nonLatin");
|
|
Expect.equals(nonLatin + latin * 3, "$nonLatin$latin$latin$latin");
|
|
Expect.equals(
|
|
latin * 60 + nonLatin * 4,
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin"
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin");
|
|
Expect.equals(
|
|
nonLatin * 4 + latin * 60,
|
|
"$nonLatin$nonLatin$nonLatin$nonLatin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$latin"
|
|
"$latin$latin$latin$latin");
|
|
Expect.equals(
|
|
latin * 60 + nonLatin * 4,
|
|
"${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
|
|
"${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
|
|
"${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
|
|
"${latin * 4}${latin * 4}${latin * 4}${nonLatin * 4}");
|
|
Expect.equals(
|
|
nonLatin * 4 + latin * 60,
|
|
"${nonLatin * 4}${latin * 4}${latin * 4}${latin * 4}"
|
|
"${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
|
|
"${latin * 4}${latin * 4}${latin * 4}${latin * 4}"
|
|
"${latin * 4}${latin * 4}${latin * 4}${latin * 4}");
|
|
// With objects.
|
|
Expect.equals(latin * 3, "$latin$oLatin$latin");
|
|
Expect.equals(
|
|
latin * 64,
|
|
"$latin$latin$latin$latin$latin$latin$latin$oLatin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$oLatin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$oLatin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$oLatin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$oLatin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$oLatin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$oLatin"
|
|
"$latin$latin$latin$latin$latin$latin$latin$oLatin");
|
|
Expect.equals(
|
|
latin * 64,
|
|
"${latin * 4}${latin * 4}${latin * 4}${oLatin * 4}"
|
|
"${latin * 4}${latin * 4}${latin * 4}${oLatin * 4}"
|
|
"${latin * 4}${latin * 4}${latin * 4}${oLatin * 4}"
|
|
"${latin * 4}${latin * 4}${latin * 4}${oLatin * 4}");
|
|
// Non-ASCII.
|
|
Expect.equals(nonLatin * 3, "$nonLatin$oNonLatin$nonLatin");
|
|
Expect.equals(
|
|
nonLatin * 64,
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin"
|
|
"$nonLatin$nonLatin$nonLatin$oNonLatin");
|
|
Expect.equals(
|
|
nonLatin * 64,
|
|
"${nonLatin * 4}${oNonLatin * 4}"
|
|
"${nonLatin * 4}${oNonLatin * 4}"
|
|
"${nonLatin * 4}${oNonLatin * 4}"
|
|
"${nonLatin * 4}${oNonLatin * 4}"
|
|
"${nonLatin * 4}${oNonLatin * 4}"
|
|
"${nonLatin * 4}${oNonLatin * 4}"
|
|
"${nonLatin * 4}${oNonLatin * 4}"
|
|
"${nonLatin * 4}${oNonLatin * 4}");
|
|
// Mixed.
|
|
Expect.equals(latin * 2 + nonLatin * 2, "$latin$oLatin$nonLatin$oNonLatin");
|
|
Expect.equals(nonLatin * 2 + latin * 2, "$nonLatin$oNonLatin$latin$oLatin");
|
|
Expect.equals(
|
|
(latin * 2 + nonLatin * 2) * 8,
|
|
"$latin$oLatin$nonLatin$oNonLatin"
|
|
"$latin$oLatin$nonLatin$oNonLatin"
|
|
"$latin$oLatin$nonLatin$oNonLatin"
|
|
"$latin$oLatin$nonLatin$oNonLatin"
|
|
"$latin$oLatin$nonLatin$oNonLatin"
|
|
"$latin$oLatin$nonLatin$oNonLatin"
|
|
"$latin$oLatin$nonLatin$oNonLatin"
|
|
"$latin$oLatin$nonLatin$oNonLatin");
|
|
Expect.equals(
|
|
(nonLatin * 2 + latin * 2) * 8,
|
|
"$nonLatin$oNonLatin$latin$oLatin"
|
|
"$nonLatin$oNonLatin$latin$oLatin"
|
|
"$nonLatin$oNonLatin$latin$oLatin"
|
|
"$nonLatin$oNonLatin$latin$oLatin"
|
|
"$nonLatin$oNonLatin$latin$oLatin"
|
|
"$nonLatin$oNonLatin$latin$oLatin"
|
|
"$nonLatin$oNonLatin$latin$oLatin"
|
|
"$nonLatin$oNonLatin$latin$oLatin");
|
|
|
|
// All combinations
|
|
var o1 = new Stringable("x");
|
|
var o2 = new Stringable("\ufeff");
|
|
|
|
Expect.equals("a\u2000x\ufeff", "${"a"}${"\u2000"}${o1}${o2}");
|
|
Expect.equals("a\u2000\ufeffx", "${"a"}${"\u2000"}${o2}${o1}");
|
|
Expect.equals("ax\u2000\ufeff", "${"a"}${o1}${"\u2000"}${o2}");
|
|
Expect.equals("ax\ufeff\u2000", "${"a"}${o1}${o2}${"\u2000"}");
|
|
Expect.equals("a\ufeffx\u2000", "${"a"}${o2}${o1}${"\u2000"}");
|
|
Expect.equals("a\ufeff\u2000x", "${"a"}${o2}${"\u2000"}${o1}");
|
|
|
|
Expect.equals("\u2000ax\ufeff", "${"\u2000"}${"a"}${o1}${o2}");
|
|
Expect.equals("\u2000a\ufeffx", "${"\u2000"}${"a"}${o2}${o1}");
|
|
Expect.equals("xa\u2000\ufeff", "${o1}${"a"}${"\u2000"}${o2}");
|
|
Expect.equals("xa\ufeff\u2000", "${o1}${"a"}${o2}${"\u2000"}");
|
|
Expect.equals("\ufeffax\u2000", "${o2}${"a"}${o1}${"\u2000"}");
|
|
Expect.equals("\ufeffa\u2000x", "${o2}${"a"}${"\u2000"}${o1}");
|
|
|
|
Expect.equals("\u2000xa\ufeff", "${"\u2000"}${o1}${"a"}${o2}");
|
|
Expect.equals("\u2000\ufeffax", "${"\u2000"}${o2}${"a"}${o1}");
|
|
Expect.equals("x\u2000a\ufeff", "${o1}${"\u2000"}${"a"}${o2}");
|
|
Expect.equals("x\ufeffa\u2000", "${o1}${o2}${"a"}${"\u2000"}");
|
|
Expect.equals("\ufeffxa\u2000", "${o2}${o1}${"a"}${"\u2000"}");
|
|
Expect.equals("\ufeff\u2000ax", "${o2}${"\u2000"}${"a"}${o1}");
|
|
|
|
Expect.equals("\u2000x\ufeffa", "${"\u2000"}${o1}${o2}${"a"}");
|
|
Expect.equals("\u2000\ufeffxa", "${"\u2000"}${o2}${o1}${"a"}");
|
|
Expect.equals("x\u2000\ufeffa", "${o1}${"\u2000"}${o2}${"a"}");
|
|
Expect.equals("x\ufeff\u2000a", "${o1}${o2}${"\u2000"}${"a"}");
|
|
Expect.equals("\ufeffx\u2000a", "${o2}${o1}${"\u2000"}${"a"}");
|
|
Expect.equals("\ufeff\u2000xa", "${o2}${"\u2000"}${o1}${"a"}");
|
|
}
|