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

Side by Side Diff: runtime/vm/dart_api_impl_test.cc

Issue 8380020: Refactor the dart api a bit: (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 years, 1 month 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 | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/dart_api_state.h » ('j') | 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 4
5 #include "include/dart_api.h" 5 #include "include/dart_api.h"
6 6
7 #include "vm/assert.h" 7 #include "vm/assert.h"
8 #include "vm/dart_api_impl.h" 8 #include "vm/dart_api_impl.h"
9 #include "vm/dart_api_state.h" 9 #include "vm/dart_api_state.h"
10 #include "vm/unit_test.h" 10 #include "vm/unit_test.h"
11 #include "vm/utils.h" 11 #include "vm/utils.h"
12 #include "vm/verifier.h" 12 #include "vm/verifier.h"
13 13
14 namespace dart { 14 namespace dart {
15 15
16 UNIT_TEST_CASE(BooleanValues) { 16 UNIT_TEST_CASE(BooleanValues) {
17 Dart_CreateIsolate(NULL, NULL); 17 Dart_CreateIsolate(NULL, NULL);
18 Dart_EnterScope(); // Enter a Dart API scope for the unit test. 18 Dart_EnterScope(); // Enter a Dart API scope for the unit test.
19 19
20 Dart_Handle str = Dart_NewString("test"); 20 Dart_Handle str = Dart_NewString("test");
21 EXPECT(!Dart_IsBoolean(str)); 21 EXPECT(!Dart_IsBoolean(str));
22 Dart_Handle val1 = Dart_NewBoolean(true); 22 Dart_Handle val1 = Dart_NewBoolean(true);
23 EXPECT(Dart_IsBoolean(val1)); 23 EXPECT(Dart_IsBoolean(val1));
24 Dart_Handle val2 = Dart_NewBoolean(false); 24 Dart_Handle val2 = Dart_NewBoolean(false);
25 EXPECT(Dart_IsBoolean(val2)); 25 EXPECT(Dart_IsBoolean(val2));
26 Dart_Result result = Dart_BooleanValue(val1); 26 bool value = false;
27 EXPECT(Dart_IsValidResult(result) && Dart_GetResultAsCBoolean(result)); 27 Dart_Handle result = Dart_BooleanValue(val1, &value);
28 result = Dart_BooleanValue(val2); 28 EXPECT(Dart_IsValid(result) && value);
29 EXPECT(Dart_IsValidResult(result) && !Dart_GetResultAsCBoolean(result)); 29 result = Dart_BooleanValue(val2, &value);
30 EXPECT(Dart_IsValid(result) && !value);
30 31
31 Dart_ExitScope(); // Exit the Dart API scope. 32 Dart_ExitScope(); // Exit the Dart API scope.
32 Dart_ShutdownIsolate(); 33 Dart_ShutdownIsolate();
33 } 34 }
34 35
35 36
36 UNIT_TEST_CASE(DoubleValues) { 37 UNIT_TEST_CASE(DoubleValues) {
37 Dart_CreateIsolate(NULL, NULL); 38 Dart_CreateIsolate(NULL, NULL);
38 Dart_EnterScope(); // Enter a Dart API scope for the unit test. 39 Dart_EnterScope(); // Enter a Dart API scope for the unit test.
39 40
40 const double kDoubleVal1 = 201.29; 41 const double kDoubleVal1 = 201.29;
41 const double kDoubleVal2 = 101.19; 42 const double kDoubleVal2 = 101.19;
42 Dart_Handle val1 = Dart_NewDouble(kDoubleVal1); 43 Dart_Handle val1 = Dart_NewDouble(kDoubleVal1);
43 EXPECT(Dart_IsDouble(val1)); 44 EXPECT(Dart_IsDouble(val1));
44 Dart_Handle val2 = Dart_NewDouble(kDoubleVal2); 45 Dart_Handle val2 = Dart_NewDouble(kDoubleVal2);
45 EXPECT(Dart_IsDouble(val2)); 46 EXPECT(Dart_IsDouble(val2));
46 Dart_Result result = Dart_DoubleValue(val1); 47 double out1, out2;
47 EXPECT(Dart_IsValidResult(result)); 48 Dart_Handle result = Dart_DoubleValue(val1, &out1);
48 EXPECT_EQ(kDoubleVal1, Dart_GetResultAsCDouble(result)); 49 EXPECT(Dart_IsValid(result));
49 result = Dart_DoubleValue(val2); 50 EXPECT_EQ(kDoubleVal1, out1);
50 EXPECT(Dart_IsValidResult(result)); 51 result = Dart_DoubleValue(val2, &out2);
51 EXPECT_EQ(kDoubleVal2, Dart_GetResultAsCDouble(result)); 52 EXPECT(Dart_IsValid(result));
53 EXPECT_EQ(kDoubleVal2, out2);
52 54
53 Dart_ExitScope(); // Exit the Dart API scope. 55 Dart_ExitScope(); // Exit the Dart API scope.
54 Dart_ShutdownIsolate(); 56 Dart_ShutdownIsolate();
55 } 57 }
56 58
57 59
58 #if defined(TARGET_ARCH_IA32) // only ia32 can run execution tests. 60 #if defined(TARGET_ARCH_IA32) // only ia32 can run execution tests.
59 61
60 UNIT_TEST_CASE(NumberValues) { 62 UNIT_TEST_CASE(NumberValues) {
61 // TODO(antonm): add various kinds of ints (smi, mint, bigint). 63 // TODO(antonm): add various kinds of ints (smi, mint, bigint).
62 const char* kScriptChars = 64 const char* kScriptChars =
63 "class NumberValuesHelper {\n" 65 "class NumberValuesHelper {\n"
64 " static int getInt() { return 1; }\n" 66 " static int getInt() { return 1; }\n"
65 " static double getDouble() { return 1.0; }\n" 67 " static double getDouble() { return 1.0; }\n"
66 " static bool getBool() { return false; }\n" 68 " static bool getBool() { return false; }\n"
67 " static getNull() { return null; }\n" 69 " static getNull() { return null; }\n"
68 "}\n"; 70 "}\n";
69 Dart_Result result; 71 Dart_Handle result;
70 Dart_Handle handle;
71 72
72 Dart_CreateIsolate(NULL, NULL); 73 Dart_CreateIsolate(NULL, NULL);
73 { 74 {
74 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 75 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
75 76
76 // Create a test library and Load up a test script in it. 77 // Create a test library and Load up a test script in it.
77 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 78 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
78 79
79 Dart_Handle class_name = Dart_NewString("NumberValuesHelper"); 80 Dart_Handle class_name = Dart_NewString("NumberValuesHelper");
80 // Check int case. 81 // Check int case.
81 result = Dart_InvokeStatic(lib, 82 result = Dart_InvokeStatic(lib,
82 class_name, 83 class_name,
83 Dart_NewString("getInt"), 84 Dart_NewString("getInt"),
84 0, 85 0,
85 NULL); 86 NULL);
86 EXPECT(Dart_IsValidResult(result)); 87 EXPECT(Dart_IsValid(result));
87 handle = Dart_GetResult(result); 88 EXPECT(!Dart_ExceptionOccurred(result));
88 EXPECT(!Dart_ExceptionOccurred(handle)); 89 EXPECT(Dart_IsNumber(result));
89 EXPECT(Dart_IsNumber(handle));
90 90
91 // Check double case. 91 // Check double case.
92 result = Dart_InvokeStatic(lib, 92 result = Dart_InvokeStatic(lib,
93 class_name, 93 class_name,
94 Dart_NewString("getDouble"), 94 Dart_NewString("getDouble"),
95 0, 95 0,
96 NULL); 96 NULL);
97 EXPECT(Dart_IsValidResult(result)); 97 EXPECT(Dart_IsValid(result));
98 handle = Dart_GetResult(result); 98 EXPECT(!Dart_ExceptionOccurred(result));
99 EXPECT(!Dart_ExceptionOccurred(handle)); 99 EXPECT(Dart_IsNumber(result));
100 EXPECT(Dart_IsNumber(handle));
101 100
102 // Check bool case. 101 // Check bool case.
103 result = Dart_InvokeStatic(lib, 102 result = Dart_InvokeStatic(lib,
104 class_name, 103 class_name,
105 Dart_NewString("getBool"), 104 Dart_NewString("getBool"),
106 0, 105 0,
107 NULL); 106 NULL);
108 EXPECT(Dart_IsValidResult(result)); 107 EXPECT(Dart_IsValid(result));
109 handle = Dart_GetResult(result); 108 EXPECT(!Dart_ExceptionOccurred(result));
110 EXPECT(!Dart_ExceptionOccurred(handle)); 109 EXPECT(!Dart_IsNumber(result));
111 EXPECT(!Dart_IsNumber(handle));
112 110
113 // Check null case. 111 // Check null case.
114 result = Dart_InvokeStatic(lib, 112 result = Dart_InvokeStatic(lib,
115 class_name, 113 class_name,
116 Dart_NewString("getNull"), 114 Dart_NewString("getNull"),
117 0, 115 0,
118 NULL); 116 NULL);
119 EXPECT(Dart_IsValidResult(result)); 117 EXPECT(Dart_IsValid(result));
120 handle = Dart_GetResult(result); 118 EXPECT(!Dart_ExceptionOccurred(result));
121 EXPECT(!Dart_ExceptionOccurred(handle)); 119 EXPECT(!Dart_IsNumber(result));
122 EXPECT(!Dart_IsNumber(handle));
123 120
124 Dart_ExitScope(); // Exit the Dart API scope. 121 Dart_ExitScope(); // Exit the Dart API scope.
125 } 122 }
126 Dart_ShutdownIsolate(); 123 Dart_ShutdownIsolate();
127 } 124 }
128 125
129 #endif 126 #endif
130 127
131 128
132 UNIT_TEST_CASE(IntegerValues) { 129 UNIT_TEST_CASE(IntegerValues) {
133 Dart_CreateIsolate(NULL, NULL); 130 Dart_CreateIsolate(NULL, NULL);
134 Dart_EnterScope(); // Enter a Dart API scope for the unit test. 131 Dart_EnterScope(); // Enter a Dart API scope for the unit test.
135 132
136 const int64_t kIntegerVal1 = 100; 133 const int64_t kIntegerVal1 = 100;
137 const int64_t kIntegerVal2 = 0xffffffff; 134 const int64_t kIntegerVal2 = 0xffffffff;
138 const char* kIntegerVal3 = "0x123456789123456789123456789"; 135 const char* kIntegerVal3 = "0x123456789123456789123456789";
139 136
140 Dart_Handle val1 = Dart_NewInteger(kIntegerVal1); 137 Dart_Handle val1 = Dart_NewInteger(kIntegerVal1);
141 EXPECT(Dart_IsInteger(val1)); 138 EXPECT(Dart_IsInteger(val1));
142 Dart_Result fits = Dart_IntegerFitsIntoInt64(val1); 139 bool fits = false;
143 EXPECT(Dart_IsValidResult(fits)); 140 Dart_Handle result = Dart_IntegerFitsIntoInt64(val1, &fits);
144 EXPECT(Dart_GetResultAsCBoolean(fits)); 141 EXPECT(Dart_IsValid(result));
142 EXPECT(fits);
145 143
146 Dart_Handle val2 = Dart_NewInteger(kIntegerVal2); 144 Dart_Handle val2 = Dart_NewInteger(kIntegerVal2);
147 EXPECT(Dart_IsInteger(val2)); 145 EXPECT(Dart_IsInteger(val2));
148 fits = Dart_IntegerFitsIntoInt64(val2); 146 result = Dart_IntegerFitsIntoInt64(val2, &fits);
149 EXPECT(Dart_IsValidResult(fits)); 147 EXPECT(Dart_IsValid(result));
150 EXPECT(Dart_GetResultAsCBoolean(fits)); 148 EXPECT(fits);
151 149
152 Dart_Handle val3 = Dart_NewIntegerFromHexCString(kIntegerVal3); 150 Dart_Handle val3 = Dart_NewIntegerFromHexCString(kIntegerVal3);
153 EXPECT(Dart_IsInteger(val3)); 151 EXPECT(Dart_IsInteger(val3));
154 fits = Dart_IntegerFitsIntoInt64(val3); 152 result = Dart_IntegerFitsIntoInt64(val3, &fits);
155 EXPECT(Dart_IsValidResult(fits)); 153 EXPECT(Dart_IsValid(result));
156 EXPECT(!Dart_GetResultAsCBoolean(fits)); 154 EXPECT(!fits);
157 155
158 Dart_Result result = Dart_IntegerValue(val1); 156 int64_t out = 0;
159 EXPECT(Dart_IsValidResult(result)); 157 result = Dart_IntegerValue(val1, &out);
160 EXPECT_EQ(kIntegerVal1, Dart_GetResultAsCInt64(result)); 158 EXPECT(Dart_IsValid(result));
159 EXPECT_EQ(kIntegerVal1, out);
161 160
162 result = Dart_IntegerValue(val2); 161 result = Dart_IntegerValue(val2, &out);
163 EXPECT(Dart_IsValidResult(result)); 162 EXPECT(Dart_IsValid(result));
164 EXPECT_EQ(kIntegerVal2, Dart_GetResultAsCInt64(result)); 163 EXPECT_EQ(kIntegerVal2, out);
165 164
166 result = Dart_IntegerValue(val3); 165 const char* chars = NULL;
167 EXPECT(Dart_IsValidResult(result)); 166 result = Dart_IntegerValueHexCString(val3, &chars);
168 EXPECT(!strcmp(kIntegerVal3, Dart_GetResultAsCString(result))); 167 EXPECT(Dart_IsValid(result));
168 EXPECT(!strcmp(kIntegerVal3, chars));
169 169
170 Dart_ExitScope(); // Exit the Dart API scope. 170 Dart_ExitScope(); // Exit the Dart API scope.
171 Dart_ShutdownIsolate(); 171 Dart_ShutdownIsolate();
172 } 172 }
173 173
174 174
175 UNIT_TEST_CASE(ArrayValues) { 175 UNIT_TEST_CASE(ArrayValues) {
176 Dart_CreateIsolate(NULL, NULL); 176 Dart_CreateIsolate(NULL, NULL);
177 Dart_EnterScope(); // Enter a Dart API scope for the unit test. 177 Dart_EnterScope(); // Enter a Dart API scope for the unit test.
178 178
179 const int kArrayLength = 10; 179 const int kArrayLength = 10;
180 Dart_Handle str = Dart_NewString("test"); 180 Dart_Handle str = Dart_NewString("test");
181 EXPECT(!Dart_IsArray(str)); 181 EXPECT(!Dart_IsArray(str));
182 Dart_Handle val = Dart_NewArray(kArrayLength); 182 Dart_Handle val = Dart_NewArray(kArrayLength);
183 EXPECT(Dart_IsArray(val)); 183 EXPECT(Dart_IsArray(val));
184 Dart_Result result = Dart_GetLength(val); 184 intptr_t len = 0;
185 EXPECT(Dart_IsValidResult(result)); 185 Dart_Handle result = Dart_GetLength(val, &len);
186 EXPECT_EQ(kArrayLength, Dart_GetResultAsCIntptr(result)); 186 EXPECT(Dart_IsValid(result));
187 EXPECT_EQ(kArrayLength, len);
187 188
188 // Check invalid array access. 189 // Check invalid array access.
189 result = Dart_ArraySetAt(val, (kArrayLength + 10), Dart_NewInteger(10)); 190 result = Dart_ArraySetAt(val, (kArrayLength + 10), Dart_NewInteger(10));
190 EXPECT(!Dart_IsValidResult(result)); 191 EXPECT(!Dart_IsValid(result));
191 result = Dart_ArraySetAt(val, -10, Dart_NewInteger(10)); 192 result = Dart_ArraySetAt(val, -10, Dart_NewInteger(10));
192 EXPECT(!Dart_IsValidResult(result)); 193 EXPECT(!Dart_IsValid(result));
193 result = Dart_ArrayGetAt(val, (kArrayLength + 10)); 194 result = Dart_ArrayGetAt(val, (kArrayLength + 10));
194 EXPECT(!Dart_IsValidResult(result)); 195 EXPECT(!Dart_IsValid(result));
195 result = Dart_ArrayGetAt(val, -10); 196 result = Dart_ArrayGetAt(val, -10);
196 EXPECT(!Dart_IsValidResult(result)); 197 EXPECT(!Dart_IsValid(result));
197 198
198 for (int i = 0; i < kArrayLength; i++) { 199 for (int i = 0; i < kArrayLength; i++) {
199 result = Dart_ArraySetAt(val, i, Dart_NewInteger(i)); 200 result = Dart_ArraySetAt(val, i, Dart_NewInteger(i));
200 EXPECT(Dart_IsValidResult(result)); 201 EXPECT(Dart_IsValid(result));
201 } 202 }
202 for (int i = 0; i < kArrayLength; i++) { 203 for (int i = 0; i < kArrayLength; i++) {
203 result = Dart_ArrayGetAt(val, i); 204 result = Dart_ArrayGetAt(val, i);
204 EXPECT(Dart_IsValidResult(result)); 205 EXPECT(Dart_IsValid(result));
205 Dart_Handle val_obj = Dart_GetResult(result); 206 int64_t value;
206 result = Dart_IntegerValue(val_obj); 207 result = Dart_IntegerValue(result, &value);
207 EXPECT(Dart_IsValidResult(result)); 208 EXPECT(Dart_IsValid(result));
208 EXPECT_EQ(i, Dart_GetResultAsCInt64(result)); 209 EXPECT_EQ(i, value);
209 } 210 }
210 211
211 Dart_ExitScope(); // Exit the Dart API scope. 212 Dart_ExitScope(); // Exit the Dart API scope.
212 Dart_ShutdownIsolate(); 213 Dart_ShutdownIsolate();
213 } 214 }
214 215
215 216
216 // Unit test for entering a scope, creating a local handle and exiting 217 // Unit test for entering a scope, creating a local handle and exiting
217 // the scope. 218 // the scope.
218 UNIT_TEST_CASE(EnterExitScope) { 219 UNIT_TEST_CASE(EnterExitScope) {
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 " final int fld2;\n" 482 " final int fld2;\n"
482 " static int fld3;\n" 483 " static int fld3;\n"
483 " static final int fld4 = 10;\n" 484 " static final int fld4 = 10;\n"
484 "}\n" 485 "}\n"
485 "class FieldsTest {\n" 486 "class FieldsTest {\n"
486 " static Fields testMain() {\n" 487 " static Fields testMain() {\n"
487 " Fields obj = new Fields(10, 20);\n" 488 " Fields obj = new Fields(10, 20);\n"
488 " return obj;\n" 489 " return obj;\n"
489 " }\n" 490 " }\n"
490 "}\n"; 491 "}\n";
491 Dart_Result result; 492 Dart_Handle result;
492 493
493 Dart_CreateIsolate(NULL, NULL); 494 Dart_CreateIsolate(NULL, NULL);
494 { 495 {
495 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 496 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
496 497
497 // Create a test library and Load up a test script in it. 498 // Create a test library and Load up a test script in it.
498 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 499 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
499 500
500 // Invoke a function which returns an object. 501 // Invoke a function which returns an object.
501 result = Dart_InvokeStatic(lib, 502 Dart_Handle retobj = Dart_InvokeStatic(lib,
502 Dart_NewString("FieldsTest"), 503 Dart_NewString("FieldsTest"),
503 Dart_NewString("testMain"), 504 Dart_NewString("testMain"),
504 0, 505 0,
505 NULL); 506 NULL);
506 EXPECT(Dart_IsValidResult(result)); 507 EXPECT(Dart_IsValid(retobj));
507 Dart_Handle retobj = Dart_GetResult(result);
508 EXPECT(!Dart_ExceptionOccurred(retobj)); 508 EXPECT(!Dart_ExceptionOccurred(retobj));
509 509
510 // Now access and set various static fields of Fields class. 510 // Now access and set various static fields of Fields class.
511 result = Dart_GetClass(lib, Dart_NewString("Fields")); 511 Dart_Handle cls = Dart_GetClass(lib, Dart_NewString("Fields"));
512 EXPECT(Dart_IsValidResult(result)); 512 EXPECT(Dart_IsValid(cls));
513 Dart_Handle cls = Dart_GetResult(result);
514 result = Dart_GetStaticField(cls, Dart_NewString("fld1")); 513 result = Dart_GetStaticField(cls, Dart_NewString("fld1"));
515 EXPECT(!Dart_IsValidResult(result)); 514 EXPECT(!Dart_IsValid(result));
516 result = Dart_GetInstanceField(retobj, Dart_NewString("fld3")); 515 result = Dart_GetInstanceField(retobj, Dart_NewString("fld3"));
517 EXPECT(!Dart_IsValidResult(result)); 516 EXPECT(!Dart_IsValid(result));
518 result = Dart_GetStaticField(cls, Dart_NewString("fld4")); 517 result = Dart_GetStaticField(cls, Dart_NewString("fld4"));
519 EXPECT(Dart_IsValidResult(result)); 518 EXPECT(Dart_IsValid(result));
520 result = Dart_IntegerValue(Dart_GetResult(result)); 519 int64_t value = 0;
521 EXPECT_EQ(10, Dart_GetResultAsCInt64(result)); 520 result = Dart_IntegerValue(result, &value);
521 EXPECT_EQ(10, value);
522 result = Dart_SetStaticField(cls, 522 result = Dart_SetStaticField(cls,
523 Dart_NewString("fld4"), 523 Dart_NewString("fld4"),
524 Dart_NewInteger(20)); 524 Dart_NewInteger(20));
525 EXPECT(!Dart_IsValidResult(result)); 525 EXPECT(!Dart_IsValid(result));
526 result = Dart_GetStaticField(cls, Dart_NewString("fld3")); 526 result = Dart_GetStaticField(cls, Dart_NewString("fld3"));
527 EXPECT(Dart_IsValidResult(result)); 527 EXPECT(Dart_IsValid(result));
528 result = Dart_SetStaticField(cls, 528 result = Dart_SetStaticField(cls,
529 Dart_NewString("fld3"), 529 Dart_NewString("fld3"),
530 Dart_NewInteger(200)); 530 Dart_NewInteger(200));
531 EXPECT(Dart_IsValidResult(result)); 531 EXPECT(Dart_IsValid(result));
532 result = Dart_IntegerValue(Dart_GetResult(result)); 532 result = Dart_IntegerValue(result, &value);
533 EXPECT_EQ(200, Dart_GetResultAsCInt64(result)); 533 EXPECT_EQ(200, value);
534 534
535 // Now access and set various instance fields of the returned object. 535 // Now access and set various instance fields of the returned object.
536 result = Dart_GetInstanceField(retobj, Dart_NewString("fld3")); 536 result = Dart_GetInstanceField(retobj, Dart_NewString("fld3"));
537 EXPECT(!Dart_IsValidResult(result)); 537 EXPECT(!Dart_IsValid(result));
538 result = Dart_GetInstanceField(retobj, Dart_NewString("fld1")); 538 result = Dart_GetInstanceField(retobj, Dart_NewString("fld1"));
539 EXPECT(Dart_IsValidResult(result)); 539 EXPECT(Dart_IsValid(result));
540 result = Dart_IntegerValue(Dart_GetResult(result)); 540 result = Dart_IntegerValue(result, &value);
541 EXPECT_EQ(10, Dart_GetResultAsCInt64(result)); 541 EXPECT_EQ(10, value);
542 result = Dart_GetInstanceField(retobj, Dart_NewString("fld2")); 542 result = Dart_GetInstanceField(retobj, Dart_NewString("fld2"));
543 EXPECT(Dart_IsValidResult(result)); 543 EXPECT(Dart_IsValid(result));
544 result = Dart_IntegerValue(Dart_GetResult(result)); 544 result = Dart_IntegerValue(result, &value);
545 EXPECT_EQ(20, Dart_GetResultAsCInt64(result)); 545 EXPECT_EQ(20, value);
546 result = Dart_SetInstanceField(retobj, 546 result = Dart_SetInstanceField(retobj,
547 Dart_NewString("fld2"), 547 Dart_NewString("fld2"),
548 Dart_NewInteger(40)); 548 Dart_NewInteger(40));
549 EXPECT(!Dart_IsValidResult(result)); 549 EXPECT(!Dart_IsValid(result));
550 result = Dart_SetInstanceField(retobj, 550 result = Dart_SetInstanceField(retobj,
551 Dart_NewString("fld1"), 551 Dart_NewString("fld1"),
552 Dart_NewInteger(40)); 552 Dart_NewInteger(40));
553 EXPECT(Dart_IsValidResult(result)); 553 EXPECT(Dart_IsValid(result));
554 result = Dart_GetInstanceField(retobj, Dart_NewString("fld1")); 554 result = Dart_GetInstanceField(retobj, Dart_NewString("fld1"));
555 EXPECT(Dart_IsValidResult(result)); 555 EXPECT(Dart_IsValid(result));
556 result = Dart_IntegerValue(Dart_GetResult(result)); 556 result = Dart_IntegerValue(result, &value);
557 EXPECT_EQ(40, Dart_GetResultAsCInt64(result)); 557 EXPECT_EQ(40, value);
558 558
559 Dart_ExitScope(); // Exit the Dart API scope. 559 Dart_ExitScope(); // Exit the Dart API scope.
560 } 560 }
561 Dart_ShutdownIsolate(); 561 Dart_ShutdownIsolate();
562 } 562 }
563 563
564 564
565 UNIT_TEST_CASE(HiddenFieldAccess) { 565 UNIT_TEST_CASE(HiddenFieldAccess) {
566 const char* kScriptChars = 566 const char* kScriptChars =
567 "class HiddenFields {\n" 567 "class HiddenFields {\n"
568 " HiddenFields(int i, int j) : _fld1 = i, _fld2 = j {}\n" 568 " HiddenFields(int i, int j) : _fld1 = i, _fld2 = j {}\n"
569 " int _fld1;\n" 569 " int _fld1;\n"
570 " final int _fld2;\n" 570 " final int _fld2;\n"
571 " static int _fld3;\n" 571 " static int _fld3;\n"
572 " static final int _fld4 = 10;\n" 572 " static final int _fld4 = 10;\n"
573 "}\n" 573 "}\n"
574 "class HiddenFieldsTest {\n" 574 "class HiddenFieldsTest {\n"
575 " static HiddenFields testMain() {\n" 575 " static HiddenFields testMain() {\n"
576 " HiddenFields obj = new HiddenFields(10, 20);\n" 576 " HiddenFields obj = new HiddenFields(10, 20);\n"
577 " return obj;\n" 577 " return obj;\n"
578 " }\n" 578 " }\n"
579 "}\n"; 579 "}\n";
580 Dart_Result result; 580 Dart_Handle result;
581 581
582 Dart_CreateIsolate(NULL, NULL); 582 Dart_CreateIsolate(NULL, NULL);
583 { 583 {
584 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 584 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
585 585
586 // Load up a test script which extends the native wrapper class. 586 // Load up a test script which extends the native wrapper class.
587 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 587 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
588 588
589 // Invoke a function which returns an object. 589 // Invoke a function which returns an object.
590 result = Dart_InvokeStatic(lib, 590 Dart_Handle retobj = Dart_InvokeStatic(lib,
591 Dart_NewString("HiddenFieldsTest"), 591 Dart_NewString("HiddenFieldsTest"),
592 Dart_NewString("testMain"), 592 Dart_NewString("testMain"),
593 0, 593 0,
594 NULL); 594 NULL);
595 EXPECT(Dart_IsValidResult(result)); 595 EXPECT(Dart_IsValid(retobj));
596 Dart_Handle retobj = Dart_GetResult(result);
597 EXPECT(!Dart_ExceptionOccurred(retobj)); 596 EXPECT(!Dart_ExceptionOccurred(retobj));
598 597
599 // Now access and set various static fields of HiddenFields class. 598 // Now access and set various static fields of HiddenFields class.
600 result = Dart_GetClass(lib, Dart_NewString("HiddenFields")); 599 Dart_Handle cls = Dart_GetClass(lib, Dart_NewString("HiddenFields"));
601 EXPECT(Dart_IsValidResult(result)); 600 EXPECT(Dart_IsValid(cls));
602 Dart_Handle cls = Dart_GetResult(result);
603 result = Dart_GetStaticField(cls, Dart_NewString("_fld1")); 601 result = Dart_GetStaticField(cls, Dart_NewString("_fld1"));
604 EXPECT(!Dart_IsValidResult(result)); 602 EXPECT(!Dart_IsValid(result));
605 result = Dart_GetInstanceField(retobj, Dart_NewString("_fld3")); 603 result = Dart_GetInstanceField(retobj, Dart_NewString("_fld3"));
606 EXPECT(!Dart_IsValidResult(result)); 604 EXPECT(!Dart_IsValid(result));
607 result = Dart_GetStaticField(cls, Dart_NewString("_fld4")); 605 result = Dart_GetStaticField(cls, Dart_NewString("_fld4"));
608 EXPECT(Dart_IsValidResult(result)); 606 EXPECT(Dart_IsValid(result));
609 result = Dart_IntegerValue(Dart_GetResult(result)); 607 int64_t value = 0;
610 EXPECT_EQ(10, Dart_GetResultAsCInt64(result)); 608 result = Dart_IntegerValue(result, &value);
609 EXPECT_EQ(10, value);
611 result = Dart_SetStaticField(cls, 610 result = Dart_SetStaticField(cls,
612 Dart_NewString("_fld4"), 611 Dart_NewString("_fld4"),
613 Dart_NewInteger(20)); 612 Dart_NewInteger(20));
614 EXPECT(!Dart_IsValidResult(result)); 613 EXPECT(!Dart_IsValid(result));
615 result = Dart_GetStaticField(cls, Dart_NewString("_fld3")); 614 result = Dart_GetStaticField(cls, Dart_NewString("_fld3"));
616 EXPECT(Dart_IsValidResult(result)); 615 EXPECT(Dart_IsValid(result));
617 result = Dart_SetStaticField(cls, 616 result = Dart_SetStaticField(cls,
618 Dart_NewString("_fld3"), 617 Dart_NewString("_fld3"),
619 Dart_NewInteger(200)); 618 Dart_NewInteger(200));
620 EXPECT(Dart_IsValidResult(result)); 619 EXPECT(Dart_IsValid(result));
621 result = Dart_IntegerValue(Dart_GetResult(result)); 620 result = Dart_IntegerValue(result, &value);
622 EXPECT_EQ(200, Dart_GetResultAsCInt64(result)); 621 EXPECT_EQ(200, value);
623 622
624 // Now access and set various instance fields of the returned object. 623 // Now access and set various instance fields of the returned object.
625 result = Dart_GetInstanceField(retobj, Dart_NewString("_fld3")); 624 result = Dart_GetInstanceField(retobj, Dart_NewString("_fld3"));
626 EXPECT(!Dart_IsValidResult(result)); 625 EXPECT(!Dart_IsValid(result));
627 result = Dart_GetInstanceField(retobj, Dart_NewString("_fld1")); 626 result = Dart_GetInstanceField(retobj, Dart_NewString("_fld1"));
628 EXPECT(Dart_IsValidResult(result)); 627 EXPECT(Dart_IsValid(result));
629 result = Dart_IntegerValue(Dart_GetResult(result)); 628 result = Dart_IntegerValue(result, &value);
630 EXPECT_EQ(10, Dart_GetResultAsCInt64(result)); 629 EXPECT_EQ(10, value);
631 result = Dart_GetInstanceField(retobj, Dart_NewString("_fld2")); 630 result = Dart_GetInstanceField(retobj, Dart_NewString("_fld2"));
632 EXPECT(Dart_IsValidResult(result)); 631 EXPECT(Dart_IsValid(result));
633 result = Dart_IntegerValue(Dart_GetResult(result)); 632 result = Dart_IntegerValue(result, &value);
634 EXPECT_EQ(20, Dart_GetResultAsCInt64(result)); 633 EXPECT_EQ(20, value);
635 result = Dart_SetInstanceField(retobj, 634 result = Dart_SetInstanceField(retobj,
636 Dart_NewString("_fld2"), 635 Dart_NewString("_fld2"),
637 Dart_NewInteger(40)); 636 Dart_NewInteger(40));
638 EXPECT(!Dart_IsValidResult(result)); 637 EXPECT(!Dart_IsValid(result));
639 result = Dart_SetInstanceField(retobj, 638 result = Dart_SetInstanceField(retobj,
640 Dart_NewString("_fld1"), 639 Dart_NewString("_fld1"),
641 Dart_NewInteger(40)); 640 Dart_NewInteger(40));
642 EXPECT(Dart_IsValidResult(result)); 641 EXPECT(Dart_IsValid(result));
643 result = Dart_GetInstanceField(retobj, Dart_NewString("_fld1")); 642 result = Dart_GetInstanceField(retobj, Dart_NewString("_fld1"));
644 EXPECT(Dart_IsValidResult(result)); 643 EXPECT(Dart_IsValid(result));
645 result = Dart_IntegerValue(Dart_GetResult(result)); 644 result = Dart_IntegerValue(result, &value);
646 EXPECT_EQ(40, Dart_GetResultAsCInt64(result)); 645 EXPECT_EQ(40, value);
647 646
648 Dart_ExitScope(); // Exit the Dart API scope. 647 Dart_ExitScope(); // Exit the Dart API scope.
649 } 648 }
650 Dart_ShutdownIsolate(); 649 Dart_ShutdownIsolate();
651 } 650 }
652 651
653 652
654 UNIT_TEST_CASE(InjectNativeFields1) { 653 UNIT_TEST_CASE(InjectNativeFields1) {
655 const char* kScriptChars = 654 const char* kScriptChars =
656 "class NativeFields extends NativeFieldsWrapper {\n" 655 "class NativeFields extends NativeFieldsWrapper {\n"
657 " NativeFields(int i, int j) : fld1 = i, fld2 = j {}\n" 656 " NativeFields(int i, int j) : fld1 = i, fld2 = j {}\n"
658 " int fld1;\n" 657 " int fld1;\n"
659 " final int fld2;\n" 658 " final int fld2;\n"
660 " static int fld3;\n" 659 " static int fld3;\n"
661 " static final int fld4 = 10;\n" 660 " static final int fld4 = 10;\n"
662 "}\n" 661 "}\n"
663 "class NativeFieldsTest {\n" 662 "class NativeFieldsTest {\n"
664 " static NativeFields testMain() {\n" 663 " static NativeFields testMain() {\n"
665 " NativeFields obj = new NativeFields(10, 20);\n" 664 " NativeFields obj = new NativeFields(10, 20);\n"
666 " return obj;\n" 665 " return obj;\n"
667 " }\n" 666 " }\n"
668 "}\n"; 667 "}\n";
669 Dart_Result result; 668 Dart_Handle result;
670 669
671 Dart_CreateIsolate(NULL, NULL); 670 Dart_CreateIsolate(NULL, NULL);
672 { 671 {
673 Zone zone; 672 Zone zone;
674 HandleScope scope; 673 HandleScope scope;
675 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 674 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
676 const int kNumNativeFields = 4; 675 const int kNumNativeFields = 4;
677 676
678 // Create a test library. 677 // Create a test library.
679 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 678 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
680 679
681 // Create a native wrapper class with native fields. 680 // Create a native wrapper class with native fields.
682 result = Dart_CreateNativeWrapperClass( 681 result = Dart_CreateNativeWrapperClass(
683 lib, 682 lib,
684 Dart_NewString("NativeFieldsWrapper"), 683 Dart_NewString("NativeFieldsWrapper"),
685 kNumNativeFields); 684 kNumNativeFields);
686 685
687 // Load up a test script in the test library. 686 // Load up a test script in the test library.
688 687
689 // Invoke a function which returns an object of type NativeFields. 688 // Invoke a function which returns an object of type NativeFields.
690 result = Dart_InvokeStatic(lib, 689 result = Dart_InvokeStatic(lib,
691 Dart_NewString("NativeFieldsTest"), 690 Dart_NewString("NativeFieldsTest"),
692 Dart_NewString("testMain"), 691 Dart_NewString("testMain"),
693 0, 692 0,
694 NULL); 693 NULL);
695 EXPECT(Dart_IsValidResult(result)); 694 EXPECT(Dart_IsValid(result));
696 Dart_Handle retobj = Dart_GetResult(result); 695 EXPECT(!Dart_ExceptionOccurred(result));
697 EXPECT(!Dart_ExceptionOccurred(retobj));
698 Instance& obj = Instance::Handle(); 696 Instance& obj = Instance::Handle();
699 obj ^= Api::UnwrapHandle(retobj); 697 obj ^= Api::UnwrapHandle(result);
700 const Class& cls = Class::Handle(obj.clazz()); 698 const Class& cls = Class::Handle(obj.clazz());
701 // We expect the newly created "NativeFields" object to have 699 // We expect the newly created "NativeFields" object to have
702 // 2 dart instance fields (fld1, fld2) and kNumNativeFields native fields. 700 // 2 dart instance fields (fld1, fld2) and kNumNativeFields native fields.
703 // Hence the size of an instance of "NativeFields" should be 701 // Hence the size of an instance of "NativeFields" should be
704 // (kNumNativeFields + 2) * kWordSize + sizeof the header word. 702 // (kNumNativeFields + 2) * kWordSize + sizeof the header word.
705 // We check to make sure the instance size computed by the VM matches 703 // We check to make sure the instance size computed by the VM matches
706 // our expectations. 704 // our expectations.
707 EXPECT_EQ(Utils::RoundUp(((kNumNativeFields + 2) * kWordSize) + kWordSize, 705 EXPECT_EQ(Utils::RoundUp(((kNumNativeFields + 2) * kWordSize) + kWordSize,
708 kObjectAlignment), 706 kObjectAlignment),
709 cls.instance_size()); 707 cls.instance_size());
(...skipping 12 matching lines...) Expand all
722 " final int fld2;\n" 720 " final int fld2;\n"
723 " static int fld3;\n" 721 " static int fld3;\n"
724 " static final int fld4 = 10;\n" 722 " static final int fld4 = 10;\n"
725 "}\n" 723 "}\n"
726 "class NativeFieldsTest {\n" 724 "class NativeFieldsTest {\n"
727 " static NativeFields testMain() {\n" 725 " static NativeFields testMain() {\n"
728 " NativeFields obj = new NativeFields(10, 20);\n" 726 " NativeFields obj = new NativeFields(10, 20);\n"
729 " return obj;\n" 727 " return obj;\n"
730 " }\n" 728 " }\n"
731 "}\n"; 729 "}\n";
732 Dart_Result result; 730 Dart_Handle result;
733 731
734 Dart_CreateIsolate(NULL, NULL); 732 Dart_CreateIsolate(NULL, NULL);
735 { 733 {
736 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 734 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
737 735
738 // Create a test library and Load up a test script in it. 736 // Create a test library and Load up a test script in it.
739 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 737 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
740 738
741 // Invoke a function which returns an object of type NativeFields. 739 // Invoke a function which returns an object of type NativeFields.
742 result = Dart_InvokeStatic(lib, 740 result = Dart_InvokeStatic(lib,
743 Dart_NewString("NativeFieldsTest"), 741 Dart_NewString("NativeFieldsTest"),
744 Dart_NewString("testMain"), 742 Dart_NewString("testMain"),
745 0, 743 0,
746 NULL); 744 NULL);
747 // We expect this to fail as class "NativeFields" extends 745 // We expect this to fail as class "NativeFields" extends
748 // "NativeFieldsWrapper" and there is no definition of it either 746 // "NativeFieldsWrapper" and there is no definition of it either
749 // in the dart code or through the native field injection mechanism. 747 // in the dart code or through the native field injection mechanism.
750 EXPECT(!Dart_IsValidResult(result)); 748 EXPECT(!Dart_IsValid(result));
751 749
752 Dart_ExitScope(); // Exit the Dart API scope. 750 Dart_ExitScope(); // Exit the Dart API scope.
753 } 751 }
754 Dart_ShutdownIsolate(); 752 Dart_ShutdownIsolate();
755 } 753 }
756 754
757 755
758 UNIT_TEST_CASE(NativeFieldAccess) { 756 UNIT_TEST_CASE(NativeFieldAccess) {
759 const char* kScriptChars = 757 const char* kScriptChars =
760 "class NativeFields extends NativeFieldsWrapper {\n" 758 "class NativeFields extends NativeFieldsWrapper {\n"
761 " NativeFields(int i, int j) : fld1 = i, fld2 = j {}\n" 759 " NativeFields(int i, int j) : fld1 = i, fld2 = j {}\n"
762 " int fld1;\n" 760 " int fld1;\n"
763 " final int fld2;\n" 761 " final int fld2;\n"
764 " static int fld3;\n" 762 " static int fld3;\n"
765 " static final int fld4 = 10;\n" 763 " static final int fld4 = 10;\n"
766 "}\n" 764 "}\n"
767 "class NativeFieldsTest {\n" 765 "class NativeFieldsTest {\n"
768 " static NativeFields testMain() {\n" 766 " static NativeFields testMain() {\n"
769 " NativeFields obj = new NativeFields(10, 20);\n" 767 " NativeFields obj = new NativeFields(10, 20);\n"
770 " return obj;\n" 768 " return obj;\n"
771 " }\n" 769 " }\n"
772 "}\n"; 770 "}\n";
773 Dart_Result result; 771 Dart_Handle result;
774 772
775 Dart_CreateIsolate(NULL, NULL); 773 Dart_CreateIsolate(NULL, NULL);
776 { 774 {
777 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 775 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
778 const int kNumNativeFields = 4; 776 const int kNumNativeFields = 4;
779 777
780 // Create a test library. 778 // Create a test library.
781 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 779 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
782 780
783 // Create a native wrapper class with native fields. 781 // Create a native wrapper class with native fields.
784 result = Dart_CreateNativeWrapperClass( 782 result = Dart_CreateNativeWrapperClass(
785 lib, 783 lib,
786 Dart_NewString("NativeFieldsWrapper"), 784 Dart_NewString("NativeFieldsWrapper"),
787 kNumNativeFields); 785 kNumNativeFields);
788 786
789 // Load up a test script in it. 787 // Load up a test script in it.
790 788
791 // Invoke a function which returns an object of type NativeFields. 789 // Invoke a function which returns an object of type NativeFields.
792 result = Dart_InvokeStatic(lib, 790 Dart_Handle retobj = Dart_InvokeStatic(lib,
793 Dart_NewString("NativeFieldsTest"), 791 Dart_NewString("NativeFieldsTest"),
794 Dart_NewString("testMain"), 792 Dart_NewString("testMain"),
795 0, 793 0,
796 NULL); 794 NULL);
797 EXPECT(Dart_IsValidResult(result)); 795 EXPECT(Dart_IsValid(retobj));
798 Dart_Handle retobj = Dart_GetResult(result);
799 EXPECT(!Dart_ExceptionOccurred(retobj)); 796 EXPECT(!Dart_ExceptionOccurred(retobj));
800 797
801 // Now access and set various instance fields of the returned object. 798 // Now access and set various instance fields of the returned object.
802 result = Dart_GetInstanceField(retobj, Dart_NewString("fld3")); 799 result = Dart_GetInstanceField(retobj, Dart_NewString("fld3"));
803 EXPECT(!Dart_IsValidResult(result)); 800 EXPECT(!Dart_IsValid(result));
804 result = Dart_GetInstanceField(retobj, Dart_NewString("fld1")); 801 result = Dart_GetInstanceField(retobj, Dart_NewString("fld1"));
805 EXPECT(Dart_IsValidResult(result)); 802 EXPECT(Dart_IsValid(result));
806 result = Dart_IntegerValue(Dart_GetResult(result)); 803 int64_t value = 0;
807 EXPECT_EQ(10, Dart_GetResultAsCInt64(result)); 804 result = Dart_IntegerValue(result, &value);
805 EXPECT_EQ(10, value);
808 result = Dart_GetInstanceField(retobj, Dart_NewString("fld2")); 806 result = Dart_GetInstanceField(retobj, Dart_NewString("fld2"));
809 EXPECT(Dart_IsValidResult(result)); 807 EXPECT(Dart_IsValid(result));
810 result = Dart_IntegerValue(Dart_GetResult(result)); 808 result = Dart_IntegerValue(result, &value);
811 EXPECT_EQ(20, Dart_GetResultAsCInt64(result)); 809 EXPECT_EQ(20, value);
812 result = Dart_SetInstanceField(retobj, 810 result = Dart_SetInstanceField(retobj,
813 Dart_NewString("fld2"), 811 Dart_NewString("fld2"),
814 Dart_NewInteger(40)); 812 Dart_NewInteger(40));
815 EXPECT(!Dart_IsValidResult(result)); 813 EXPECT(!Dart_IsValid(result));
816 result = Dart_SetInstanceField(retobj, 814 result = Dart_SetInstanceField(retobj,
817 Dart_NewString("fld1"), 815 Dart_NewString("fld1"),
818 Dart_NewInteger(40)); 816 Dart_NewInteger(40));
819 EXPECT(Dart_IsValidResult(result)); 817 EXPECT(Dart_IsValid(result));
820 result = Dart_GetInstanceField(retobj, Dart_NewString("fld1")); 818 result = Dart_GetInstanceField(retobj, Dart_NewString("fld1"));
821 EXPECT(Dart_IsValidResult(result)); 819 EXPECT(Dart_IsValid(result));
822 result = Dart_IntegerValue(Dart_GetResult(result)); 820 result = Dart_IntegerValue(result, &value);
823 EXPECT_EQ(40, Dart_GetResultAsCInt64(result)); 821 EXPECT_EQ(40, value);
824 822
825 // Now access and set various native instance fields of the returned object. 823 // Now access and set various native instance fields of the returned object.
826 const int kNativeFld0 = 0; 824 const int kNativeFld0 = 0;
827 const int kNativeFld1 = 1; 825 const int kNativeFld1 = 1;
828 const int kNativeFld2 = 2; 826 const int kNativeFld2 = 2;
829 const int kNativeFld3 = 3; 827 const int kNativeFld3 = 3;
830 const int kNativeFld4 = 4; 828 const int kNativeFld4 = 4;
831 result = Dart_GetNativeInstanceField(retobj, kNativeFld4); 829 intptr_t field_value = 0;
832 EXPECT(!Dart_IsValidResult(result)); 830 result = Dart_GetNativeInstanceField(retobj, kNativeFld4, &field_value);
833 result = Dart_GetNativeInstanceField(retobj, kNativeFld0); 831 EXPECT(!Dart_IsValid(result));
834 EXPECT(Dart_IsValidResult(result)); 832 result = Dart_GetNativeInstanceField(retobj, kNativeFld0, &field_value);
835 EXPECT_EQ(0, Dart_GetResultAsCIntptr(result)); 833 EXPECT(Dart_IsValid(result));
836 result = Dart_GetNativeInstanceField(retobj, kNativeFld1); 834 EXPECT_EQ(0, field_value);
837 EXPECT(Dart_IsValidResult(result)); 835 result = Dart_GetNativeInstanceField(retobj, kNativeFld1, &field_value);
838 EXPECT_EQ(0, Dart_GetResultAsCIntptr(result)); 836 EXPECT(Dart_IsValid(result));
839 result = Dart_GetNativeInstanceField(retobj, kNativeFld2); 837 EXPECT_EQ(0, field_value);
840 EXPECT(Dart_IsValidResult(result)); 838 result = Dart_GetNativeInstanceField(retobj, kNativeFld2, &field_value);
841 EXPECT_EQ(0, Dart_GetResultAsCIntptr(result)); 839 EXPECT(Dart_IsValid(result));
840 EXPECT_EQ(0, field_value);
842 result = Dart_SetNativeInstanceField(retobj, kNativeFld4, 40); 841 result = Dart_SetNativeInstanceField(retobj, kNativeFld4, 40);
843 EXPECT(!Dart_IsValidResult(result)); 842 EXPECT(!Dart_IsValid(result));
844 result = Dart_SetNativeInstanceField(retobj, kNativeFld0, 4); 843 result = Dart_SetNativeInstanceField(retobj, kNativeFld0, 4);
845 EXPECT(Dart_IsValidResult(result)); 844 EXPECT(Dart_IsValid(result));
846 result = Dart_SetNativeInstanceField(retobj, kNativeFld1, 40); 845 result = Dart_SetNativeInstanceField(retobj, kNativeFld1, 40);
847 EXPECT(Dart_IsValidResult(result)); 846 EXPECT(Dart_IsValid(result));
848 result = Dart_SetNativeInstanceField(retobj, kNativeFld2, 400); 847 result = Dart_SetNativeInstanceField(retobj, kNativeFld2, 400);
849 EXPECT(Dart_IsValidResult(result)); 848 EXPECT(Dart_IsValid(result));
850 result = Dart_SetNativeInstanceField(retobj, kNativeFld3, 4000); 849 result = Dart_SetNativeInstanceField(retobj, kNativeFld3, 4000);
851 EXPECT(Dart_IsValidResult(result)); 850 EXPECT(Dart_IsValid(result));
852 result = Dart_GetNativeInstanceField(retobj, kNativeFld3); 851 result = Dart_GetNativeInstanceField(retobj, kNativeFld3, &field_value);
853 EXPECT(Dart_IsValidResult(result)); 852 EXPECT(Dart_IsValid(result));
854 EXPECT_EQ(4000, Dart_GetResultAsCIntptr(result)); 853 EXPECT_EQ(4000, field_value);
855 854
856 // Now re-access various dart instance fields of the returned object 855 // Now re-access various dart instance fields of the returned object
857 // to ensure that there was no corruption while setting native fields. 856 // to ensure that there was no corruption while setting native fields.
858 result = Dart_GetInstanceField(retobj, Dart_NewString("fld1")); 857 result = Dart_GetInstanceField(retobj, Dart_NewString("fld1"));
859 EXPECT(Dart_IsValidResult(result)); 858 EXPECT(Dart_IsValid(result));
860 result = Dart_IntegerValue(Dart_GetResult(result)); 859 result = Dart_IntegerValue(result, &value);
861 EXPECT_EQ(40, Dart_GetResultAsCInt64(result)); 860 EXPECT_EQ(40, value);
862 result = Dart_GetInstanceField(retobj, Dart_NewString("fld2")); 861 result = Dart_GetInstanceField(retobj, Dart_NewString("fld2"));
863 EXPECT(Dart_IsValidResult(result)); 862 EXPECT(Dart_IsValid(result));
864 result = Dart_IntegerValue(Dart_GetResult(result)); 863 result = Dart_IntegerValue(result, &value);
865 EXPECT_EQ(20, Dart_GetResultAsCInt64(result)); 864 EXPECT_EQ(20, value);
866 865
867 Dart_ExitScope(); // Exit the Dart API scope. 866 Dart_ExitScope(); // Exit the Dart API scope.
868 } 867 }
869 Dart_ShutdownIsolate(); 868 Dart_ShutdownIsolate();
870 } 869 }
871 870
872 871
873 UNIT_TEST_CASE(NegativeNativeFieldAccess) { 872 UNIT_TEST_CASE(NegativeNativeFieldAccess) {
874 const char* kScriptChars = 873 const char* kScriptChars =
875 "class NativeFields {\n" 874 "class NativeFields {\n"
876 " NativeFields(int i, int j) : fld1 = i, fld2 = j {}\n" 875 " NativeFields(int i, int j) : fld1 = i, fld2 = j {}\n"
877 " int fld1;\n" 876 " int fld1;\n"
878 " final int fld2;\n" 877 " final int fld2;\n"
879 " static int fld3;\n" 878 " static int fld3;\n"
880 " static final int fld4 = 10;\n" 879 " static final int fld4 = 10;\n"
881 "}\n" 880 "}\n"
882 "class NativeFieldsTest {\n" 881 "class NativeFieldsTest {\n"
883 " static NativeFields testMain1() {\n" 882 " static NativeFields testMain1() {\n"
884 " NativeFields obj = new NativeFields(10, 20);\n" 883 " NativeFields obj = new NativeFields(10, 20);\n"
885 " return obj;\n" 884 " return obj;\n"
886 " }\n" 885 " }\n"
887 " static Function testMain2() {\n" 886 " static Function testMain2() {\n"
888 " return function() {};\n" 887 " return function() {};\n"
889 " }\n" 888 " }\n"
890 "}\n"; 889 "}\n";
891 Dart_Result result; 890 Dart_Handle result;
892 891
893 Dart_CreateIsolate(NULL, NULL); 892 Dart_CreateIsolate(NULL, NULL);
894 { 893 {
895 Zone zone; 894 Zone zone;
896 HandleScope scope; 895 HandleScope scope;
897 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 896 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
898 897
899 // Create a test library and Load up a test script in it. 898 // Create a test library and Load up a test script in it.
900 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 899 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
901 900
902 // Invoke a function which returns an object of type NativeFields. 901 // Invoke a function which returns an object of type NativeFields.
903 result = Dart_InvokeStatic(lib, 902 Dart_Handle retobj = Dart_InvokeStatic(lib,
904 Dart_NewString("NativeFieldsTest"), 903 Dart_NewString("NativeFieldsTest"),
905 Dart_NewString("testMain1"), 904 Dart_NewString("testMain1"),
906 0, 905 0,
907 NULL); 906 NULL);
908 EXPECT(Dart_IsValidResult(result)); 907 EXPECT(Dart_IsValid(retobj));
909 Dart_Handle retobj = Dart_GetResult(result);
910 EXPECT(!Dart_ExceptionOccurred(retobj)); 908 EXPECT(!Dart_ExceptionOccurred(retobj));
911 909
912
913 // Now access and set various native instance fields of the returned object. 910 // Now access and set various native instance fields of the returned object.
914 // All of these tests are expected to return failure as there are no 911 // All of these tests are expected to return failure as there are no
915 // native fields in an instance of NativeFields. 912 // native fields in an instance of NativeFields.
916 const int kNativeFld0 = 0; 913 const int kNativeFld0 = 0;
917 const int kNativeFld1 = 1; 914 const int kNativeFld1 = 1;
918 const int kNativeFld2 = 2; 915 const int kNativeFld2 = 2;
919 const int kNativeFld3 = 3; 916 const int kNativeFld3 = 3;
920 const int kNativeFld4 = 4; 917 const int kNativeFld4 = 4;
921 result = Dart_GetNativeInstanceField(retobj, kNativeFld4); 918 intptr_t value = 0;
922 EXPECT(!Dart_IsValidResult(result)); 919 result = Dart_GetNativeInstanceField(retobj, kNativeFld4, &value);
923 result = Dart_GetNativeInstanceField(retobj, kNativeFld0); 920 EXPECT(!Dart_IsValid(result));
924 EXPECT(!Dart_IsValidResult(result)); 921 result = Dart_GetNativeInstanceField(retobj, kNativeFld0, &value);
925 result = Dart_GetNativeInstanceField(retobj, kNativeFld1); 922 EXPECT(!Dart_IsValid(result));
926 EXPECT(!Dart_IsValidResult(result)); 923 result = Dart_GetNativeInstanceField(retobj, kNativeFld1, &value);
927 result = Dart_GetNativeInstanceField(retobj, kNativeFld2); 924 EXPECT(!Dart_IsValid(result));
928 EXPECT(!Dart_IsValidResult(result)); 925 result = Dart_GetNativeInstanceField(retobj, kNativeFld2, &value);
926 EXPECT(!Dart_IsValid(result));
929 result = Dart_SetNativeInstanceField(retobj, kNativeFld4, 40); 927 result = Dart_SetNativeInstanceField(retobj, kNativeFld4, 40);
930 EXPECT(!Dart_IsValidResult(result)); 928 EXPECT(!Dart_IsValid(result));
931 result = Dart_SetNativeInstanceField(retobj, kNativeFld3, 40); 929 result = Dart_SetNativeInstanceField(retobj, kNativeFld3, 40);
932 EXPECT(!Dart_IsValidResult(result)); 930 EXPECT(!Dart_IsValid(result));
933 result = Dart_SetNativeInstanceField(retobj, kNativeFld0, 400); 931 result = Dart_SetNativeInstanceField(retobj, kNativeFld0, 400);
934 EXPECT(!Dart_IsValidResult(result)); 932 EXPECT(!Dart_IsValid(result));
935 933
936 // Invoke a function which returns a closure object. 934 // Invoke a function which returns a closure object.
937 result = Dart_InvokeStatic(lib, 935 retobj = Dart_InvokeStatic(lib,
938 Dart_NewString("NativeFieldsTest"), 936 Dart_NewString("NativeFieldsTest"),
939 Dart_NewString("testMain2"), 937 Dart_NewString("testMain2"),
940 0, 938 0,
941 NULL); 939 NULL);
942 EXPECT(Dart_IsValidResult(result)); 940 EXPECT(Dart_IsValid(retobj));
943 retobj = Dart_GetResult(result);
944 EXPECT(!Dart_ExceptionOccurred(retobj)); 941 EXPECT(!Dart_ExceptionOccurred(retobj));
945 result = Dart_GetNativeInstanceField(retobj, kNativeFld4); 942 result = Dart_GetNativeInstanceField(retobj, kNativeFld4, &value);
946 EXPECT(!Dart_IsValidResult(result)); 943 EXPECT(!Dart_IsValid(result));
947 result = Dart_GetNativeInstanceField(retobj, kNativeFld0); 944 result = Dart_GetNativeInstanceField(retobj, kNativeFld0, &value);
948 EXPECT(!Dart_IsValidResult(result)); 945 EXPECT(!Dart_IsValid(result));
949 result = Dart_GetNativeInstanceField(retobj, kNativeFld1); 946 result = Dart_GetNativeInstanceField(retobj, kNativeFld1, &value);
950 EXPECT(!Dart_IsValidResult(result)); 947 EXPECT(!Dart_IsValid(result));
951 result = Dart_GetNativeInstanceField(retobj, kNativeFld2); 948 result = Dart_GetNativeInstanceField(retobj, kNativeFld2, &value);
952 EXPECT(!Dart_IsValidResult(result)); 949 EXPECT(!Dart_IsValid(result));
953 result = Dart_SetNativeInstanceField(retobj, kNativeFld4, 40); 950 result = Dart_SetNativeInstanceField(retobj, kNativeFld4, 40);
954 EXPECT(!Dart_IsValidResult(result)); 951 EXPECT(!Dart_IsValid(result));
955 result = Dart_SetNativeInstanceField(retobj, kNativeFld3, 40); 952 result = Dart_SetNativeInstanceField(retobj, kNativeFld3, 40);
956 EXPECT(!Dart_IsValidResult(result)); 953 EXPECT(!Dart_IsValid(result));
957 result = Dart_SetNativeInstanceField(retobj, kNativeFld0, 400); 954 result = Dart_SetNativeInstanceField(retobj, kNativeFld0, 400);
958 EXPECT(!Dart_IsValidResult(result)); 955 EXPECT(!Dart_IsValid(result));
959 956
960 Dart_ExitScope(); // Exit the Dart API scope. 957 Dart_ExitScope(); // Exit the Dart API scope.
961 } 958 }
962 Dart_ShutdownIsolate(); 959 Dart_ShutdownIsolate();
963 } 960 }
964 961
965 962
966 UNIT_TEST_CASE(GetStaticField_RunsInitializer) { 963 UNIT_TEST_CASE(GetStaticField_RunsInitializer) {
967 const char* kScriptChars = 964 const char* kScriptChars =
968 "class TestClass {\n" 965 "class TestClass {\n"
969 " static final int fld1 = 7;\n" 966 " static final int fld1 = 7;\n"
970 " static int fld2 = 11;\n" 967 " static int fld2 = 11;\n"
971 " static void testMain() {\n" 968 " static void testMain() {\n"
972 " }\n" 969 " }\n"
973 "}\n"; 970 "}\n";
974 Dart_Result result; 971 Dart_Handle result;
975 972
976 Dart_CreateIsolate(NULL, NULL); 973 Dart_CreateIsolate(NULL, NULL);
977 { 974 {
978 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 975 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
979 976
980 // Create a test library and Load up a test script in it. 977 // Create a test library and Load up a test script in it.
981 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 978 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
982 979
983 // Invoke a function which returns an object. 980 // Invoke a function which returns an object.
984 result = Dart_InvokeStatic(lib, 981 result = Dart_InvokeStatic(lib,
985 Dart_NewString("TestClass"), 982 Dart_NewString("TestClass"),
986 Dart_NewString("testMain"), 983 Dart_NewString("testMain"),
987 0, 984 0,
988 NULL); 985 NULL);
989 986
990 result = Dart_GetClass(lib, Dart_NewString("TestClass")); 987 Dart_Handle cls = Dart_GetClass(lib, Dart_NewString("TestClass"));
991 EXPECT(Dart_IsValidResult(result)); 988 EXPECT(Dart_IsValid(cls));
992 Dart_Handle cls = Dart_GetResult(result);
993 989
994 // For uninitialized fields, the getter is returned 990 // For uninitialized fields, the getter is returned
995 result = Dart_GetStaticField(cls, Dart_NewString("fld1")); 991 result = Dart_GetStaticField(cls, Dart_NewString("fld1"));
996 EXPECT(Dart_IsValidResult(result)); 992 EXPECT(Dart_IsValid(result));
997 result = Dart_IntegerValue(Dart_GetResult(result)); 993 int64_t value = 0;
998 EXPECT_EQ(7, Dart_GetResultAsCInt64(result)); 994 result = Dart_IntegerValue(result, &value);
995 EXPECT_EQ(7, value);
999 996
1000 result = Dart_GetStaticField(cls, Dart_NewString("fld2")); 997 result = Dart_GetStaticField(cls, Dart_NewString("fld2"));
1001 EXPECT(Dart_IsValidResult(result)); 998 EXPECT(Dart_IsValid(result));
1002 result = Dart_IntegerValue(Dart_GetResult(result)); 999 result = Dart_IntegerValue(result, &value);
1003 EXPECT_EQ(11, Dart_GetResultAsCInt64(result)); 1000 EXPECT_EQ(11, value);
1004 1001
1005 // Overwrite fld2 1002 // Overwrite fld2
1006 result = Dart_SetStaticField(cls, 1003 result = Dart_SetStaticField(cls,
1007 Dart_NewString("fld2"), 1004 Dart_NewString("fld2"),
1008 Dart_NewInteger(13)); 1005 Dart_NewInteger(13));
1009 EXPECT(Dart_IsValidResult(result)); 1006 EXPECT(Dart_IsValid(result));
1010 1007
1011 // We now get the new value for fld2, not the initializer 1008 // We now get the new value for fld2, not the initializer
1012 result = Dart_GetStaticField(cls, Dart_NewString("fld2")); 1009 result = Dart_GetStaticField(cls, Dart_NewString("fld2"));
1013 EXPECT(Dart_IsValidResult(result)); 1010 EXPECT(Dart_IsValid(result));
1014 result = Dart_IntegerValue(Dart_GetResult(result)); 1011 result = Dart_IntegerValue(result, &value);
1015 EXPECT_EQ(13, Dart_GetResultAsCInt64(result)); 1012 EXPECT_EQ(13, value);
1016 1013
1017 Dart_ExitScope(); // Exit the Dart API scope. 1014 Dart_ExitScope(); // Exit the Dart API scope.
1018 } 1015 }
1019 Dart_ShutdownIsolate(); 1016 Dart_ShutdownIsolate();
1020 } 1017 }
1021 1018
1022 1019
1023 UNIT_TEST_CASE(StaticFieldNotFound) { 1020 UNIT_TEST_CASE(StaticFieldNotFound) {
1024 const char* kScriptChars = 1021 const char* kScriptChars =
1025 "class TestClass {\n" 1022 "class TestClass {\n"
1026 " static void testMain() {\n" 1023 " static void testMain() {\n"
1027 " }\n" 1024 " }\n"
1028 "}\n"; 1025 "}\n";
1029 Dart_Result result; 1026 Dart_Handle result;
1030 1027
1031 Dart_CreateIsolate(NULL, NULL); 1028 Dart_CreateIsolate(NULL, NULL);
1032 { 1029 {
1033 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 1030 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
1034 1031
1035 // Create a test library and Load up a test script in it. 1032 // Create a test library and Load up a test script in it.
1036 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 1033 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
1037 1034
1038 // Invoke a function. 1035 // Invoke a function.
1039 result = Dart_InvokeStatic(lib, 1036 result = Dart_InvokeStatic(lib,
1040 Dart_NewString("TestClass"), 1037 Dart_NewString("TestClass"),
1041 Dart_NewString("testMain"), 1038 Dart_NewString("testMain"),
1042 0, 1039 0,
1043 NULL); 1040 NULL);
1044 1041
1045 result = Dart_GetClass(lib, Dart_NewString("TestClass")); 1042 Dart_Handle cls = Dart_GetClass(lib, Dart_NewString("TestClass"));
1046 EXPECT(Dart_IsValidResult(result)); 1043 EXPECT(Dart_IsValid(cls));
1047 Dart_Handle cls = Dart_GetResult(result);
1048 1044
1049 result = Dart_GetStaticField(cls, Dart_NewString("not_found")); 1045 result = Dart_GetStaticField(cls, Dart_NewString("not_found"));
1050 EXPECT(!Dart_IsValidResult(result)); 1046 EXPECT(!Dart_IsValid(result));
1051 EXPECT_STREQ("Specified field is not found in the class", 1047 EXPECT_STREQ("Specified field is not found in the class",
1052 Dart_GetErrorCString(result)); 1048 Dart_GetError(result));
1053 1049
1054 result = Dart_SetStaticField(cls, 1050 result = Dart_SetStaticField(cls,
1055 Dart_NewString("not_found"), 1051 Dart_NewString("not_found"),
1056 Dart_NewInteger(13)); 1052 Dart_NewInteger(13));
1057 EXPECT(!Dart_IsValidResult(result)); 1053 EXPECT(!Dart_IsValid(result));
1058 EXPECT_STREQ("Specified field is not found in the class", 1054 EXPECT_STREQ("Specified field is not found in the class",
1059 Dart_GetErrorCString(result)); 1055 Dart_GetError(result));
1060 1056
1061 Dart_ExitScope(); // Exit the Dart API scope. 1057 Dart_ExitScope(); // Exit the Dart API scope.
1062 } 1058 }
1063 Dart_ShutdownIsolate(); 1059 Dart_ShutdownIsolate();
1064 } 1060 }
1065 1061
1066 1062
1067 UNIT_TEST_CASE(InvokeDynamic) { 1063 UNIT_TEST_CASE(InvokeDynamic) {
1068 const char* kScriptChars = 1064 const char* kScriptChars =
1069 "class InvokeDynamic {\n" 1065 "class InvokeDynamic {\n"
1070 " InvokeDynamic(int i, int j) : fld1 = i, fld2 = j {}\n" 1066 " InvokeDynamic(int i, int j) : fld1 = i, fld2 = j {}\n"
1071 " int method1(int i) { return i + fld1 + fld2 + fld4; }\n" 1067 " int method1(int i) { return i + fld1 + fld2 + fld4; }\n"
1072 " static int method2(int i) { return i + fld4; }\n" 1068 " static int method2(int i) { return i + fld4; }\n"
1073 " int fld1;\n" 1069 " int fld1;\n"
1074 " final int fld2;\n" 1070 " final int fld2;\n"
1075 " static final int fld4 = 10;\n" 1071 " static final int fld4 = 10;\n"
1076 "}\n" 1072 "}\n"
1077 "class InvokeDynamicTest {\n" 1073 "class InvokeDynamicTest {\n"
1078 " static InvokeDynamic testMain() {\n" 1074 " static InvokeDynamic testMain() {\n"
1079 " InvokeDynamic obj = new InvokeDynamic(10, 20);\n" 1075 " InvokeDynamic obj = new InvokeDynamic(10, 20);\n"
1080 " return obj;\n" 1076 " return obj;\n"
1081 " }\n" 1077 " }\n"
1082 "}\n"; 1078 "}\n";
1083 Dart_Result result; 1079 Dart_Handle result;
1084 1080
1085 Dart_CreateIsolate(NULL, NULL); 1081 Dart_CreateIsolate(NULL, NULL);
1086 { 1082 {
1087 Zone zone; 1083 Zone zone;
1088 HandleScope scope; 1084 HandleScope scope;
1089 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 1085 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
1090 1086
1091 // Create a test library and Load up a test script in it. 1087 // Create a test library and Load up a test script in it.
1092 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 1088 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
1093 1089
1094 // Invoke a function which returns an object of type InvokeDynamic. 1090 // Invoke a function which returns an object of type InvokeDynamic.
1095 result = Dart_InvokeStatic(lib, 1091 Dart_Handle retobj = Dart_InvokeStatic(lib,
1096 Dart_NewString("InvokeDynamicTest"), 1092 Dart_NewString("InvokeDynamicTest"),
1097 Dart_NewString("testMain"), 1093 Dart_NewString("testMain"),
1098 0, 1094 0,
1099 NULL); 1095 NULL);
1100 EXPECT(Dart_IsValidResult(result)); 1096 EXPECT(Dart_IsValid(retobj));
1101 Dart_Handle retobj = Dart_GetResult(result);
1102 EXPECT(!Dart_ExceptionOccurred(retobj)); 1097 EXPECT(!Dart_ExceptionOccurred(retobj));
1103 1098
1104 1099
1105 // Now invoke a dynamic method and check the result. 1100 // Now invoke a dynamic method and check the result.
1106 Dart_Handle dart_arguments[1]; 1101 Dart_Handle dart_arguments[1];
1107 dart_arguments[0] = Dart_NewInteger(1); 1102 dart_arguments[0] = Dart_NewInteger(1);
1108 result = Dart_InvokeDynamic(retobj, 1103 result = Dart_InvokeDynamic(retobj,
1109 Dart_NewString("method1"), 1104 Dart_NewString("method1"),
1110 1, 1105 1,
1111 dart_arguments); 1106 dart_arguments);
1112 EXPECT(Dart_IsValidResult(result)); 1107 EXPECT(Dart_IsValid(result));
1113 Dart_Handle obj = Dart_GetResult(result); 1108 EXPECT(!Dart_ExceptionOccurred(result));
1114 EXPECT(!Dart_ExceptionOccurred(obj)); 1109 EXPECT(Dart_IsInteger(result));
1115 EXPECT(Dart_IsInteger(obj)); 1110 int64_t value = 0;
1116 result = Dart_IntegerValue(obj); 1111 result = Dart_IntegerValue(result, &value);
1117 EXPECT_EQ(41, Dart_GetResultAsCInt64(result)); 1112 EXPECT_EQ(41, value);
1118 1113
1119 result = Dart_InvokeDynamic(retobj, Dart_NewString("method2"), 0, NULL); 1114 result = Dart_InvokeDynamic(retobj, Dart_NewString("method2"), 0, NULL);
1120 EXPECT(!Dart_IsValidResult(result)); 1115 EXPECT(!Dart_IsValid(result));
1121 1116
1122 result = Dart_InvokeDynamic(retobj, Dart_NewString("method1"), 0, NULL); 1117 result = Dart_InvokeDynamic(retobj, Dart_NewString("method1"), 0, NULL);
1123 EXPECT(!Dart_IsValidResult(result)); 1118 EXPECT(!Dart_IsValid(result));
1124 1119
1125 Dart_ExitScope(); // Exit the Dart API scope. 1120 Dart_ExitScope(); // Exit the Dart API scope.
1126 } 1121 }
1127 Dart_ShutdownIsolate(); 1122 Dart_ShutdownIsolate();
1128 } 1123 }
1129 1124
1130 1125
1131 UNIT_TEST_CASE(InvokeClosure) { 1126 UNIT_TEST_CASE(InvokeClosure) {
1132 const char* kScriptChars = 1127 const char* kScriptChars =
1133 "class InvokeClosure {\n" 1128 "class InvokeClosure {\n"
(...skipping 12 matching lines...) Expand all
1146 "}\n" 1141 "}\n"
1147 "class InvokeClosureTest {\n" 1142 "class InvokeClosureTest {\n"
1148 " static Function testMain1() {\n" 1143 " static Function testMain1() {\n"
1149 " InvokeClosure obj = new InvokeClosure(10, 20);\n" 1144 " InvokeClosure obj = new InvokeClosure(10, 20);\n"
1150 " return obj.method1(10);\n" 1145 " return obj.method1(10);\n"
1151 " }\n" 1146 " }\n"
1152 " static Function testMain2() {\n" 1147 " static Function testMain2() {\n"
1153 " return InvokeClosure.method2(10);\n" 1148 " return InvokeClosure.method2(10);\n"
1154 " }\n" 1149 " }\n"
1155 "}\n"; 1150 "}\n";
1156 Dart_Result result; 1151 Dart_Handle result;
1157 1152
1158 Dart_CreateIsolate(NULL, NULL); 1153 Dart_CreateIsolate(NULL, NULL);
1159 { 1154 {
1160 Zone zone; 1155 Zone zone;
1161 HandleScope scope; 1156 HandleScope scope;
1162 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 1157 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
1163 1158
1164 // Create a test library and Load up a test script in it. 1159 // Create a test library and Load up a test script in it.
1165 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 1160 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
1166 1161
1167 // Invoke a function which returns a closure. 1162 // Invoke a function which returns a closure.
1168 result = Dart_InvokeStatic(lib, 1163 Dart_Handle retobj = Dart_InvokeStatic(lib,
1169 Dart_NewString("InvokeClosureTest"), 1164 Dart_NewString("InvokeClosureTest"),
1170 Dart_NewString("testMain1"), 1165 Dart_NewString("testMain1"),
1171 0, 1166 0,
1172 NULL); 1167 NULL);
1173 EXPECT(Dart_IsValidResult(result)); 1168 EXPECT(Dart_IsValid(retobj));
1174 Dart_Handle retobj = Dart_GetResult(result);
1175 EXPECT(!Dart_ExceptionOccurred(retobj)); 1169 EXPECT(!Dart_ExceptionOccurred(retobj));
1176 1170
1177 EXPECT(Dart_IsClosure(retobj)); 1171 EXPECT(Dart_IsClosure(retobj));
1178 EXPECT(!Dart_IsClosure(Dart_NewInteger(101))); 1172 EXPECT(!Dart_IsClosure(Dart_NewInteger(101)));
1179 1173
1180 // Now invoke the closure and check the result. 1174 // Now invoke the closure and check the result.
1181 Dart_Handle dart_arguments[1]; 1175 Dart_Handle dart_arguments[1];
1182 dart_arguments[0] = Dart_NewInteger(1); 1176 dart_arguments[0] = Dart_NewInteger(1);
1183 result = Dart_InvokeClosure(retobj, 1, dart_arguments); 1177 result = Dart_InvokeClosure(retobj, 1, dart_arguments);
1184 EXPECT(Dart_IsValidResult(result)); 1178 EXPECT(Dart_IsValid(result));
1185 Dart_Handle obj = Dart_GetResult(result); 1179 EXPECT(!Dart_ExceptionOccurred(result));
1186 EXPECT(!Dart_ExceptionOccurred(obj)); 1180 EXPECT(Dart_IsInteger(result));
1187 EXPECT(Dart_IsInteger(obj)); 1181 int64_t value = 0;
1188 result = Dart_IntegerValue(obj); 1182 result = Dart_IntegerValue(result, &value);
1189 EXPECT_EQ(51, Dart_GetResultAsCInt64(result)); 1183 EXPECT_EQ(51, value);
1190 1184
1191 // Invoke closure with wrong number of args, should result in exception. 1185 // Invoke closure with wrong number of args, should result in exception.
1192 result = Dart_InvokeClosure(retobj, 0, NULL); 1186 result = Dart_InvokeClosure(retobj, 0, NULL);
1193 EXPECT(Dart_IsValidResult(result)); 1187 EXPECT(Dart_IsValid(result));
1194 obj = Dart_GetResult(result); 1188 EXPECT(Dart_ExceptionOccurred(result));
1195 EXPECT(Dart_ExceptionOccurred(obj));
1196 1189
1197 // Invoke a function which returns a closure. 1190 // Invoke a function which returns a closure.
1198 result = Dart_InvokeStatic(lib, 1191 retobj = Dart_InvokeStatic(lib,
1199 Dart_NewString("InvokeClosureTest"), 1192 Dart_NewString("InvokeClosureTest"),
1200 Dart_NewString("testMain2"), 1193 Dart_NewString("testMain2"),
1201 0, 1194 0,
1202 NULL); 1195 NULL);
1203 EXPECT(Dart_IsValidResult(result)); 1196 EXPECT(Dart_IsValid(retobj));
1204 retobj = Dart_GetResult(result);
1205 EXPECT(!Dart_ExceptionOccurred(retobj)); 1197 EXPECT(!Dart_ExceptionOccurred(retobj));
1206 1198
1207 EXPECT(Dart_IsClosure(retobj)); 1199 EXPECT(Dart_IsClosure(retobj));
1208 EXPECT(!Dart_IsClosure(Dart_NewString("abcdef"))); 1200 EXPECT(!Dart_IsClosure(Dart_NewString("abcdef")));
1209 1201
1210 // Now invoke the closure and check the result (should be an exception). 1202 // Now invoke the closure and check the result (should be an exception).
1211 dart_arguments[0] = Dart_NewInteger(1); 1203 dart_arguments[0] = Dart_NewInteger(1);
1212 result = Dart_InvokeClosure(retobj, 1, dart_arguments); 1204 result = Dart_InvokeClosure(retobj, 1, dart_arguments);
1213 retobj = Dart_GetResult(result); 1205 EXPECT(Dart_ExceptionOccurred(result));
1214 EXPECT(Dart_ExceptionOccurred(retobj));
1215 1206
1216 Dart_ExitScope(); // Exit the Dart API scope. 1207 Dart_ExitScope(); // Exit the Dart API scope.
1217 } 1208 }
1218 Dart_ShutdownIsolate(); 1209 Dart_ShutdownIsolate();
1219 } 1210 }
1220 1211
1221 1212
1222 void ExceptionNative(Dart_NativeArguments args) { 1213 void ExceptionNative(Dart_NativeArguments args) {
1223 Dart_Handle param = Dart_GetNativeArgument(args, 0); 1214 Dart_Handle param = Dart_GetNativeArgument(args, 0);
1224 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 1215 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
(...skipping 18 matching lines...) Expand all
1243 " try { method1(10); } catch(var a) { return 5; } return 10;\n" 1234 " try { method1(10); } catch(var a) { return 5; } return 10;\n"
1244 " }\n" 1235 " }\n"
1245 " int fld1;\n" 1236 " int fld1;\n"
1246 "}\n" 1237 "}\n"
1247 "class ThrowExceptionTest {\n" 1238 "class ThrowExceptionTest {\n"
1248 " static ThrowException testMain() {\n" 1239 " static ThrowException testMain() {\n"
1249 " ThrowException obj = new ThrowException(10);\n" 1240 " ThrowException obj = new ThrowException(10);\n"
1250 " return obj;\n" 1241 " return obj;\n"
1251 " }\n" 1242 " }\n"
1252 "}\n"; 1243 "}\n";
1253 Dart_Result result; 1244 Dart_Handle result;
1254 1245
1255 Dart_CreateIsolate(NULL, NULL); 1246 Dart_CreateIsolate(NULL, NULL);
1256 Isolate* isolate = Isolate::Current(); 1247 Isolate* isolate = Isolate::Current();
1257 EXPECT(isolate != NULL); 1248 EXPECT(isolate != NULL);
1258 ApiState* state = isolate->api_state(); 1249 ApiState* state = isolate->api_state();
1259 EXPECT(state != NULL); 1250 EXPECT(state != NULL);
1260 { 1251 {
1261 intptr_t size = state->ZoneSizeInBytes(); 1252 intptr_t size = state->ZoneSizeInBytes();
1262 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 1253 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
1263 1254
1264 // Load up a test script which extends the native wrapper class. 1255 // Load up a test script which extends the native wrapper class.
1265 Dart_Handle lib = TestCase::LoadTestScript( 1256 Dart_Handle lib = TestCase::LoadTestScript(
1266 kScriptChars, 1257 kScriptChars,
1267 reinterpret_cast<Dart_NativeEntryResolver>(native_lookup)); 1258 reinterpret_cast<Dart_NativeEntryResolver>(native_lookup));
1268 1259
1269 // Invoke a function which returns an object of type ThrowException. 1260 // Invoke a function which returns an object of type ThrowException.
1270 result = Dart_InvokeStatic(lib, 1261 Dart_Handle retobj = Dart_InvokeStatic(lib,
1271 Dart_NewString("ThrowExceptionTest"), 1262 Dart_NewString("ThrowExceptionTest"),
1272 Dart_NewString("testMain"), 1263 Dart_NewString("testMain"),
1273 0, 1264 0,
1274 NULL); 1265 NULL);
1275 EXPECT(Dart_IsValidResult(result)); 1266 EXPECT(Dart_IsValid(retobj));
1276 Dart_Handle retobj = Dart_GetResult(result);
1277 EXPECT(!Dart_ExceptionOccurred(retobj)); 1267 EXPECT(!Dart_ExceptionOccurred(retobj));
1278 1268
1279 // Throwing an exception here should result in an error. 1269 // Throwing an exception here should result in an error.
1280 result = Dart_ThrowException(retobj); 1270 result = Dart_ThrowException(retobj);
1281 EXPECT(!Dart_IsValidResult(result)); 1271 EXPECT(!Dart_IsValid(result));
1282 1272
1283 // Now invoke method2 which invokes a natve method where it is 1273 // Now invoke method2 which invokes a natve method where it is
1284 // ok to throw an exception, check the result which would indicate 1274 // ok to throw an exception, check the result which would indicate
1285 // if an exception was thrown or not. 1275 // if an exception was thrown or not.
1286 result = Dart_InvokeDynamic(retobj, Dart_NewString("method2"), 0, NULL); 1276 result = Dart_InvokeDynamic(retobj, Dart_NewString("method2"), 0, NULL);
1287 EXPECT(Dart_IsValidResult(result)); 1277 EXPECT(Dart_IsValid(result));
1288 Dart_Handle obj = Dart_GetResult(result); 1278 EXPECT(!Dart_ExceptionOccurred(result));
1289 EXPECT(!Dart_ExceptionOccurred(obj)); 1279 EXPECT(Dart_IsInteger(result));
1290 EXPECT(Dart_IsInteger(obj)); 1280 int64_t value = 0;
1291 result = Dart_IntegerValue(obj); 1281 result = Dart_IntegerValue(result, &value);
1292 EXPECT_EQ(5, Dart_GetResultAsCInt64(result)); 1282 EXPECT_EQ(5, value);
1293 1283
1294 Dart_ExitScope(); // Exit the Dart API scope. 1284 Dart_ExitScope(); // Exit the Dart API scope.
1295 EXPECT_EQ(size, state->ZoneSizeInBytes()); 1285 EXPECT_EQ(size, state->ZoneSizeInBytes());
1296 } 1286 }
1297 Dart_ShutdownIsolate(); 1287 Dart_ShutdownIsolate();
1298 } 1288 }
1299 1289
1300 1290
1301 void NativeArgumentCounter(Dart_NativeArguments args) { 1291 void NativeArgumentCounter(Dart_NativeArguments args) {
1302 Dart_EnterScope(); 1292 Dart_EnterScope();
(...skipping 20 matching lines...) Expand all
1323 " }" 1313 " }"
1324 "}"; 1314 "}";
1325 1315
1326 Dart_CreateIsolate(NULL, NULL); 1316 Dart_CreateIsolate(NULL, NULL);
1327 { 1317 {
1328 Dart_EnterScope(); 1318 Dart_EnterScope();
1329 Dart_Handle lib = TestCase::LoadTestScript( 1319 Dart_Handle lib = TestCase::LoadTestScript(
1330 kScriptChars, 1320 kScriptChars,
1331 reinterpret_cast<Dart_NativeEntryResolver>(gnac_lookup)); 1321 reinterpret_cast<Dart_NativeEntryResolver>(gnac_lookup));
1332 1322
1333 Dart_Result result = Dart_InvokeStatic(lib, 1323 Dart_Handle result = Dart_InvokeStatic(lib,
1334 Dart_NewString("Test"), 1324 Dart_NewString("Test"),
1335 Dart_NewString("testMain"), 1325 Dart_NewString("testMain"),
1336 0, 1326 0,
1337 NULL); 1327 NULL);
1338 EXPECT(Dart_IsValidResult(result)); 1328 EXPECT(Dart_IsValid(result));
1339 Dart_Handle result_obj = Dart_GetResult(result); 1329 EXPECT(Dart_IsInteger(result));
1340 EXPECT(Dart_IsInteger(result_obj));
1341 1330
1342 result = Dart_IntegerValue(result_obj); 1331 int64_t value = 0;
1343 EXPECT(Dart_IsValidResult(result)); 1332 result = Dart_IntegerValue(result, &value);
1344 int64_t value = Dart_GetResultAsCInt64(result); 1333 EXPECT(Dart_IsValid(result));
1345 EXPECT_EQ(3, value); 1334 EXPECT_EQ(3, value);
1346 1335
1347 Dart_ExitScope(); 1336 Dart_ExitScope();
1348 } 1337 }
1349 Dart_ShutdownIsolate(); 1338 Dart_ShutdownIsolate();
1350 } 1339 }
1351 1340
1352 1341
1353 UNIT_TEST_CASE(InstanceOf) { 1342 UNIT_TEST_CASE(InstanceOf) {
1354 const char* kScriptChars = 1343 const char* kScriptChars =
1355 "class OtherClass {\n" 1344 "class OtherClass {\n"
1356 " static returnNull() { return null; }\n" 1345 " static returnNull() { return null; }\n"
1357 "}\n" 1346 "}\n"
1358 "class InstanceOfTest {\n" 1347 "class InstanceOfTest {\n"
1359 " InstanceOfTest() {}\n" 1348 " InstanceOfTest() {}\n"
1360 " static InstanceOfTest testMain() {\n" 1349 " static InstanceOfTest testMain() {\n"
1361 " return new InstanceOfTest();\n" 1350 " return new InstanceOfTest();\n"
1362 " }\n" 1351 " }\n"
1363 "}\n"; 1352 "}\n";
1364 Dart_Result result; 1353 Dart_Handle result;
1365 1354
1366 Dart_CreateIsolate(NULL, NULL); 1355 Dart_CreateIsolate(NULL, NULL);
1367 { 1356 {
1368 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 1357 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
1369 1358
1370 // Create a test library and Load up a test script in it. 1359 // Create a test library and Load up a test script in it.
1371 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 1360 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
1372 1361
1373 // Invoke a function which returns an object of type InstanceOf.. 1362 // Invoke a function which returns an object of type InstanceOf..
1374 result = Dart_InvokeStatic(lib, 1363 Dart_Handle instanceOfTestObj =
1375 Dart_NewString("InstanceOfTest"), 1364 Dart_InvokeStatic(lib,
1376 Dart_NewString("testMain"), 1365 Dart_NewString("InstanceOfTest"),
1377 0, 1366 Dart_NewString("testMain"),
1378 NULL); 1367 0,
1379 EXPECT(Dart_IsValidResult(result)); 1368 NULL);
1380 Dart_Handle instanceOfTestObj = Dart_GetResult(result); 1369 EXPECT(Dart_IsValid(instanceOfTestObj));
1381 EXPECT(!Dart_ExceptionOccurred(instanceOfTestObj)); 1370 EXPECT(!Dart_ExceptionOccurred(instanceOfTestObj));
1382 1371
1383 // Fetch InstanceOfTest class. 1372 // Fetch InstanceOfTest class.
1384 result = Dart_GetClass(lib, Dart_NewString("InstanceOfTest")); 1373 Dart_Handle cls = Dart_GetClass(lib, Dart_NewString("InstanceOfTest"));
1385 EXPECT(Dart_IsValidResult(result)); 1374 EXPECT(Dart_IsValid(cls));
1386 Dart_Handle cls = Dart_GetResult(result);
1387 EXPECT(!Dart_ExceptionOccurred(cls)); 1375 EXPECT(!Dart_ExceptionOccurred(cls));
1388 1376
1389 // Now check instanceOfTestObj reported as an instance of 1377 // Now check instanceOfTestObj reported as an instance of
1390 // InstanceOfTest class. 1378 // InstanceOfTest class.
1391 result = Dart_IsInstanceOf(instanceOfTestObj, cls); 1379 bool is_instance = false;
1392 EXPECT(Dart_IsValidResult(result)); 1380 result = Dart_IsInstanceOf(instanceOfTestObj, cls, &is_instance);
1393 EXPECT(Dart_GetResultAsCBoolean(result)); 1381 EXPECT(Dart_IsValid(result));
1382 EXPECT(is_instance);
1394 1383
1395 // Fetch OtherClass and check if instanceOfTestObj is instance of it. 1384 // Fetch OtherClass and check if instanceOfTestObj is instance of it.
1396 result = Dart_GetClass(lib, Dart_NewString("OtherClass")); 1385 Dart_Handle otherClass = Dart_GetClass(lib, Dart_NewString("OtherClass"));
1397 EXPECT(Dart_IsValidResult(result)); 1386 EXPECT(Dart_IsValid(otherClass));
1398 Dart_Handle otherClass = Dart_GetResult(result);
1399 EXPECT(!Dart_ExceptionOccurred(otherClass)); 1387 EXPECT(!Dart_ExceptionOccurred(otherClass));
1400 1388
1401 result = Dart_IsInstanceOf(instanceOfTestObj, otherClass); 1389 result = Dart_IsInstanceOf(instanceOfTestObj, otherClass, &is_instance);
1402 EXPECT(Dart_IsValidResult(result)); 1390 EXPECT(Dart_IsValid(result));
1403 EXPECT(!Dart_GetResultAsCBoolean(result)); 1391 EXPECT(!is_instance);
1404 1392
1405 // Check that primitives are not instances of InstanceOfTest class. 1393 // Check that primitives are not instances of InstanceOfTest class.
1406 result = Dart_IsInstanceOf(Dart_NewString("a string"), otherClass); 1394 result = Dart_IsInstanceOf(Dart_NewString("a string"), otherClass,
1407 EXPECT(Dart_IsValidResult(result)); 1395 &is_instance);
1408 EXPECT(!Dart_GetResultAsCBoolean(result)); 1396 EXPECT(Dart_IsValid(result));
1397 EXPECT(!is_instance);
1409 1398
1410 result = Dart_IsInstanceOf(Dart_NewInteger(42), otherClass); 1399 result = Dart_IsInstanceOf(Dart_NewInteger(42), otherClass, &is_instance);
1411 EXPECT(Dart_IsValidResult(result)); 1400 EXPECT(Dart_IsValid(result));
1412 EXPECT(!Dart_GetResultAsCBoolean(result)); 1401 EXPECT(!is_instance);
1413 1402
1414 result = Dart_IsInstanceOf(Dart_NewBoolean(true), otherClass); 1403 result = Dart_IsInstanceOf(Dart_NewBoolean(true), otherClass, &is_instance);
1415 EXPECT(Dart_IsValidResult(result)); 1404 EXPECT(Dart_IsValid(result));
1416 EXPECT(!Dart_GetResultAsCBoolean(result)); 1405 EXPECT(!is_instance);
1417 1406
1418 // Check that null is not an instance of InstanceOfTest class. 1407 // Check that null is not an instance of InstanceOfTest class.
1419 result = Dart_InvokeStatic(lib, 1408 Dart_Handle null = Dart_InvokeStatic(lib,
1420 Dart_NewString("OtherClass"), 1409 Dart_NewString("OtherClass"),
1421 Dart_NewString("returnNull"), 1410 Dart_NewString("returnNull"),
1422 0, 1411 0,
1423 NULL); 1412 NULL);
1424 EXPECT(Dart_IsValidResult(result)); 1413 EXPECT(Dart_IsValid(null));
1425 Dart_Handle null = Dart_GetResult(result);
1426 EXPECT(!Dart_ExceptionOccurred(null)); 1414 EXPECT(!Dart_ExceptionOccurred(null));
1427 1415
1428 result = Dart_IsInstanceOf(null, otherClass); 1416 result = Dart_IsInstanceOf(null, otherClass, &is_instance);
1429 EXPECT(Dart_IsValidResult(result)); 1417 EXPECT(Dart_IsValid(result));
1430 EXPECT(!Dart_GetResultAsCBoolean(result)); 1418 EXPECT(!is_instance);
1431 1419
1432 // Check that error is returned if null is passed as a class argument. 1420 // Check that error is returned if null is passed as a class argument.
1433 result = Dart_IsInstanceOf(null, null); 1421 result = Dart_IsInstanceOf(null, null, &is_instance);
1434 EXPECT(!Dart_IsValidResult(result)); 1422 EXPECT(!Dart_IsValid(result));
1435 1423
1436 Dart_ExitScope(); // Exit the Dart API scope. 1424 Dart_ExitScope(); // Exit the Dart API scope.
1437 } 1425 }
1438 Dart_ShutdownIsolate(); 1426 Dart_ShutdownIsolate();
1439 } 1427 }
1440 1428
1441 1429
1442 UNIT_TEST_CASE(NullReceiver) { 1430 UNIT_TEST_CASE(NullReceiver) {
1443 Dart_CreateIsolate(NULL, NULL); 1431 Dart_CreateIsolate(NULL, NULL);
1444 Dart_EnterScope(); // Enter a Dart API scope for the unit test. 1432 Dart_EnterScope(); // Enter a Dart API scope for the unit test.
1445 { 1433 {
1446 Zone zone; 1434 Zone zone;
1447 HandleScope hs; 1435 HandleScope hs;
1448 1436
1449 Dart_Handle function_name = Dart_NewString("toString"); 1437 Dart_Handle function_name = Dart_NewString("toString");
1450 const int number_of_arguments = 0; 1438 const int number_of_arguments = 0;
1451 Dart_Handle null_receiver = Api::NewLocalHandle(Object::Handle()); 1439 Dart_Handle null_receiver = Api::NewLocalHandle(Object::Handle());
1452 Dart_Result result = Dart_InvokeDynamic(null_receiver, 1440 Dart_Handle result = Dart_InvokeDynamic(null_receiver,
1453 function_name, 1441 function_name,
1454 number_of_arguments, 1442 number_of_arguments,
1455 NULL); 1443 NULL);
1456 EXPECT(Dart_IsValidResult(result)); 1444 EXPECT(Dart_IsValid(result));
1457 Dart_Handle retobj = Dart_GetResult(result); 1445 EXPECT(Dart_IsString(result));
1458 EXPECT(Dart_IsString(retobj));
1459 1446
1460 // Should throw a NullPointerException. Disabled due to bug 5415268. 1447 // Should throw a NullPointerException. Disabled due to bug 5415268.
1461 /* 1448 /*
1462 Dart_Handle function_name2 = Dart_NewString("NoNoNo"); 1449 Dart_Handle function_name2 = Dart_NewString("NoNoNo");
1463 result = Dart_InvokeDynamic(null_receiver, 1450 result = Dart_InvokeDynamic(null_receiver,
1464 function_name2, 1451 function_name2,
1465 number_of_arguments, 1452 number_of_arguments,
1466 dart_arguments); 1453 dart_arguments);
1467 EXPECT(Dart_IsValidResult(result)); 1454 EXPECT(Dart_IsValid(result));
1468 retobj = Dart_GetResult(result); 1455 EXPECT(Dart_ExceptionOccurred(result)); */
1469 EXPECT(Dart_ExceptionOccurred(retobj)); */
1470 } 1456 }
1471 Dart_ExitScope(); // Exit the Dart API scope. 1457 Dart_ExitScope(); // Exit the Dart API scope.
1472 Dart_ShutdownIsolate(); 1458 Dart_ShutdownIsolate();
1473 } 1459 }
1474 1460
1475 1461
1476 static Dart_Result library_handler(Dart_LibraryTag tag, 1462 static Dart_Handle library_handler(Dart_LibraryTag tag,
1477 Dart_Handle library, 1463 Dart_Handle library,
1478 Dart_Handle url) { 1464 Dart_Handle url) {
1479 if (tag == kCanonicalizeUrl) { 1465 if (tag == kCanonicalizeUrl) {
1480 return Dart_ResultAsObject(url); 1466 return url;
1481 } 1467 }
1482 return Dart_ResultAsObject(Dart_NewBoolean(true)); 1468 return Api::Success();
1483 } 1469 }
1484 1470
1485 1471
1486 UNIT_TEST_CASE(ImportLibrary1) { 1472 UNIT_TEST_CASE(ImportLibrary1) {
1487 const char* kScriptChars = 1473 const char* kScriptChars =
1488 "#import('library1.dart');" 1474 "#import('library1.dart');"
1489 "#import('library2.dart');" 1475 "#import('library2.dart');"
1490 "var foo; // library2 defines foo, so should be error." 1476 "var foo; // library2 defines foo, so should be error."
1491 "main() {}"; 1477 "main() {}";
1492 const char* kLibrary1Chars = 1478 const char* kLibrary1Chars =
1493 "#library('library1.dart');" 1479 "#library('library1.dart');"
1494 "#import('library2.dart');" 1480 "#import('library2.dart');"
1495 "var foo1;"; 1481 "var foo1;";
1496 const char* kLibrary2Chars = 1482 const char* kLibrary2Chars =
1497 "#library('library2.dart');" 1483 "#library('library2.dart');"
1498 "var foo;"; 1484 "var foo;";
1499 Dart_Result result; 1485 Dart_Handle result;
1500 1486
1501 Dart_CreateIsolate(NULL, NULL); 1487 Dart_CreateIsolate(NULL, NULL);
1502 { 1488 {
1503 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 1489 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
1504 1490
1505 // Create a test library and Load up a test script in it. 1491 // Create a test library and Load up a test script in it.
1506 Dart_Handle url = Dart_NewString(TestCase::url()); 1492 Dart_Handle url = Dart_NewString(TestCase::url());
1507 Dart_Handle source = Dart_NewString(kScriptChars); 1493 Dart_Handle source = Dart_NewString(kScriptChars);
1508 result = Dart_LoadScript(url, source, library_handler); 1494 result = Dart_LoadScript(url, source, library_handler);
1509 1495
1510 url = Dart_NewString("library1.dart"); 1496 url = Dart_NewString("library1.dart");
1511 source = Dart_NewString(kLibrary1Chars); 1497 source = Dart_NewString(kLibrary1Chars);
1512 Dart_LoadLibrary(url, source); 1498 Dart_LoadLibrary(url, source);
1513 1499
1514 url = Dart_NewString("library2.dart"); 1500 url = Dart_NewString("library2.dart");
1515 source = Dart_NewString(kLibrary2Chars); 1501 source = Dart_NewString(kLibrary2Chars);
1516 Dart_LoadLibrary(url, source); 1502 Dart_LoadLibrary(url, source);
1517 1503
1518 result = Dart_InvokeStatic(Dart_GetResult(result), 1504 result = Dart_InvokeStatic(result,
1519 Dart_NewString(""), 1505 Dart_NewString(""),
1520 Dart_NewString("main"), 1506 Dart_NewString("main"),
1521 0, 1507 0,
1522 NULL); 1508 NULL);
1523 assert(!Dart_IsValidResult(result)); 1509 assert(!Dart_IsValid(result));
1524 EXPECT_STREQ("Duplicate definition : 'foo' is defined in" 1510 EXPECT_STREQ("Duplicate definition : 'foo' is defined in"
1525 " 'library2.dart' and 'dart:test-lib'\n", 1511 " 'library2.dart' and 'dart:test-lib'\n",
1526 Dart_GetErrorCString(result)); 1512 Dart_GetError(result));
1527 1513
1528 Dart_ExitScope(); // Exit the Dart API scope. 1514 Dart_ExitScope(); // Exit the Dart API scope.
1529 } 1515 }
1530 Dart_ShutdownIsolate(); 1516 Dart_ShutdownIsolate();
1531 } 1517 }
1532 1518
1533 1519
1534 UNIT_TEST_CASE(ImportLibrary2) { 1520 UNIT_TEST_CASE(ImportLibrary2) {
1535 const char* kScriptChars = 1521 const char* kScriptChars =
1536 "#import('library1.dart');" 1522 "#import('library1.dart');"
1537 "var foo;" 1523 "var foo;"
1538 "main() {}"; 1524 "main() {}";
1539 const char* kLibrary1Chars = 1525 const char* kLibrary1Chars =
1540 "#library('library1.dart');" 1526 "#library('library1.dart');"
1541 "#import('library2.dart');" 1527 "#import('library2.dart');"
1542 "var foo1;"; 1528 "var foo1;";
1543 const char* kLibrary2Chars = 1529 const char* kLibrary2Chars =
1544 "#library('library2.dart');" 1530 "#library('library2.dart');"
1545 "#import('library1.dart');" 1531 "#import('library1.dart');"
1546 "var foo;"; 1532 "var foo;";
1547 Dart_Result result; 1533 Dart_Handle result;
1548 1534
1549 Dart_CreateIsolate(NULL, NULL); 1535 Dart_CreateIsolate(NULL, NULL);
1550 { 1536 {
1551 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 1537 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
1552 1538
1553 // Create a test library and Load up a test script in it. 1539 // Create a test library and Load up a test script in it.
1554 Dart_Handle url = Dart_NewString(TestCase::url()); 1540 Dart_Handle url = Dart_NewString(TestCase::url());
1555 Dart_Handle source = Dart_NewString(kScriptChars); 1541 Dart_Handle source = Dart_NewString(kScriptChars);
1556 result = Dart_LoadScript(url, source, library_handler); 1542 result = Dart_LoadScript(url, source, library_handler);
1557 1543
1558 url = Dart_NewString("library1.dart"); 1544 url = Dart_NewString("library1.dart");
1559 source = Dart_NewString(kLibrary1Chars); 1545 source = Dart_NewString(kLibrary1Chars);
1560 Dart_LoadLibrary(url, source); 1546 Dart_LoadLibrary(url, source);
1561 1547
1562 url = Dart_NewString("library2.dart"); 1548 url = Dart_NewString("library2.dart");
1563 source = Dart_NewString(kLibrary2Chars); 1549 source = Dart_NewString(kLibrary2Chars);
1564 Dart_LoadLibrary(url, source); 1550 Dart_LoadLibrary(url, source);
1565 1551
1566 result = Dart_InvokeStatic(Dart_GetResult(result), 1552 result = Dart_InvokeStatic(result,
1567 Dart_NewString(""), 1553 Dart_NewString(""),
1568 Dart_NewString("main"), 1554 Dart_NewString("main"),
1569 0, 1555 0,
1570 NULL); 1556 NULL);
1571 assert(Dart_IsValidResult(result)); 1557 assert(Dart_IsValid(result));
1572 1558
1573 Dart_ExitScope(); // Exit the Dart API scope. 1559 Dart_ExitScope(); // Exit the Dart API scope.
1574 } 1560 }
1575 Dart_ShutdownIsolate(); 1561 Dart_ShutdownIsolate();
1576 } 1562 }
1577 1563
1578 1564
1579 UNIT_TEST_CASE(ImportLibrary3) { 1565 UNIT_TEST_CASE(ImportLibrary3) {
1580 const char* kScriptChars = 1566 const char* kScriptChars =
1581 "#import('library2.dart');" 1567 "#import('library2.dart');"
1582 "#import('library1.dart');" 1568 "#import('library1.dart');"
1583 "var foo_top = 10; // foo has dup def. So should be an error." 1569 "var foo_top = 10; // foo has dup def. So should be an error."
1584 "main() {}"; 1570 "main() {}";
1585 const char* kLibrary1Chars = 1571 const char* kLibrary1Chars =
1586 "#library('library1.dart');" 1572 "#library('library1.dart');"
1587 "var foo;"; 1573 "var foo;";
1588 const char* kLibrary2Chars = 1574 const char* kLibrary2Chars =
1589 "#library('library2.dart');" 1575 "#library('library2.dart');"
1590 "var foo;"; 1576 "var foo;";
1591 Dart_Result result; 1577 Dart_Handle result;
1592 1578
1593 Dart_CreateIsolate(NULL, NULL); 1579 Dart_CreateIsolate(NULL, NULL);
1594 { 1580 {
1595 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 1581 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
1596 1582
1597 // Create a test library and Load up a test script in it. 1583 // Create a test library and Load up a test script in it.
1598 Dart_Handle url = Dart_NewString(TestCase::url()); 1584 Dart_Handle url = Dart_NewString(TestCase::url());
1599 Dart_Handle source = Dart_NewString(kScriptChars); 1585 Dart_Handle source = Dart_NewString(kScriptChars);
1600 result = Dart_LoadScript(url, source, library_handler); 1586 result = Dart_LoadScript(url, source, library_handler);
1601 1587
1602 url = Dart_NewString("library2.dart"); 1588 url = Dart_NewString("library2.dart");
1603 source = Dart_NewString(kLibrary2Chars); 1589 source = Dart_NewString(kLibrary2Chars);
1604 Dart_LoadLibrary(url, source); 1590 Dart_LoadLibrary(url, source);
1605 1591
1606 url = Dart_NewString("library1.dart"); 1592 url = Dart_NewString("library1.dart");
1607 source = Dart_NewString(kLibrary1Chars); 1593 source = Dart_NewString(kLibrary1Chars);
1608 Dart_LoadLibrary(url, source); 1594 Dart_LoadLibrary(url, source);
1609 1595
1610 result = Dart_InvokeStatic(Dart_GetResult(result), 1596 result = Dart_InvokeStatic(result,
1611 Dart_NewString(""), 1597 Dart_NewString(""),
1612 Dart_NewString("main"), 1598 Dart_NewString("main"),
1613 0, 1599 0,
1614 NULL); 1600 NULL);
1615 assert(!Dart_IsValidResult(result)); 1601 assert(!Dart_IsValid(result));
1616 EXPECT_STREQ("Duplicate definition : 'foo' is defined in" 1602 EXPECT_STREQ("Duplicate definition : 'foo' is defined in"
1617 " 'library1.dart' and 'library2.dart'\n", 1603 " 'library1.dart' and 'library2.dart'\n",
1618 Dart_GetErrorCString(result)); 1604 Dart_GetError(result));
1619 1605
1620 Dart_ExitScope(); // Exit the Dart API scope. 1606 Dart_ExitScope(); // Exit the Dart API scope.
1621 } 1607 }
1622 Dart_ShutdownIsolate(); 1608 Dart_ShutdownIsolate();
1623 } 1609 }
1624 1610
1625 1611
1626 UNIT_TEST_CASE(ImportLibrary4) { 1612 UNIT_TEST_CASE(ImportLibrary4) {
1627 const char* kScriptChars = 1613 const char* kScriptChars =
1628 "#import('libraryA.dart');" 1614 "#import('libraryA.dart');"
(...skipping 18 matching lines...) Expand all
1647 "#import('libraryF.dart');" 1633 "#import('libraryF.dart');"
1648 "var fooD;"; 1634 "var fooD;";
1649 const char* kLibraryEChars = 1635 const char* kLibraryEChars =
1650 "#library('libraryE.dart');" 1636 "#library('libraryE.dart');"
1651 "#import('libraryC.dart');" 1637 "#import('libraryC.dart');"
1652 "#import('libraryF.dart');" 1638 "#import('libraryF.dart');"
1653 "var fooE = 10; //fooC has duplicate def. so should be an error."; 1639 "var fooE = 10; //fooC has duplicate def. so should be an error.";
1654 const char* kLibraryFChars = 1640 const char* kLibraryFChars =
1655 "#library('libraryF.dart');" 1641 "#library('libraryF.dart');"
1656 "var fooC;"; 1642 "var fooC;";
1657 Dart_Result result; 1643 Dart_Handle result;
1658 1644
1659 Dart_CreateIsolate(NULL, NULL); 1645 Dart_CreateIsolate(NULL, NULL);
1660 { 1646 {
1661 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 1647 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
1662 1648
1663 // Create a test library and Load up a test script in it. 1649 // Create a test library and Load up a test script in it.
1664 Dart_Handle url = Dart_NewString(TestCase::url()); 1650 Dart_Handle url = Dart_NewString(TestCase::url());
1665 Dart_Handle source = Dart_NewString(kScriptChars); 1651 Dart_Handle source = Dart_NewString(kScriptChars);
1666 result = Dart_LoadScript(url, source, library_handler); 1652 result = Dart_LoadScript(url, source, library_handler);
1667 1653
(...skipping 14 matching lines...) Expand all
1682 Dart_LoadLibrary(url, source); 1668 Dart_LoadLibrary(url, source);
1683 1669
1684 url = Dart_NewString("libraryF.dart"); 1670 url = Dart_NewString("libraryF.dart");
1685 source = Dart_NewString(kLibraryFChars); 1671 source = Dart_NewString(kLibraryFChars);
1686 Dart_LoadLibrary(url, source); 1672 Dart_LoadLibrary(url, source);
1687 1673
1688 url = Dart_NewString("libraryE.dart"); 1674 url = Dart_NewString("libraryE.dart");
1689 source = Dart_NewString(kLibraryEChars); 1675 source = Dart_NewString(kLibraryEChars);
1690 Dart_LoadLibrary(url, source); 1676 Dart_LoadLibrary(url, source);
1691 1677
1692 result = Dart_InvokeStatic(Dart_GetResult(result), 1678 result = Dart_InvokeStatic(result,
1693 Dart_NewString(""), 1679 Dart_NewString(""),
1694 Dart_NewString("main"), 1680 Dart_NewString("main"),
1695 0, 1681 0,
1696 NULL); 1682 NULL);
1697 assert(!Dart_IsValidResult(result)); 1683 assert(!Dart_IsValid(result));
1698 EXPECT_STREQ("Duplicate definition : 'fooC' is defined in" 1684 EXPECT_STREQ("Duplicate definition : 'fooC' is defined in"
1699 " 'libraryF.dart' and 'libraryC.dart'\n", 1685 " 'libraryF.dart' and 'libraryC.dart'\n",
1700 Dart_GetErrorCString(result)); 1686 Dart_GetError(result));
1701 1687
1702 Dart_ExitScope(); // Exit the Dart API scope. 1688 Dart_ExitScope(); // Exit the Dart API scope.
1703 } 1689 }
1704 Dart_ShutdownIsolate(); 1690 Dart_ShutdownIsolate();
1705 } 1691 }
1706 1692
1707 1693
1708 UNIT_TEST_CASE(ImportLibrary5) { 1694 UNIT_TEST_CASE(ImportLibrary5) {
1709 const char* kScriptChars = 1695 const char* kScriptChars =
1710 "#import('lib.dart');" 1696 "#import('lib.dart');"
1711 "interface Y {" 1697 "interface Y {"
1712 " void set handler(void callback(List<int> x));" 1698 " void set handler(void callback(List<int> x));"
1713 "}" 1699 "}"
1714 "void main() {}"; 1700 "void main() {}";
1715 const char* kLibraryChars = 1701 const char* kLibraryChars =
1716 "#library('lib.dart');" 1702 "#library('lib.dart');"
1717 "interface X {" 1703 "interface X {"
1718 " void set handler(void callback(List<int> x));" 1704 " void set handler(void callback(List<int> x));"
1719 "}"; 1705 "}";
1720 Dart_Result result; 1706 Dart_Handle result;
1721 1707
1722 Dart_CreateIsolate(NULL, NULL); 1708 Dart_CreateIsolate(NULL, NULL);
1723 { 1709 {
1724 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. 1710 Dart_EnterScope(); // Start a Dart API scope for invoking API functions.
1725 1711
1726 // Create a test library and Load up a test script in it. 1712 // Create a test library and Load up a test script in it.
1727 Dart_Handle url = Dart_NewString(TestCase::url()); 1713 Dart_Handle url = Dart_NewString(TestCase::url());
1728 Dart_Handle source = Dart_NewString(kScriptChars); 1714 Dart_Handle source = Dart_NewString(kScriptChars);
1729 result = Dart_LoadScript(url, source, library_handler); 1715 result = Dart_LoadScript(url, source, library_handler);
1730 1716
1731 url = Dart_NewString("lib.dart"); 1717 url = Dart_NewString("lib.dart");
1732 source = Dart_NewString(kLibraryChars); 1718 source = Dart_NewString(kLibraryChars);
1733 Dart_LoadLibrary(url, source); 1719 Dart_LoadLibrary(url, source);
1734 1720
1735 result = Dart_InvokeStatic(Dart_GetResult(result), 1721 result = Dart_InvokeStatic(result,
1736 Dart_NewString(""), 1722 Dart_NewString(""),
1737 Dart_NewString("main"), 1723 Dart_NewString("main"),
1738 0, 1724 0,
1739 NULL); 1725 NULL);
1740 assert(Dart_IsValidResult(result)); 1726 assert(Dart_IsValid(result));
1741 1727
1742 Dart_ExitScope(); // Exit the Dart API scope. 1728 Dart_ExitScope(); // Exit the Dart API scope.
1743 } 1729 }
1744 Dart_ShutdownIsolate(); 1730 Dart_ShutdownIsolate();
1745 } 1731 }
1746 #endif // TARGET_ARCH_IA32. 1732 #endif // TARGET_ARCH_IA32.
1747 1733
1748 } // namespace dart 1734 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/dart_api_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698