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

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

Issue 10687004: Implement method and variable reflection in dart:mirrors. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 5 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/object.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 "include/dart_api.h" 5 #include "include/dart_api.h"
6 #include "platform/assert.h" 6 #include "platform/assert.h"
7 #include "platform/json.h"
7 #include "platform/utils.h" 8 #include "platform/utils.h"
8 #include "vm/class_finalizer.h" 9 #include "vm/class_finalizer.h"
9 #include "vm/dart_api_impl.h" 10 #include "vm/dart_api_impl.h"
10 #include "vm/dart_api_state.h" 11 #include "vm/dart_api_state.h"
11 #include "vm/thread.h" 12 #include "vm/thread.h"
12 #include "vm/unit_test.h" 13 #include "vm/unit_test.h"
13 #include "vm/verifier.h" 14 #include "vm/verifier.h"
14 15
15 namespace dart { 16 namespace dart {
16 17
(...skipping 3893 matching lines...) Expand 10 before | Expand all | Expand 10 after
3910 EXPECT(Dart_IsError(cls)); 3911 EXPECT(Dart_IsError(cls));
3911 EXPECT_STREQ("myerror", Dart_GetError(cls)); 3912 EXPECT_STREQ("myerror", Dart_GetError(cls));
3912 3913
3913 // Lookup a class using an error class name. The error propagates. 3914 // Lookup a class using an error class name. The error propagates.
3914 cls = Dart_GetClass(lib, Api::NewError("myerror")); 3915 cls = Dart_GetClass(lib, Api::NewError("myerror"));
3915 EXPECT(Dart_IsError(cls)); 3916 EXPECT(Dart_IsError(cls));
3916 EXPECT_STREQ("myerror", Dart_GetError(cls)); 3917 EXPECT_STREQ("myerror", Dart_GetError(cls));
3917 } 3918 }
3918 3919
3919 3920
3921 static void BuildFunctionDescription(TextBuffer* buffer, Dart_Handle func) {
3922 buffer->Clear();
3923 if (Dart_IsNull(func)) {
3924 WARN("Function not found");
3925 return;
3926 }
3927 Dart_Handle name = Dart_FunctionName(func);
3928 EXPECT_VALID(name);
3929 const char* name_cstr = "";
3930 EXPECT_VALID(Dart_StringToCString(name, &name_cstr));
3931 bool is_abstract = false;
3932 bool is_static = false;
3933 bool is_getter = false;
3934 bool is_setter = false;
3935 bool is_constructor = false;
3936 EXPECT_VALID(Dart_FunctionIsAbstract(func, &is_abstract));
3937 EXPECT_VALID(Dart_FunctionIsStatic(func, &is_static));
3938 EXPECT_VALID(Dart_FunctionIsGetter(func, &is_getter));
3939 EXPECT_VALID(Dart_FunctionIsSetter(func, &is_setter));
3940 EXPECT_VALID(Dart_FunctionIsConstructor(func, &is_constructor));
3941 buffer->Printf("%s", name_cstr);
3942 if (is_abstract) {
3943 buffer->Printf(" abstract");
3944 }
3945 if (is_static) {
3946 buffer->Printf(" static");
3947 }
3948 if (is_getter) {
3949 buffer->Printf(" getter");
3950 }
3951 if (is_setter) {
3952 buffer->Printf(" setter");
3953 }
3954 if (is_constructor) {
3955 buffer->Printf(" constructor");
3956 }
3957 }
3958
3959
3960 TEST_CASE(FunctionReflection) {
3961 const char* kScriptChars =
3962 "a() => 'a';\n"
3963 "_b() => '_b';\n"
3964 "get c() => 'bar';\n"
3965 "set d(x) {}\n"
3966 "get _e() => 'bar';\n"
3967 "set _f(x) {}\n"
3968 "class MyClass {\n"
3969 " MyClass() {}\n"
3970 " MyClass.named() {}\n"
3971 " a() => 'a';\n"
3972 " _b() => '_b';\n"
3973 " get c() => 'bar';\n"
3974 " set d(x) {}\n"
3975 " get _e() => 'bar';\n"
3976 " set _f(x) {}\n"
3977 " static g() => 'g';\n"
3978 " static _h() => '_h';\n"
3979 " static get i() => 'i';\n"
3980 " static set j(x) {}\n"
3981 " static get _k() => 'k';\n"
3982 " static set _l(x) {}\n"
3983 " abstract m();\n"
3984 " abstract _n();\n"
3985 " abstract get o();\n"
3986 " abstract set p(x);\n"
3987 " abstract get _q();\n"
3988 " abstract set _r(x);\n"
3989 " operator ==(x) {}\n"
3990 "}\n"
3991 "class _PrivateClass {\n"
3992 " _PrivateClass() {}\n"
3993 " _PrivateClass.named() {}\n"
3994 "}\n";
3995
3996 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
3997 EXPECT_VALID(lib);
3998 Dart_Handle cls = Dart_GetClass(lib, Dart_NewString("MyClass"));
3999 EXPECT_VALID(cls);
4000 Dart_Handle private_cls = Dart_GetClass(lib, Dart_NewString("_PrivateClass"));
4001 EXPECT_VALID(private_cls);
4002 TextBuffer buffer(128);
4003
4004 // Lookup a top-level function.
4005 Dart_Handle func = Dart_LookupFunction(lib, Dart_NewString("a"));
4006 EXPECT_VALID(func);
4007 EXPECT(Dart_IsFunction(func));
4008 BuildFunctionDescription(&buffer, func);
4009 EXPECT_STREQ("a static", buffer.buf());
4010
4011 // Lookup a private top-level function.
4012 func = Dart_LookupFunction(lib, Dart_NewString("_b"));
4013 EXPECT_VALID(func);
4014 EXPECT(Dart_IsFunction(func));
4015 BuildFunctionDescription(&buffer, func);
4016 EXPECT_STREQ("_b static", buffer.buf());
4017
4018 // Lookup a top-level getter.
4019 func = Dart_LookupFunction(lib, Dart_NewString("c"));
4020 EXPECT_VALID(func);
4021 EXPECT(Dart_IsFunction(func));
4022 BuildFunctionDescription(&buffer, func);
4023 EXPECT_STREQ("c static getter", buffer.buf());
4024
4025 // Lookup a top-level setter.
4026 func = Dart_LookupFunction(lib, Dart_NewString("d="));
4027 EXPECT_VALID(func);
4028 EXPECT(Dart_IsFunction(func));
4029 BuildFunctionDescription(&buffer, func);
4030 EXPECT_STREQ("d= static setter", buffer.buf());
4031
4032 // Lookup a private top-level getter.
4033 func = Dart_LookupFunction(lib, Dart_NewString("_e"));
4034 EXPECT_VALID(func);
4035 EXPECT(Dart_IsFunction(func));
4036 BuildFunctionDescription(&buffer, func);
4037 EXPECT_STREQ("_e static getter", buffer.buf());
4038
4039 // Lookup a private top-level setter.
4040 func = Dart_LookupFunction(lib, Dart_NewString("_f="));
4041 EXPECT_VALID(func);
4042 EXPECT(Dart_IsFunction(func));
4043 BuildFunctionDescription(&buffer, func);
4044 EXPECT_STREQ("_f= static setter", buffer.buf());
4045
4046 // Lookup an unnamed constructor
4047 func = Dart_LookupFunction(cls, Dart_NewString("MyClass"));
4048 EXPECT_VALID(func);
4049 EXPECT(Dart_IsFunction(func));
4050 BuildFunctionDescription(&buffer, func);
4051 EXPECT_STREQ("MyClass constructor", buffer.buf());
4052
4053 // Lookup a named constructor
4054 func = Dart_LookupFunction(cls, Dart_NewString("MyClass.named"));
4055 EXPECT_VALID(func);
4056 EXPECT(Dart_IsFunction(func));
4057 BuildFunctionDescription(&buffer, func);
4058 EXPECT_STREQ("MyClass.named constructor", buffer.buf());
4059
4060 // Lookup an private unnamed constructor
4061 func = Dart_LookupFunction(private_cls, Dart_NewString("_PrivateClass"));
4062 EXPECT_VALID(func);
4063 EXPECT(Dart_IsFunction(func));
4064 BuildFunctionDescription(&buffer, func);
4065 EXPECT_STREQ("_PrivateClass constructor", buffer.buf());
4066
4067 // Lookup a private named constructor
4068 func = Dart_LookupFunction(private_cls,
4069 Dart_NewString("_PrivateClass.named"));
4070 EXPECT_VALID(func);
4071 EXPECT(Dart_IsFunction(func));
4072 BuildFunctionDescription(&buffer, func);
4073 EXPECT_STREQ("_PrivateClass.named constructor", buffer.buf());
4074
4075 // Lookup a method.
4076 func = Dart_LookupFunction(cls, Dart_NewString("a"));
4077 EXPECT_VALID(func);
4078 EXPECT(Dart_IsFunction(func));
4079 BuildFunctionDescription(&buffer, func);
4080 EXPECT_STREQ("a", buffer.buf());
4081
4082 // Lookup a private method.
4083 func = Dart_LookupFunction(cls, Dart_NewString("_b"));
4084 EXPECT_VALID(func);
4085 EXPECT(Dart_IsFunction(func));
4086 BuildFunctionDescription(&buffer, func);
4087 EXPECT_STREQ("_b", buffer.buf());
4088
4089 // Lookup a instance getter.
4090 func = Dart_LookupFunction(cls, Dart_NewString("c"));
4091 EXPECT_VALID(func);
4092 EXPECT(Dart_IsFunction(func));
4093 BuildFunctionDescription(&buffer, func);
4094 EXPECT_STREQ("c getter", buffer.buf());
4095
4096 // Lookup a instance setter.
4097 func = Dart_LookupFunction(cls, Dart_NewString("d="));
4098 EXPECT_VALID(func);
4099 EXPECT(Dart_IsFunction(func));
4100 BuildFunctionDescription(&buffer, func);
4101 EXPECT_STREQ("d= setter", buffer.buf());
4102
4103 // Lookup a private instance getter.
4104 func = Dart_LookupFunction(cls, Dart_NewString("_e"));
4105 EXPECT_VALID(func);
4106 EXPECT(Dart_IsFunction(func));
4107 BuildFunctionDescription(&buffer, func);
4108 EXPECT_STREQ("_e getter", buffer.buf());
4109
4110 // Lookup a private instance setter.
4111 func = Dart_LookupFunction(cls, Dart_NewString("_f="));
4112 EXPECT_VALID(func);
4113 EXPECT(Dart_IsFunction(func));
4114 BuildFunctionDescription(&buffer, func);
4115 EXPECT_STREQ("_f= setter", buffer.buf());
4116
4117 // Lookup a static method.
4118 func = Dart_LookupFunction(cls, Dart_NewString("g"));
4119 EXPECT_VALID(func);
4120 EXPECT(Dart_IsFunction(func));
4121 BuildFunctionDescription(&buffer, func);
4122 EXPECT_STREQ("g static", buffer.buf());
4123
4124 // Lookup a private static method.
4125 func = Dart_LookupFunction(cls, Dart_NewString("_h"));
4126 EXPECT_VALID(func);
4127 EXPECT(Dart_IsFunction(func));
4128 BuildFunctionDescription(&buffer, func);
4129 EXPECT_STREQ("_h static", buffer.buf());
4130
4131 // Lookup a static getter.
4132 func = Dart_LookupFunction(cls, Dart_NewString("i"));
4133 EXPECT_VALID(func);
4134 EXPECT(Dart_IsFunction(func));
4135 BuildFunctionDescription(&buffer, func);
4136 EXPECT_STREQ("i static getter", buffer.buf());
4137
4138 // Lookup a static setter.
4139 func = Dart_LookupFunction(cls, Dart_NewString("j="));
4140 EXPECT_VALID(func);
4141 EXPECT(Dart_IsFunction(func));
4142 BuildFunctionDescription(&buffer, func);
4143 EXPECT_STREQ("j= static setter", buffer.buf());
4144
4145 // Lookup a private static getter.
4146 func = Dart_LookupFunction(cls, Dart_NewString("_k"));
4147 EXPECT_VALID(func);
4148 EXPECT(Dart_IsFunction(func));
4149 BuildFunctionDescription(&buffer, func);
4150 EXPECT_STREQ("_k static getter", buffer.buf());
4151
4152 // Lookup a private static setter.
4153 func = Dart_LookupFunction(cls, Dart_NewString("_l="));
4154 EXPECT_VALID(func);
4155 EXPECT(Dart_IsFunction(func));
4156 BuildFunctionDescription(&buffer, func);
4157 EXPECT_STREQ("_l= static setter", buffer.buf());
4158
4159 // Lookup an abstract method.
4160 func = Dart_LookupFunction(cls, Dart_NewString("m"));
4161 EXPECT_VALID(func);
4162 EXPECT(Dart_IsFunction(func));
4163 BuildFunctionDescription(&buffer, func);
4164 EXPECT_STREQ("m abstract", buffer.buf());
4165
4166 // Lookup a private abstract method.
4167 func = Dart_LookupFunction(cls, Dart_NewString("_n"));
4168 EXPECT_VALID(func);
4169 EXPECT(Dart_IsFunction(func));
4170 BuildFunctionDescription(&buffer, func);
4171 EXPECT_STREQ("_n abstract", buffer.buf());
4172
4173 // Lookup a abstract getter.
4174 func = Dart_LookupFunction(cls, Dart_NewString("o"));
4175 EXPECT_VALID(func);
4176 EXPECT(Dart_IsFunction(func));
4177 BuildFunctionDescription(&buffer, func);
4178 EXPECT_STREQ("o abstract getter", buffer.buf());
4179
4180 // Lookup a abstract setter.
4181 func = Dart_LookupFunction(cls, Dart_NewString("p="));
4182 EXPECT_VALID(func);
4183 EXPECT(Dart_IsFunction(func));
4184 BuildFunctionDescription(&buffer, func);
4185 EXPECT_STREQ("p= abstract setter", buffer.buf());
4186
4187 // Lookup a private abstract getter.
4188 func = Dart_LookupFunction(cls, Dart_NewString("_q"));
4189 EXPECT_VALID(func);
4190 EXPECT(Dart_IsFunction(func));
4191 BuildFunctionDescription(&buffer, func);
4192 EXPECT_STREQ("_q abstract getter", buffer.buf());
4193
4194 // Lookup a private abstract setter.
4195 func = Dart_LookupFunction(cls, Dart_NewString("_r="));
4196 EXPECT_VALID(func);
4197 EXPECT(Dart_IsFunction(func));
4198 BuildFunctionDescription(&buffer, func);
4199 EXPECT_STREQ("_r= abstract setter", buffer.buf());
4200
4201 // Lookup an operator
4202 func = Dart_LookupFunction(cls, Dart_NewString("=="));
4203 EXPECT_VALID(func);
4204 EXPECT(Dart_IsFunction(func));
4205 BuildFunctionDescription(&buffer, func);
4206 EXPECT_STREQ("==", buffer.buf());
4207
4208 // Lookup a function that does not exist from a library.
4209 func = Dart_LookupFunction(lib, Dart_NewString("DoesNotExist"));
4210 EXPECT(Dart_IsNull(func));
4211
4212 // Lookup a function that does not exist from a class.
4213 func = Dart_LookupFunction(cls, Dart_NewString("DoesNotExist"));
4214 EXPECT(Dart_IsNull(func));
4215
4216 // Lookup a class using an error class name. The error propagates.
4217 func = Dart_LookupFunction(cls, Api::NewError("myerror"));
4218 EXPECT_ERROR(func, "myerror");
4219
4220 // Lookup a class from an error library. The error propagates.
4221 func = Dart_LookupFunction(Api::NewError("myerror"), Dart_NewString("foo"));
4222 EXPECT_ERROR(func, "myerror");
4223 }
4224
4225
4226 static void BuildVariableDescription(TextBuffer* buffer, Dart_Handle var) {
4227 buffer->Clear();
4228 Dart_Handle name = Dart_VariableName(var);
4229 EXPECT_VALID(name);
4230 const char* name_cstr = "";
4231 EXPECT_VALID(Dart_StringToCString(name, &name_cstr));
4232 bool is_static = false;
4233 bool is_final = false;
4234 EXPECT_VALID(Dart_VariableIsStatic(var, &is_static));
4235 EXPECT_VALID(Dart_VariableIsFinal(var, &is_final));
4236 buffer->Printf("%s", name_cstr);
4237 if (is_static) {
4238 buffer->Printf(" static");
4239 }
4240 if (is_final) {
4241 buffer->Printf(" final");
4242 }
4243 }
4244
4245
4246 TEST_CASE(VariableReflection) {
4247 const char* kScriptChars =
4248 "var a = 'a';\n"
4249 "var _b = '_b';\n"
4250 "final c = 'c';\n"
4251 "final _d = '_d';\n"
4252 "class MyClass {\n"
4253 " var a = 'a';\n"
4254 " var _b = '_b';\n"
4255 " final c = 'c';\n"
4256 " final _d = '_d';\n"
4257 " static var e = 'e';\n"
4258 " static var _f = '_f';\n"
4259 " static final g = 'g';\n"
4260 " static final _h = '_h';\n"
4261 "}\n";
4262
4263 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
4264 EXPECT_VALID(lib);
4265 Dart_Handle cls = Dart_GetClass(lib, Dart_NewString("MyClass"));
4266 EXPECT_VALID(cls);
4267 TextBuffer buffer(128);
4268
4269 // Lookup a top-level variable.
4270 Dart_Handle var = Dart_LookupVariable(lib, Dart_NewString("a"));
4271 EXPECT_VALID(var);
4272 EXPECT(Dart_IsVariable(var));
4273 BuildVariableDescription(&buffer, var);
4274 EXPECT_STREQ("a static", buffer.buf());
4275
4276 // Lookup a private top-level variable.
4277 var = Dart_LookupVariable(lib, Dart_NewString("_b"));
4278 EXPECT_VALID(var);
4279 EXPECT(Dart_IsVariable(var));
4280 BuildVariableDescription(&buffer, var);
4281 EXPECT_STREQ("_b static", buffer.buf());
4282
4283 // Lookup a final top-level variable.
4284 var = Dart_LookupVariable(lib, Dart_NewString("c"));
4285 EXPECT_VALID(var);
4286 EXPECT(Dart_IsVariable(var));
4287 BuildVariableDescription(&buffer, var);
4288 EXPECT_STREQ("c static final", buffer.buf());
4289
4290 // Lookup a private final top-level variable.
4291 var = Dart_LookupVariable(lib, Dart_NewString("_d"));
4292 EXPECT_VALID(var);
4293 EXPECT(Dart_IsVariable(var));
4294 BuildVariableDescription(&buffer, var);
4295 EXPECT_STREQ("_d static final", buffer.buf());
4296
4297 // Lookup a instance variable.
4298 var = Dart_LookupVariable(cls, Dart_NewString("a"));
4299 EXPECT_VALID(var);
4300 EXPECT(Dart_IsVariable(var));
4301 BuildVariableDescription(&buffer, var);
4302 EXPECT_STREQ("a", buffer.buf());
4303
4304 // Lookup a private instance variable.
4305 var = Dart_LookupVariable(cls, Dart_NewString("_b"));
4306 EXPECT_VALID(var);
4307 EXPECT(Dart_IsVariable(var));
4308 BuildVariableDescription(&buffer, var);
4309 EXPECT_STREQ("_b", buffer.buf());
4310
4311 // Lookup a final instance variable.
4312 var = Dart_LookupVariable(cls, Dart_NewString("c"));
4313 EXPECT_VALID(var);
4314 EXPECT(Dart_IsVariable(var));
4315 BuildVariableDescription(&buffer, var);
4316 EXPECT_STREQ("c final", buffer.buf());
4317
4318 // Lookup a private final instance variable.
4319 var = Dart_LookupVariable(cls, Dart_NewString("_d"));
4320 EXPECT_VALID(var);
4321 EXPECT(Dart_IsVariable(var));
4322 BuildVariableDescription(&buffer, var);
4323 EXPECT_STREQ("_d final", buffer.buf());
4324
4325 // Lookup a static variable.
4326 var = Dart_LookupVariable(cls, Dart_NewString("e"));
4327 EXPECT_VALID(var);
4328 EXPECT(Dart_IsVariable(var));
4329 BuildVariableDescription(&buffer, var);
4330 EXPECT_STREQ("e static", buffer.buf());
4331
4332 // Lookup a private static variable.
4333 var = Dart_LookupVariable(cls, Dart_NewString("_f"));
4334 EXPECT_VALID(var);
4335 EXPECT(Dart_IsVariable(var));
4336 BuildVariableDescription(&buffer, var);
4337 EXPECT_STREQ("_f static", buffer.buf());
4338
4339 // Lookup a final static variable.
4340 var = Dart_LookupVariable(cls, Dart_NewString("g"));
4341 EXPECT_VALID(var);
4342 EXPECT(Dart_IsVariable(var));
4343 BuildVariableDescription(&buffer, var);
4344 EXPECT_STREQ("g static final", buffer.buf());
4345
4346 // Lookup a private final static variable.
4347 var = Dart_LookupVariable(cls, Dart_NewString("_h"));
4348 EXPECT_VALID(var);
4349 EXPECT(Dart_IsVariable(var));
4350 BuildVariableDescription(&buffer, var);
4351 EXPECT_STREQ("_h static final", buffer.buf());
4352
4353 // Lookup a variable that does not exist from a library.
4354 var = Dart_LookupVariable(lib, Dart_NewString("DoesNotExist"));
4355 EXPECT(Dart_IsNull(var));
4356
4357 // Lookup a variable that does not exist from a class.
4358 var = Dart_LookupVariable(cls, Dart_NewString("DoesNotExist"));
4359 EXPECT(Dart_IsNull(var));
4360
4361 // Lookup a class from an error library. The error propagates.
4362 var = Dart_LookupVariable(Api::NewError("myerror"), Dart_NewString("foo"));
4363 EXPECT_ERROR(var, "myerror");
4364
4365 // Lookup a class using an error class name. The error propagates.
4366 var = Dart_LookupVariable(lib, Api::NewError("myerror"));
4367 EXPECT_ERROR(var, "myerror");
4368 }
4369
4370
3920 TEST_CASE(InstanceOf) { 4371 TEST_CASE(InstanceOf) {
3921 const char* kScriptChars = 4372 const char* kScriptChars =
3922 "class OtherClass {\n" 4373 "class OtherClass {\n"
3923 " static returnNull() { return null; }\n" 4374 " static returnNull() { return null; }\n"
3924 "}\n" 4375 "}\n"
3925 "class InstanceOfTest {\n" 4376 "class InstanceOfTest {\n"
3926 " InstanceOfTest() {}\n" 4377 " InstanceOfTest() {}\n"
3927 " static InstanceOfTest testMain() {\n" 4378 " static InstanceOfTest testMain() {\n"
3928 " return new InstanceOfTest();\n" 4379 " return new InstanceOfTest();\n"
3929 " }\n" 4380 " }\n"
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
4318 EXPECT_STREQ("library1_url", cstr); 4769 EXPECT_STREQ("library1_url", cstr);
4319 } 4770 }
4320 4771
4321 4772
4322 TEST_CASE(LibraryGetClassNames) { 4773 TEST_CASE(LibraryGetClassNames) {
4323 const char* kLibraryChars = 4774 const char* kLibraryChars =
4324 "#library('library_name');\n" 4775 "#library('library_name');\n"
4325 "\n" 4776 "\n"
4326 "class A {}\n" 4777 "class A {}\n"
4327 "class B {}\n" 4778 "class B {}\n"
4328 "class D {}\n"
4329 "interface C {}\n" 4779 "interface C {}\n"
4330 "interface E {}\n" 4780 "class _A {}\n"
4781 "class _B {}\n"
4782 "interface _C {}\n"
4331 "\n" 4783 "\n"
4332 "_compare(String a, String b) => a.compareTo(b);\n" 4784 "_compare(String a, String b) => a.compareTo(b);\n"
4333 "sort(list) => list.sort(_compare);\n"; 4785 "sort(list) => list.sort(_compare);\n";
4334 4786
4335 Dart_Handle url = Dart_NewString("library_url"); 4787 Dart_Handle url = Dart_NewString("library_url");
4336 Dart_Handle source = Dart_NewString(kLibraryChars); 4788 Dart_Handle source = Dart_NewString(kLibraryChars);
4337 Dart_Handle lib = Dart_LoadLibrary(url, source); 4789 Dart_Handle lib = Dart_LoadLibrary(url, source);
4338 EXPECT_VALID(lib); 4790 EXPECT_VALID(lib);
4339 4791
4340 Dart_Handle list = Dart_LibraryGetClassNames(lib); 4792 Dart_Handle list = Dart_LibraryGetClassNames(lib);
4341 EXPECT_VALID(list); 4793 EXPECT_VALID(list);
4342 EXPECT(Dart_IsList(list)); 4794 EXPECT(Dart_IsList(list));
4343 4795
4344 // Sort the list. 4796 // Sort the list.
4345 const int kNumArgs = 1; 4797 const int kNumArgs = 1;
4346 Dart_Handle args[1]; 4798 Dart_Handle args[1];
4347 args[0] = list; 4799 args[0] = list;
4348 EXPECT_VALID(Dart_Invoke(lib, Dart_NewString("sort"), kNumArgs, args)); 4800 EXPECT_VALID(Dart_Invoke(lib, Dart_NewString("sort"), kNumArgs, args));
4349 4801
4350 Dart_Handle list_string = Dart_ToString(list); 4802 Dart_Handle list_string = Dart_ToString(list);
4351 EXPECT_VALID(list_string); 4803 EXPECT_VALID(list_string);
4352 const char* list_cstr = ""; 4804 const char* list_cstr = "";
4353 EXPECT_VALID(Dart_StringToCString(list_string, &list_cstr)); 4805 EXPECT_VALID(Dart_StringToCString(list_string, &list_cstr));
4354 EXPECT_STREQ("[A, B, C, D, E]", list_cstr); 4806 EXPECT_STREQ("[A, B, C, _A, _B, _C]", list_cstr);
4807 }
4808
4809
4810 TEST_CASE(GetFunctionNames) {
4811 const char* kLibraryChars =
4812 "#library('library_name');\n"
4813 "\n"
4814 "void A() {}\n"
4815 "get B() => 11;\n"
4816 "set C(x) { }\n"
4817 "var D;\n"
4818 "void _A() {}\n"
4819 "get _B() => 11;\n"
4820 "set _C(x) { }\n"
4821 "var _D;\n"
4822 "\n"
4823 "class MyClass {\n"
4824 " void A2() {}\n"
4825 " get B2() => 11;\n"
4826 " set C2(x) { }\n"
4827 " var D2;\n"
4828 " void _A2() {}\n"
4829 " get _B2() => 11;\n"
4830 " set _C2(x) { }\n"
4831 " var _D2;\n"
4832 "}\n"
4833 "\n"
4834 "_compare(String a, String b) => a.compareTo(b);\n"
4835 "sort(list) => list.sort(_compare);\n";
4836
4837 // Get the functions from a library.
4838 Dart_Handle url = Dart_NewString("library_url");
4839 Dart_Handle source = Dart_NewString(kLibraryChars);
4840 Dart_Handle lib = Dart_LoadLibrary(url, source);
4841 EXPECT_VALID(lib);
4842
4843 Dart_Handle list = Dart_GetFunctionNames(lib);
4844 EXPECT_VALID(list);
4845 EXPECT(Dart_IsList(list));
4846
4847 // Sort the list.
4848 const int kNumArgs = 1;
4849 Dart_Handle args[1];
4850 args[0] = list;
4851 EXPECT_VALID(Dart_Invoke(lib, Dart_NewString("sort"), kNumArgs, args));
4852
4853 Dart_Handle list_string = Dart_ToString(list);
4854 EXPECT_VALID(list_string);
4855 const char* list_cstr = "";
4856 EXPECT_VALID(Dart_StringToCString(list_string, &list_cstr));
4857 EXPECT_STREQ("[A, B, C=, _A, _B, _C=, _compare, sort]", list_cstr);
4858
4859 // Get the functions from a class.
4860 Dart_Handle cls = Dart_GetClass(lib, Dart_NewString("MyClass"));
4861 EXPECT_VALID(cls);
4862
4863 list = Dart_GetFunctionNames(cls);
4864 EXPECT_VALID(list);
4865 EXPECT(Dart_IsList(list));
4866
4867 // Sort the list.
4868 args[0] = list;
4869 EXPECT_VALID(Dart_Invoke(lib, Dart_NewString("sort"), kNumArgs, args));
4870
4871 // Check list contents.
4872 list_string = Dart_ToString(list);
4873 EXPECT_VALID(list_string);
4874 list_cstr = "";
4875 EXPECT_VALID(Dart_StringToCString(list_string, &list_cstr));
4876 EXPECT_STREQ("[A2, B2, C2=, MyClass, _A2, _B2, _C2=]", list_cstr);
4877 }
4878
4879
4880 TEST_CASE(GetVariableNames) {
4881 const char* kLibraryChars =
4882 "#library('library_name');\n"
4883 "\n"
4884 "var A;\n"
4885 "get B() => 12;\n"
4886 "set C(x) { }\n"
4887 "D(x) => (x + 1);\n"
4888 "var _A;\n"
4889 "get _B() => 12;\n"
4890 "set _C(x) { }\n"
4891 "_D(x) => (x + 1);\n"
4892 "\n"
4893 "class MyClass {\n"
4894 " var A2;\n"
4895 " var _A2;\n"
4896 "}\n"
4897 "\n"
4898 "_compare(String a, String b) => a.compareTo(b);\n"
4899 "sort(list) => list.sort(_compare);\n";
4900
4901 // Get the variables from a library.
4902 Dart_Handle url = Dart_NewString("library_url");
4903 Dart_Handle source = Dart_NewString(kLibraryChars);
4904 Dart_Handle lib = Dart_LoadLibrary(url, source);
4905 EXPECT_VALID(lib);
4906
4907 Dart_Handle list = Dart_GetVariableNames(lib);
4908 EXPECT_VALID(list);
4909 EXPECT(Dart_IsList(list));
4910
4911 // Sort the list.
4912 const int kNumArgs = 1;
4913 Dart_Handle args[1];
4914 args[0] = list;
4915 EXPECT_VALID(Dart_Invoke(lib, Dart_NewString("sort"), kNumArgs, args));
4916
4917 // Check list contents.
4918 Dart_Handle list_string = Dart_ToString(list);
4919 EXPECT_VALID(list_string);
4920 const char* list_cstr = "";
4921 EXPECT_VALID(Dart_StringToCString(list_string, &list_cstr));
4922 EXPECT_STREQ("[A, _A]", list_cstr);
4923
4924 // Get the variables from a class.
4925 Dart_Handle cls = Dart_GetClass(lib, Dart_NewString("MyClass"));
4926 EXPECT_VALID(cls);
4927
4928 list = Dart_GetVariableNames(cls);
4929 EXPECT_VALID(list);
4930 EXPECT(Dart_IsList(list));
4931
4932 // Sort the list.
4933 args[0] = list;
4934 EXPECT_VALID(Dart_Invoke(lib, Dart_NewString("sort"), kNumArgs, args));
4935
4936 // Check list contents.
4937 list_string = Dart_ToString(list);
4938 EXPECT_VALID(list_string);
4939 list_cstr = "";
4940 EXPECT_VALID(Dart_StringToCString(list_string, &list_cstr));
4941 EXPECT_STREQ("[A2, _A2]", list_cstr);
4355 } 4942 }
4356 4943
4357 4944
4358 TEST_CASE(LibraryImportLibrary) { 4945 TEST_CASE(LibraryImportLibrary) {
4359 const char* kLibrary1Chars = 4946 const char* kLibrary1Chars =
4360 "#library('library1_name');"; 4947 "#library('library1_name');";
4361 const char* kLibrary2Chars = 4948 const char* kLibrary2Chars =
4362 "#library('library2_name');"; 4949 "#library('library2_name');";
4363 Dart_Handle error = Dart_Error("incoming error"); 4950 Dart_Handle error = Dart_Error("incoming error");
4364 Dart_Handle result; 4951 Dart_Handle result;
(...skipping 1198 matching lines...) Expand 10 before | Expand all | Expand 10 after
5563 EXPECT_VALID(result); 6150 EXPECT_VALID(result);
5564 EXPECT(Dart_IsInteger(result)); 6151 EXPECT(Dart_IsInteger(result));
5565 int64_t value = 0; 6152 int64_t value = 0;
5566 EXPECT_VALID(Dart_IntegerToInt64(result, &value)); 6153 EXPECT_VALID(Dart_IntegerToInt64(result, &value));
5567 EXPECT_EQ(0, value); 6154 EXPECT_EQ(0, value);
5568 } 6155 }
5569 6156
5570 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 6157 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
5571 6158
5572 } // namespace dart 6159 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698