OLD | NEW |
---|---|
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 "vm/unit_test.h" | 5 #include "vm/unit_test.h" |
6 | 6 |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 | 8 |
9 #include "bin/builtin.h" | 9 #include "bin/builtin.h" |
10 #include "bin/dartutils.h" | 10 #include "bin/dartutils.h" |
(...skipping 10 matching lines...) Expand all Loading... | |
21 #include "vm/parser.h" | 21 #include "vm/parser.h" |
22 #include "vm/symbols.h" | 22 #include "vm/symbols.h" |
23 #include "vm/thread.h" | 23 #include "vm/thread.h" |
24 #include "vm/virtual_memory.h" | 24 #include "vm/virtual_memory.h" |
25 | 25 |
26 using dart::bin::Builtin; | 26 using dart::bin::Builtin; |
27 using dart::bin::DartUtils; | 27 using dart::bin::DartUtils; |
28 | 28 |
29 namespace dart { | 29 namespace dart { |
30 | 30 |
31 DECLARE_FLAG(bool, use_dart_frontend); | |
32 | |
31 TestCaseBase* TestCaseBase::first_ = NULL; | 33 TestCaseBase* TestCaseBase::first_ = NULL; |
32 TestCaseBase* TestCaseBase::tail_ = NULL; | 34 TestCaseBase* TestCaseBase::tail_ = NULL; |
33 | 35 |
34 | 36 |
35 TestCaseBase::TestCaseBase(const char* name) | 37 TestCaseBase::TestCaseBase(const char* name) |
36 : raw_test_(false), next_(NULL), name_(name) { | 38 : raw_test_(false), next_(NULL), name_(name) { |
37 if (first_ == NULL) { | 39 if (first_ == NULL) { |
38 first_ = this; | 40 first_ = this; |
39 } else { | 41 } else { |
40 tail_->next_ = this; | 42 tail_->next_ = this; |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
251 Dart_Handle source = DartUtils::ReadStringFromFile(resolved_url_chars); | 253 Dart_Handle source = DartUtils::ReadStringFromFile(resolved_url_chars); |
252 EXPECT_VALID(source); | 254 EXPECT_VALID(source); |
253 if (tag == Dart_kImportTag) { | 255 if (tag == Dart_kImportTag) { |
254 return Dart_LoadLibrary(url, resolved_url, source, 0, 0); | 256 return Dart_LoadLibrary(url, resolved_url, source, 0, 0); |
255 } else { | 257 } else { |
256 ASSERT(tag == Dart_kSourceTag); | 258 ASSERT(tag == Dart_kSourceTag); |
257 return Dart_LoadSource(library, url, resolved_url, source, 0, 0); | 259 return Dart_LoadSource(library, url, resolved_url, source, 0, 0); |
258 } | 260 } |
259 } | 261 } |
260 | 262 |
261 | 263 static Dart_Handle LoadTestScriptWithVMParser(const char* script, |
262 Dart_Handle TestCase::LoadTestScript(const char* script, | 264 Dart_NativeEntryResolver resolver, |
263 Dart_NativeEntryResolver resolver, | 265 const char* lib_url, |
264 const char* lib_url, | 266 bool finalize_classes) { |
265 bool finalize_classes) { | |
266 Dart_Handle url = NewString(lib_url); | 267 Dart_Handle url = NewString(lib_url); |
267 Dart_Handle source = NewString(script); | 268 Dart_Handle source = NewString(script); |
268 Dart_Handle result = Dart_SetLibraryTagHandler(LibraryTagHandler); | 269 Dart_Handle result = Dart_SetLibraryTagHandler(LibraryTagHandler); |
269 EXPECT_VALID(result); | 270 EXPECT_VALID(result); |
270 Dart_Handle lib = Dart_LoadScript(url, Dart_Null(), source, 0, 0); | 271 Dart_Handle lib = Dart_LoadScript(url, Dart_Null(), source, 0, 0); |
271 DART_CHECK_VALID(lib); | 272 DART_CHECK_VALID(lib); |
272 result = Dart_SetNativeResolver(lib, resolver, NULL); | 273 result = Dart_SetNativeResolver(lib, resolver, NULL); |
273 DART_CHECK_VALID(result); | 274 DART_CHECK_VALID(result); |
274 if (finalize_classes) { | 275 if (finalize_classes) { |
275 result = Dart_FinalizeLoading(false); | 276 result = Dart_FinalizeLoading(false); |
276 DART_CHECK_VALID(result); | 277 DART_CHECK_VALID(result); |
277 } | 278 } |
278 return lib; | 279 return lib; |
279 } | 280 } |
280 | 281 |
282 static char* Concat(const char* s1, const char* s2) { | |
283 int len = strlen(s1) + strlen(s2); | |
284 char* filename = new char[len + 1]; | |
285 snprintf(filename, len + 1, "%s%s", s1, s2); | |
286 return filename; | |
287 } | |
siva
2017/05/18 00:02:38
The Concat function above may not be needed if you
aam
2017/05/18 01:03:00
Done.
| |
288 | |
289 Dart_Handle TestCase::LoadTestScript(const char* script, | |
290 Dart_NativeEntryResolver resolver, | |
291 const char* lib_url, | |
292 bool finalize_classes) { | |
293 if (!FLAG_use_dart_frontend) { | |
294 return LoadTestScriptWithVMParser(script, resolver, lib_url, | |
295 finalize_classes); | |
296 } | |
siva
2017/05/18 00:02:38
Zone* zone = Thread::Current()->zone();
aam
2017/05/18 01:03:00
Done.
| |
297 | |
298 char* filename = Concat("file:///", lib_url); | |
siva
2017/05/18 00:02:39
char* filename = OS::SCreate(zone, "file:///", lib
aam
2017/05/18 01:03:00
Done.
| |
299 // clang-format off | |
300 Dart_SourceFile sourcefiles[] = { | |
301 { | |
302 filename, script, | |
303 }, | |
304 { | |
305 "file:///.packages", "untitled:/" | |
306 }}; | |
307 // clang-format on | |
308 | |
309 int sourcefiles_count = sizeof(sourcefiles) / sizeof(Dart_SourceFile); | |
310 Dart_KernelCompilationResult compilation_result = | |
311 Dart_CompileSourcesToKernel(filename, sourcefiles_count, sourcefiles); | |
312 delete[] filename; | |
siva
2017/05/18 00:02:38
delete not needed as 'filename' would be zone allo
aam
2017/05/18 01:03:00
Awesome, done!
| |
313 | |
314 EXPECT(compilation_result.status == Dart_KernelCompilationStatus_Ok) | |
siva
2017/05/18 00:02:38
The EXPECT above would also print an error message
aam
2017/05/18 01:03:01
Right, done.
| |
315 if (compilation_result.status != Dart_KernelCompilationStatus_Ok) { | |
316 OS::PrintErr("Compilation failed %s", compilation_result.error); | |
317 return NULL; | |
siva
2017/05/18 00:02:38
should return a Dart_Handle not NULL
return Dart_
aam
2017/05/18 01:03:01
Oh, nice! Done.
| |
318 } | |
319 const uint8_t* kernel_file = compilation_result.kernel; | |
320 intptr_t kernel_length = compilation_result.kernel_size; | |
321 EXPECT(kernel_file != NULL); | |
siva
2017/05/18 00:02:38
Should this be ASSERT(kernel_file != NULL);
or
i
aam
2017/05/18 01:03:01
Yes, I like this better!
| |
322 void* kernel_program = Dart_ReadKernelBinary(kernel_file, kernel_length); | |
323 EXPECT(kernel_program != NULL); | |
siva
2017/05/18 00:02:38
Ditto comment about this check here, should return
aam
2017/05/18 01:03:01
Done!
| |
324 return Dart_LoadKernel(kernel_program); | |
325 } | |
281 | 326 |
282 #ifndef PRODUCT | 327 #ifndef PRODUCT |
283 | 328 |
284 | 329 |
285 void TestCase::SetReloadTestScript(const char* script) { | 330 void TestCase::SetReloadTestScript(const char* script) { |
286 if (script_reload_key == kUnsetThreadLocalKey) { | 331 if (script_reload_key == kUnsetThreadLocalKey) { |
287 script_reload_key = OSThread::CreateThreadLocal(); | 332 script_reload_key = OSThread::CreateThreadLocal(); |
288 } | 333 } |
289 ASSERT(script_reload_key != kUnsetThreadLocalKey); | 334 ASSERT(script_reload_key != kUnsetThreadLocalKey); |
290 ASSERT(OSThread::GetThreadLocal(script_reload_key) == 0); | 335 ASSERT(OSThread::GetThreadLocal(script_reload_key) == 0); |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
492 } | 537 } |
493 // Copy the remainder of in to out. | 538 // Copy the remainder of in to out. |
494 while (*in != '\0') { | 539 while (*in != '\0') { |
495 *out++ = *in++; | 540 *out++ = *in++; |
496 } | 541 } |
497 *out = '\0'; | 542 *out = '\0'; |
498 } | 543 } |
499 | 544 |
500 | 545 |
501 } // namespace dart | 546 } // namespace dart |
OLD | NEW |