OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 | 4 |
5 #include "include/dart_api.h" | 5 #include "include/dart_api.h" |
6 #include "include/dart_tools_api.h" | 6 #include "include/dart_tools_api.h" |
7 #include "platform/assert.h" | 7 #include "platform/assert.h" |
8 #include "vm/globals.h" | 8 #include "vm/globals.h" |
9 #include "vm/isolate.h" | 9 #include "vm/isolate.h" |
10 #include "vm/lockers.h" | 10 #include "vm/lockers.h" |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 "var _unused;" | 60 "var _unused;" |
61 "main() {\n" | 61 "main() {\n" |
62 " return 10;\n" | 62 " return 10;\n" |
63 "}\n"; | 63 "}\n"; |
64 | 64 |
65 lib = TestCase::ReloadTestScript(kReloadScript); | 65 lib = TestCase::ReloadTestScript(kReloadScript); |
66 EXPECT_VALID(lib); | 66 EXPECT_VALID(lib); |
67 EXPECT_EQ(10, SimpleInvoke(lib, "main")); | 67 EXPECT_EQ(10, SimpleInvoke(lib, "main")); |
68 } | 68 } |
69 | 69 |
70 TEST_CASE(IsolateReload_IncrementalCompile) { | |
71 const char* kScriptChars = | |
72 "main() {\n" | |
73 " return 42;\n" | |
74 "}\n"; | |
75 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | |
76 EXPECT_VALID(lib); | |
77 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | |
78 int64_t value = 0; | |
79 result = Dart_IntegerToInt64(result, &value); | |
80 EXPECT_VALID(result); | |
81 EXPECT_EQ(42, value); | |
82 | |
83 const char* kUpdatedScriptChars = | |
84 "main() {\n" | |
85 " return 24;\n" | |
86 "}\n" | |
87 ""; | |
88 lib = TestCase::ReloadTestScript(kUpdatedScriptChars); | |
89 EXPECT_VALID(lib); | |
90 result = Dart_Invoke(lib, NewString("main"), 0, NULL); | |
91 result = Dart_IntegerToInt64(result, &value); | |
92 EXPECT_VALID(result); | |
93 EXPECT_EQ(24, value); | |
94 } | |
95 | |
96 TEST_CASE(IsolateReload_KernelIncrementalCompile) { | |
97 // clang-format off | |
98 Dart_SourceFile sourcefiles[] = { | |
99 { | |
100 "file:///test-app", | |
101 "main() {\n" | |
102 " return 42;\n" | |
103 "}\n", | |
104 }, | |
105 { | |
106 "file:///.packages", "untitled:/" | |
107 }}; | |
108 // clang-format on | |
109 | |
110 Dart_Handle lib = TestCase::LoadTestScriptWithDFE( | |
111 sizeof(sourcefiles) / sizeof(Dart_SourceFile), sourcefiles, | |
112 NULL /* resolver */, true /* finalize */, true /* incrementally */); | |
113 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | |
114 int64_t value = 0; | |
115 result = Dart_IntegerToInt64(result, &value); | |
116 EXPECT_VALID(result); | |
117 EXPECT_EQ(42, value); | |
118 | |
119 // clang-format off | |
120 Dart_SourceFile updated_sourcefiles[] = { | |
121 { | |
122 "file:///test-app", | |
123 "main() {\n" | |
124 " return 24;\n" | |
125 "}\n" | |
126 "" | |
127 }}; | |
128 // clang-format on | |
129 { | |
130 void* kernel_pgm = NULL; | |
131 char* error = TestCase::CompileTestScriptWithDFE( | |
132 "file:///test-app", | |
133 sizeof(updated_sourcefiles) / sizeof(Dart_SourceFile), | |
134 updated_sourcefiles, &kernel_pgm, true /* incrementally */); | |
135 EXPECT(error == NULL); | |
136 EXPECT_NOTNULL(kernel_pgm); | |
137 | |
138 lib = TestCase::ReloadTestKernel(kernel_pgm); | |
139 EXPECT_VALID(lib); | |
140 } | |
141 result = Dart_Invoke(lib, NewString("main"), 0, NULL); | |
142 result = Dart_IntegerToInt64(result, &value); | |
143 EXPECT_VALID(result); | |
144 EXPECT_EQ(24, value); | |
145 } | |
146 | |
147 TEST_CASE(IsolateReload_KernelIncrementalCompileAppAndLib) { | |
148 // clang-format off | |
149 Dart_SourceFile sourcefiles[] = { | |
150 { | |
151 "file:///test-app.dart", | |
152 "import 'test-lib.dart';\n" | |
153 "main() {\n" | |
154 " return WhatsTheMeaningOfAllThis();\n" | |
155 "}\n", | |
156 }, | |
157 { | |
158 "file:///test-lib.dart", | |
159 "WhatsTheMeaningOfAllThis() {\n" | |
160 " return 42;\n" | |
161 "}\n", | |
162 }, | |
163 { | |
164 "file:///.packages", "untitled:/" | |
165 }}; | |
166 // clang-format on | |
167 | |
168 Dart_Handle lib = TestCase::LoadTestScriptWithDFE( | |
169 sizeof(sourcefiles) / sizeof(Dart_SourceFile), sourcefiles, | |
170 NULL /* resolver */, true /* finalize */, true /* incrementally */); | |
171 EXPECT_VALID(lib); | |
172 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | |
173 int64_t value = 0; | |
174 result = Dart_IntegerToInt64(result, &value); | |
175 EXPECT_VALID(result); | |
176 EXPECT_EQ(42, value); | |
177 | |
178 // clang-format off | |
179 Dart_SourceFile updated_sourcefiles[] = { | |
180 { | |
181 "file:///test-lib.dart", | |
182 "WhatsTheMeaningOfAllThis() {\n" | |
183 " return 24;\n" | |
184 "}\n" | |
185 "" | |
186 }}; | |
187 // clang-format on | |
188 { | |
189 void* kernel_pgm = NULL; | |
190 char* error = TestCase::CompileTestScriptWithDFE( | |
191 "file:///test-app", | |
192 sizeof(updated_sourcefiles) / sizeof(Dart_SourceFile), | |
193 updated_sourcefiles, &kernel_pgm, true /* incrementally */); | |
194 EXPECT(error == NULL); | |
195 EXPECT_NOTNULL(kernel_pgm); | |
196 | |
197 lib = TestCase::ReloadTestKernel(kernel_pgm); | |
198 EXPECT_VALID(lib); | |
199 } | |
200 result = Dart_Invoke(lib, NewString("main"), 0, NULL); | |
201 result = Dart_IntegerToInt64(result, &value); | |
202 EXPECT_VALID(result); | |
203 EXPECT_EQ(24, value); | |
204 } | |
205 | |
206 TEST_CASE(IsolateReload_KernelIncrementalCompileGenerics) { | |
207 // clang-format off | |
208 Dart_SourceFile sourcefiles[] = { | |
209 { | |
210 "file:///test-app.dart", | |
211 "import 'test-lib.dart';\n" | |
212 "class Account {\n" | |
213 " int balance() => 42;\n" | |
214 "}\n" | |
215 "class MyAccountState extends State<Account> {\n" | |
216 " MyAccountState(Account a): super(a) {}\n" | |
217 "}\n" | |
218 "main() {\n" | |
219 " return (new MyAccountState(new Account()))\n" | |
220 " .howAreTheThings().balance();\n" | |
221 "}\n", | |
222 }, | |
223 { | |
224 "file:///test-lib.dart", | |
225 "class State<T> {\n" | |
226 " T t;" | |
227 " State(this.t);\n" | |
228 " T howAreTheThings() => t;\n" | |
229 "}\n", | |
230 }, | |
231 { | |
232 "file:///.packages", "untitled:/" | |
233 }}; | |
234 // clang-format on | |
235 | |
236 Dart_Handle lib = TestCase::LoadTestScriptWithDFE( | |
237 sizeof(sourcefiles) / sizeof(Dart_SourceFile), sourcefiles, | |
238 NULL /* resolver */, true /* finalize */, true /* incrementally */); | |
239 EXPECT_VALID(lib); | |
240 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | |
241 int64_t value = 0; | |
242 result = Dart_IntegerToInt64(result, &value); | |
243 EXPECT_VALID(result); | |
244 EXPECT_EQ(42, value); | |
245 | |
246 // clang-format off | |
247 Dart_SourceFile updated_sourcefiles[] = { | |
248 { | |
249 "file:///test-app.dart", | |
250 "import 'test-lib.dart';\n" | |
251 "class Account {\n" | |
252 " int balance() => 24;\n" | |
253 "}\n" | |
254 "class MyAccountState extends State<Account> {\n" | |
255 " MyAccountState(Account a): super(a) {}\n" | |
256 "}\n" | |
257 "main() {\n" | |
258 " return (new MyAccountState(new Account()))\n" | |
259 " .howAreTheThings().balance();\n" | |
260 "}\n", | |
261 }}; | |
262 // clang-format on | |
263 { | |
264 void* kernel_pgm = NULL; | |
265 char* error = TestCase::CompileTestScriptWithDFE( | |
266 "file:///test-app", | |
267 sizeof(updated_sourcefiles) / sizeof(Dart_SourceFile), | |
268 updated_sourcefiles, &kernel_pgm, true /* incrementally */); | |
269 EXPECT(error == NULL); | |
270 EXPECT_NOTNULL(kernel_pgm); | |
271 | |
272 lib = TestCase::ReloadTestKernel(kernel_pgm); | |
273 EXPECT_VALID(lib); | |
274 } | |
275 result = Dart_Invoke(lib, NewString("main"), 0, NULL); | |
276 result = Dart_IntegerToInt64(result, &value); | |
277 EXPECT_VALID(result); | |
278 EXPECT_EQ(24, value); | |
279 } | |
280 | |
281 TEST_CASE(IsolateReload_BadClass) { | 70 TEST_CASE(IsolateReload_BadClass) { |
282 const char* kScript = | 71 const char* kScript = |
283 "class Foo {\n" | 72 "class Foo {\n" |
284 " final a;\n" | 73 " final a;\n" |
285 " Foo(this.a);\n" | 74 " Foo(this.a);\n" |
286 "}\n" | 75 "}\n" |
287 "main() {\n" | 76 "main() {\n" |
288 " new Foo(5);\n" | 77 " new Foo(5);\n" |
289 " return 4;\n" | 78 " return 4;\n" |
290 "}\n"; | 79 "}\n"; |
(...skipping 3318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3609 "}\n"; | 3398 "}\n"; |
3610 | 3399 |
3611 Dart_Handle result = TestCase::ReloadTestScript(kReloadScript); | 3400 Dart_Handle result = TestCase::ReloadTestScript(kReloadScript); |
3612 EXPECT_VALID(result); | 3401 EXPECT_VALID(result); |
3613 EXPECT_STREQ("false", SimpleInvokeStr(lib, "main")); | 3402 EXPECT_STREQ("false", SimpleInvokeStr(lib, "main")); |
3614 } | 3403 } |
3615 | 3404 |
3616 #endif // !PRODUCT | 3405 #endif // !PRODUCT |
3617 | 3406 |
3618 } // namespace dart | 3407 } // namespace dart |
OLD | NEW |