| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 // Dart test program testing string interpolation. | 4 // Dart test program testing string interpolation. |
| 5 | 5 |
| 6 import "package:expect/expect.dart"; | 6 import "package:expect/expect.dart"; |
| 7 | 7 |
| 8 | 8 |
| 9 class WhatchamaCallIt { | 9 class WhatchamaCallIt { |
| 10 WhatchamaCallIt() { } | 10 WhatchamaCallIt() { } |
| 11 | 11 |
| 12 String foo() { | 12 String foo() { |
| 13 // Test $this and Field name is defined in subclass. | 13 // Test $this and Field name is defined in subclass. |
| 14 return "$this and $name"; | 14 return "$this and $name"; |
| 15 } | 15 } |
| 16 } | 16 } |
| 17 | 17 |
| 18 class ThingamaBob extends WhatchamaCallIt { | 18 class ThingamaBob extends WhatchamaCallIt { |
| 19 ThingamaBob(String s) : super(), name = s { } | 19 ThingamaBob(String s) : super(), name = s { } |
| 20 String name; | 20 String name; |
| 21 toString() => "Hansel"; | 21 toString() => "Hansel"; |
| 22 } | 22 } |
| 23 | 23 |
| 24 class StringInterpolateTest { | 24 const String A = "svin"; |
| 25 | 25 const String B = "hest"; |
| 26 static const String A = "svin"; | 26 const int N = 1 + 1; |
| 27 static const String B = "hest"; | 27 String Printers; |
| 28 static const int N = 1 + 1; | 28 String AAR_Printers; |
| 29 static String Printers; | |
| 30 static String AAR_Printers; | |
| 31 | |
| 32 static testMain() { | |
| 33 Printers = "Printers: $A and $B"; | |
| 34 AAR_Printers = "AAR has $N $Printers."; | |
| 35 | |
| 36 var x = 1; | |
| 37 var s = "eins und \$x macht zwei."; | |
| 38 print(s); | |
| 39 Expect.equals(r"eins und $x macht zwei.", s); | |
| 40 | |
| 41 s = "eins und $x macht zwei."; | |
| 42 print(s); | |
| 43 Expect.equals(r"eins und 1 macht zwei.", s); | |
| 44 | |
| 45 print(AAR_Printers); | |
| 46 Expect.equals(r"AAR has 2 Printers: svin and hest.", AAR_Printers); | |
| 47 | |
| 48 var s$eins = "eins"; | |
| 49 var $1 = 1; | |
| 50 var zw = "zw"; | |
| 51 var ei = "ei"; | |
| 52 var zw$ei = "\"Martini, dry? Nai zwai.\""; | |
| 53 s = "${s$eins} und ${$1} macht $zw$ei."; | |
| 54 print(s); | |
| 55 Expect.equals(r"eins und 1 macht zwei.", s); | |
| 56 | |
| 57 var t = new ThingamaBob("Gretel"); | |
| 58 print(t.foo()); | |
| 59 Expect.equals(t.foo(), "Hansel and Gretel"); | |
| 60 } | |
| 61 } | |
| 62 | 29 |
| 63 main() { | 30 main() { |
| 64 StringInterpolateTest.testMain(); | 31 Printers = "Printers: $A and $B"; |
| 65 } | 32 AAR_Printers = "AAR has $N $Printers."; |
| 33 |
| 34 var x = 1; |
| 35 var s = "eins und \$x macht zwei."; |
| 36 print(s); |
| 37 Expect.equals(r"eins und $x macht zwei.", s); |
| 38 |
| 39 s = "eins und $x macht zwei."; |
| 40 print(s); |
| 41 Expect.equals(r"eins und 1 macht zwei.", s); |
| 42 |
| 43 print(AAR_Printers); |
| 44 Expect.equals(r"AAR has 2 Printers: svin and hest.", AAR_Printers); |
| 45 |
| 46 var s$eins = "eins"; |
| 47 var $1 = 1; |
| 48 var zw = "zw"; |
| 49 var ei = "ei"; |
| 50 var zw$ei = "\"Martini, dry? Nai zwai.\""; |
| 51 s = "${s$eins} und ${$1} macht $zw$ei."; |
| 52 print(s); |
| 53 Expect.equals(r"eins und 1 macht zwei.", s); |
| 54 |
| 55 var t = new ThingamaBob("Gretel"); |
| 56 print(t.foo()); |
| 57 Expect.equals(t.foo(), "Hansel and Gretel"); |
| 58 |
| 59 testStringVariants(); |
| 60 } |
| 61 |
| 62 |
| 63 class Stringable { |
| 64 final String value; |
| 65 Stringable(this.value); |
| 66 String toString() => value; |
| 67 operator *(int count) => new Stringable(value * count); |
| 68 } |
| 69 |
| 70 void testStringVariants() { |
| 71 String latin = "ab\x00\xff"; |
| 72 String nonLatin = "\u2000\u{10000}\ufeff"; |
| 73 Object oLatin = new Stringable(latin); |
| 74 Object oNonLatin = new Stringable(nonLatin); |
| 75 |
| 76 // ASCII. |
| 77 Expect.equals(latin * 3, "$latin$latin$latin"); |
| 78 Expect.equals(latin * 64, "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 79 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 80 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 81 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 82 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 83 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 84 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 85 "$latin$latin$latin$latin$latin$latin$latin$latin"); |
| 86 Expect.equals(latin * 64, "${latin * 4}${latin * 4}${latin * 4}${latin * 4}" |
| 87 "${latin * 4}${latin * 4}${latin * 4}${latin * 4}" |
| 88 "${latin * 4}${latin * 4}${latin * 4}${latin * 4}" |
| 89 "${latin * 4}${latin * 4}${latin * 4}${latin * 4}"); |
| 90 // Non-ASCII. |
| 91 Expect.equals(nonLatin * 3, "$nonLatin$nonLatin$nonLatin"); |
| 92 Expect.equals(nonLatin * 64, "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 93 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 94 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 95 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 96 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 97 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 98 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 99 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 100 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 101 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 102 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 103 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 104 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 105 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 106 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 107 "$nonLatin$nonLatin$nonLatin$nonLatin"); |
| 108 Expect.equals(nonLatin * 64, "${nonLatin * 4}${nonLatin * 4}" |
| 109 "${nonLatin * 4}${nonLatin * 4}" |
| 110 "${nonLatin * 4}${nonLatin * 4}" |
| 111 "${nonLatin * 4}${nonLatin * 4}" |
| 112 "${nonLatin * 4}${nonLatin * 4}" |
| 113 "${nonLatin * 4}${nonLatin * 4}" |
| 114 "${nonLatin * 4}${nonLatin * 4}" |
| 115 "${nonLatin * 4}${nonLatin * 4}"); |
| 116 // Mixed. |
| 117 Expect.equals(latin * 3 + nonLatin, "$latin$latin$latin$nonLatin"); |
| 118 Expect.equals(nonLatin + latin * 3, "$nonLatin$latin$latin$latin"); |
| 119 Expect.equals(latin * 60 + nonLatin * 4, |
| 120 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 121 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 122 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 123 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 124 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 125 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 126 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 127 "$latin$latin$latin$latin" |
| 128 "$nonLatin$nonLatin$nonLatin$nonLatin"); |
| 129 Expect.equals(nonLatin * 4 + latin * 60, |
| 130 "$nonLatin$nonLatin$nonLatin$nonLatin" |
| 131 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 132 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 133 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 134 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 135 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 136 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 137 "$latin$latin$latin$latin$latin$latin$latin$latin" |
| 138 "$latin$latin$latin$latin"); |
| 139 Expect.equals(latin * 60 + nonLatin * 4, |
| 140 "${latin * 4}${latin * 4}${latin * 4}${latin * 4}" |
| 141 "${latin * 4}${latin * 4}${latin * 4}${latin * 4}" |
| 142 "${latin * 4}${latin * 4}${latin * 4}${latin * 4}" |
| 143 "${latin * 4}${latin * 4}${latin * 4}${nonLatin * 4}"); |
| 144 Expect.equals(nonLatin * 4 + latin * 60, |
| 145 "${nonLatin * 4}${latin * 4}${latin * 4}${latin * 4}" |
| 146 "${latin * 4}${latin * 4}${latin * 4}${latin * 4}" |
| 147 "${latin * 4}${latin * 4}${latin * 4}${latin * 4}" |
| 148 "${latin * 4}${latin * 4}${latin * 4}${latin * 4}"); |
| 149 // With objects. |
| 150 Expect.equals(latin * 3, "$latin$oLatin$latin"); |
| 151 Expect.equals(latin * 64, "$latin$latin$latin$latin$latin$latin$latin$oLatin" |
| 152 "$latin$latin$latin$latin$latin$latin$latin$oLatin" |
| 153 "$latin$latin$latin$latin$latin$latin$latin$oLatin" |
| 154 "$latin$latin$latin$latin$latin$latin$latin$oLatin" |
| 155 "$latin$latin$latin$latin$latin$latin$latin$oLatin" |
| 156 "$latin$latin$latin$latin$latin$latin$latin$oLatin" |
| 157 "$latin$latin$latin$latin$latin$latin$latin$oLatin" |
| 158 "$latin$latin$latin$latin$latin$latin$latin$oLatin" |
| 159 ); |
| 160 Expect.equals(latin * 64, "${latin * 4}${latin * 4}${latin * 4}${oLatin * 4}" |
| 161 "${latin * 4}${latin * 4}${latin * 4}${oLatin * 4}" |
| 162 "${latin * 4}${latin * 4}${latin * 4}${oLatin * 4}" |
| 163 "${latin * 4}${latin * 4}${latin * 4}${oLatin * 4}" |
| 164 ); |
| 165 // Non-ASCII. |
| 166 Expect.equals(nonLatin * 3, "$nonLatin$oNonLatin$nonLatin"); |
| 167 Expect.equals(nonLatin * 64, "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 168 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 169 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 170 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 171 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 172 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 173 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 174 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 175 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 176 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 177 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 178 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 179 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 180 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 181 "$nonLatin$nonLatin$nonLatin$oNonLatin" |
| 182 "$nonLatin$nonLatin$nonLatin$oNonLatin"); |
| 183 Expect.equals(nonLatin * 64, "${nonLatin * 4}${oNonLatin * 4}" |
| 184 "${nonLatin * 4}${oNonLatin * 4}" |
| 185 "${nonLatin * 4}${oNonLatin * 4}" |
| 186 "${nonLatin * 4}${oNonLatin * 4}" |
| 187 "${nonLatin * 4}${oNonLatin * 4}" |
| 188 "${nonLatin * 4}${oNonLatin * 4}" |
| 189 "${nonLatin * 4}${oNonLatin * 4}" |
| 190 "${nonLatin * 4}${oNonLatin * 4}"); |
| 191 // Mixed. |
| 192 Expect.equals(latin * 2 + nonLatin * 2, "$latin$oLatin$nonLatin$oNonLatin"); |
| 193 Expect.equals(nonLatin * 2 + latin * 2, "$nonLatin$oNonLatin$latin$oLatin"); |
| 194 Expect.equals((latin * 2 + nonLatin * 2) * 8, |
| 195 "$latin$oLatin$nonLatin$oNonLatin" |
| 196 "$latin$oLatin$nonLatin$oNonLatin" |
| 197 "$latin$oLatin$nonLatin$oNonLatin" |
| 198 "$latin$oLatin$nonLatin$oNonLatin" |
| 199 "$latin$oLatin$nonLatin$oNonLatin" |
| 200 "$latin$oLatin$nonLatin$oNonLatin" |
| 201 "$latin$oLatin$nonLatin$oNonLatin" |
| 202 "$latin$oLatin$nonLatin$oNonLatin"); |
| 203 Expect.equals((nonLatin * 2 + latin * 2) * 8, |
| 204 "$nonLatin$oNonLatin$latin$oLatin" |
| 205 "$nonLatin$oNonLatin$latin$oLatin" |
| 206 "$nonLatin$oNonLatin$latin$oLatin" |
| 207 "$nonLatin$oNonLatin$latin$oLatin" |
| 208 "$nonLatin$oNonLatin$latin$oLatin" |
| 209 "$nonLatin$oNonLatin$latin$oLatin" |
| 210 "$nonLatin$oNonLatin$latin$oLatin" |
| 211 "$nonLatin$oNonLatin$latin$oLatin"); |
| 212 |
| 213 // All combinations |
| 214 var o1 = new Stringable("x"); |
| 215 var o2 = new Stringable("\ufeff"); |
| 216 |
| 217 Expect.equals("a\u2000x\ufeff", "${"a"}${"\u2000"}${o1}${o2}"); |
| 218 Expect.equals("a\u2000\ufeffx", "${"a"}${"\u2000"}${o2}${o1}"); |
| 219 Expect.equals("ax\u2000\ufeff", "${"a"}${o1}${"\u2000"}${o2}"); |
| 220 Expect.equals("ax\ufeff\u2000", "${"a"}${o1}${o2}${"\u2000"}"); |
| 221 Expect.equals("a\ufeffx\u2000", "${"a"}${o2}${o1}${"\u2000"}"); |
| 222 Expect.equals("a\ufeff\u2000x", "${"a"}${o2}${"\u2000"}${o1}"); |
| 223 |
| 224 Expect.equals("\u2000ax\ufeff", "${"\u2000"}${"a"}${o1}${o2}"); |
| 225 Expect.equals("\u2000a\ufeffx", "${"\u2000"}${"a"}${o2}${o1}"); |
| 226 Expect.equals("xa\u2000\ufeff", "${o1}${"a"}${"\u2000"}${o2}"); |
| 227 Expect.equals("xa\ufeff\u2000", "${o1}${"a"}${o2}${"\u2000"}"); |
| 228 Expect.equals("\ufeffax\u2000", "${o2}${"a"}${o1}${"\u2000"}"); |
| 229 Expect.equals("\ufeffa\u2000x", "${o2}${"a"}${"\u2000"}${o1}"); |
| 230 |
| 231 Expect.equals("\u2000xa\ufeff", "${"\u2000"}${o1}${"a"}${o2}"); |
| 232 Expect.equals("\u2000\ufeffax", "${"\u2000"}${o2}${"a"}${o1}"); |
| 233 Expect.equals("x\u2000a\ufeff", "${o1}${"\u2000"}${"a"}${o2}"); |
| 234 Expect.equals("x\ufeffa\u2000", "${o1}${o2}${"a"}${"\u2000"}"); |
| 235 Expect.equals("\ufeffxa\u2000", "${o2}${o1}${"a"}${"\u2000"}"); |
| 236 Expect.equals("\ufeff\u2000ax", "${o2}${"\u2000"}${"a"}${o1}"); |
| 237 |
| 238 Expect.equals("\u2000x\ufeffa", "${"\u2000"}${o1}${o2}${"a"}"); |
| 239 Expect.equals("\u2000\ufeffxa", "${"\u2000"}${o2}${o1}${"a"}"); |
| 240 Expect.equals("x\u2000\ufeffa", "${o1}${"\u2000"}${o2}${"a"}"); |
| 241 Expect.equals("x\ufeff\u2000a", "${o1}${o2}${"\u2000"}${"a"}"); |
| 242 Expect.equals("\ufeffx\u2000a", "${o2}${o1}${"\u2000"}${"a"}"); |
| 243 Expect.equals("\ufeff\u2000xa", "${o2}${"\u2000"}${o1}${"a"}"); |
| 244 } |
| OLD | NEW |