Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: tests/language/string_interpolate_test.dart

Issue 551823002: Optimize _GrowableArray._join and _StringBase._interpolate. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Removed operator+ change. Added more tests. Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/corelib/iterable_join_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 }
OLDNEW
« no previous file with comments | « tests/corelib/iterable_join_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698