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

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

Issue 24210003: Never return a Dart_Handle on a dart::Class from the embedding API. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: remove Dart_IsClass from header. remove demo assert Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/debugger_api_impl.cc » ('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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "bin/builtin.h" 5 #include "bin/builtin.h"
6 #include "include/dart_api.h" 6 #include "include/dart_api.h"
7 #include "include/dart_mirrors_api.h" 7 #include "include/dart_mirrors_api.h"
8 #include "include/dart_native_api.h" 8 #include "include/dart_native_api.h"
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "platform/json.h" 10 #include "platform/json.h"
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 Dart_Handle str = NewString("test"); 182 Dart_Handle str = NewString("test");
183 EXPECT_VALID(str); 183 EXPECT_VALID(str);
184 EXPECT(!Dart_IsNull(str)); 184 EXPECT(!Dart_IsNull(str));
185 } 185 }
186 186
187 187
188 TEST_CASE(IdentityEquals) { 188 TEST_CASE(IdentityEquals) {
189 Dart_Handle five = NewString("5"); 189 Dart_Handle five = NewString("5");
190 Dart_Handle five_again = NewString("5"); 190 Dart_Handle five_again = NewString("5");
191 Dart_Handle seven = NewString("7"); 191 Dart_Handle seven = NewString("7");
192 Dart_Handle dart_core = NewString("dart:core");
193 Dart_Handle dart_mirrors = NewString("dart:mirrors");
192 194
193 // Same objects. 195 // Same objects.
194 EXPECT(Dart_IdentityEquals(five, five)); 196 EXPECT(Dart_IdentityEquals(five, five));
195 197
196 // Equal objects. 198 // Equal objects.
197 EXPECT(!Dart_IdentityEquals(five, five_again)); 199 EXPECT(!Dart_IdentityEquals(five, five_again));
198 200
199 // Different objects. 201 // Different objects.
200 EXPECT(!Dart_IdentityEquals(five, seven)); 202 EXPECT(!Dart_IdentityEquals(five, seven));
201 203
202 // Non-instance objects. 204 // Non-instance objects.
203 { 205 {
204 Isolate* isolate = Isolate::Current(); 206 Isolate* isolate = Isolate::Current();
205 DARTSCOPE(isolate); 207 DARTSCOPE(isolate);
206 Dart_Handle class1 = Api::NewHandle(isolate, Object::void_class()); 208 Dart_Handle lib1 = Dart_LookupLibrary(dart_core);
207 Dart_Handle class2 = Api::NewHandle(isolate, Object::class_class()); 209 Dart_Handle lib2 = Dart_LookupLibrary(dart_mirrors);
208 210
209 EXPECT(Dart_IdentityEquals(class1, class1)); 211 EXPECT(Dart_IdentityEquals(lib1, lib1));
210 212 EXPECT(Dart_IdentityEquals(lib2, lib2));
211 EXPECT(!Dart_IdentityEquals(class1, class2)); 213 EXPECT(!Dart_IdentityEquals(lib1, lib2));
212 } 214 }
213 } 215 }
214 216
215 217
216 TEST_CASE(ObjectEquals) { 218 TEST_CASE(ObjectEquals) {
217 bool equal = false; 219 bool equal = false;
218 Dart_Handle five = NewString("5"); 220 Dart_Handle five = NewString("5");
219 Dart_Handle five_again = NewString("5"); 221 Dart_Handle five_again = NewString("5");
220 Dart_Handle seven = NewString("7"); 222 Dart_Handle seven = NewString("7");
221 223
(...skipping 29 matching lines...) Expand all
251 const Type& null_type_obj = Api::UnwrapTypeHandle(isolate, type); 253 const Type& null_type_obj = Api::UnwrapTypeHandle(isolate, type);
252 EXPECT(null_type_obj.raw() == Type::NullType()); 254 EXPECT(null_type_obj.raw() == Type::NullType());
253 255
254 Dart_Handle instance = Dart_True(); 256 Dart_Handle instance = Dart_True();
255 type = Dart_InstanceGetType(instance); 257 type = Dart_InstanceGetType(instance);
256 EXPECT_VALID(type); 258 EXPECT_VALID(type);
257 EXPECT(Dart_IsType(type)); 259 EXPECT(Dart_IsType(type));
258 const Type& bool_type_obj = Api::UnwrapTypeHandle(isolate, type); 260 const Type& bool_type_obj = Api::UnwrapTypeHandle(isolate, type);
259 EXPECT(bool_type_obj.raw() == Type::BoolType()); 261 EXPECT(bool_type_obj.raw() == Type::BoolType());
260 262
261 // Errors propagate. 263 Dart_Handle cls_name = Dart_ClassName(type);
262 Dart_Handle error = Dart_NewApiError("MyError");
263 Dart_Handle error_type = Dart_InstanceGetType(error);
264 EXPECT_ERROR(error_type, "MyError");
265
266 // Get the handle from a non-instance handle
267 Dart_Handle obj = Api::NewHandle(isolate,
268 isolate->object_store()->type_class());
269 Dart_Handle type_type = Dart_InstanceGetType(obj);
270 EXPECT_ERROR(type_type,
271 "Dart_InstanceGetType expects argument 'instance' to be of "
272 "type Instance.");
273 }
274
275
276 TEST_CASE(InstanceGetClass) {
277 // Get the handle from a valid instance handle.
278 Dart_Handle instance = Dart_True();
279 Dart_Handle cls = Dart_InstanceGetClass(instance);
280 EXPECT_VALID(cls);
281 EXPECT(Dart_IsClass(cls));
282 Dart_Handle cls_name = Dart_ClassName(cls);
283 EXPECT_VALID(cls_name); 264 EXPECT_VALID(cls_name);
284 const char* cls_name_cstr = ""; 265 const char* cls_name_cstr = "";
285 EXPECT_VALID(Dart_StringToCString(cls_name, &cls_name_cstr)); 266 EXPECT_VALID(Dart_StringToCString(cls_name, &cls_name_cstr));
286 EXPECT_STREQ("bool", cls_name_cstr); 267 EXPECT_STREQ("bool", cls_name_cstr);
287 268
288 Dart_Handle qual_cls_name = Dart_QualifiedClassName(cls); 269 Dart_Handle qual_cls_name = Dart_QualifiedClassName(type);
289 EXPECT_VALID(qual_cls_name); 270 EXPECT_VALID(qual_cls_name);
290 const char* qual_cls_name_cstr = ""; 271 const char* qual_cls_name_cstr = "";
291 EXPECT_VALID(Dart_StringToCString(qual_cls_name, &qual_cls_name_cstr)); 272 EXPECT_VALID(Dart_StringToCString(qual_cls_name, &qual_cls_name_cstr));
292 EXPECT_STREQ("Library:'dart:core' Class: bool", qual_cls_name_cstr); 273 EXPECT_STREQ("Library:'dart:core' Class: bool", qual_cls_name_cstr);
293 274
294 // Errors propagate. 275 // Errors propagate.
295 Dart_Handle error = Dart_NewApiError("MyError"); 276 Dart_Handle error = Dart_NewApiError("MyError");
296 Dart_Handle error_cls = Dart_InstanceGetClass(error); 277 Dart_Handle error_type = Dart_InstanceGetType(error);
297 EXPECT_ERROR(error_cls, "MyError"); 278 EXPECT_ERROR(error_type, "MyError");
298 279
299 // Get the handle from a non-instance handle 280 // Get the handle from a non-instance handle.
300 ASSERT(Dart_IsClass(cls)); 281 Dart_Handle dart_core = NewString("dart:core");
301 Dart_Handle cls_cls = Dart_InstanceGetClass(cls); 282 Dart_Handle obj = Dart_LookupLibrary(dart_core);
302 EXPECT_ERROR(cls_cls, 283 Dart_Handle type_type = Dart_InstanceGetType(obj);
303 "Dart_InstanceGetClass expects argument 'instance' to be of " 284 EXPECT_ERROR(type_type,
285 "Dart_InstanceGetType expects argument 'instance' to be of "
304 "type Instance."); 286 "type Instance.");
305 } 287 }
306 288
307 289
308 TEST_CASE(BooleanValues) { 290 TEST_CASE(BooleanValues) {
309 Dart_Handle str = NewString("test"); 291 Dart_Handle str = NewString("test");
310 EXPECT(!Dart_IsBoolean(str)); 292 EXPECT(!Dart_IsBoolean(str));
311 293
312 bool value = false; 294 bool value = false;
313 Dart_Handle result = Dart_BooleanValue(str, &value); 295 Dart_Handle result = Dart_BooleanValue(str, &value);
(...skipping 7009 matching lines...) Expand 10 before | Expand all | Expand 10 after
7323 NewString("main"), 7305 NewString("main"),
7324 0, 7306 0,
7325 NULL); 7307 NULL);
7326 int64_t value = 0; 7308 int64_t value = 0;
7327 result = Dart_IntegerToInt64(result, &value); 7309 result = Dart_IntegerToInt64(result, &value);
7328 EXPECT_VALID(result); 7310 EXPECT_VALID(result);
7329 EXPECT_EQ(8, value); 7311 EXPECT_EQ(8, value);
7330 } 7312 }
7331 7313
7332 } // namespace dart 7314 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/debugger_api_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698