| // 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. |
| |
| // @dart = 2.9 |
| |
| 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; |
| String Printers; |
| 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"}"); |
| } |