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

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

Powered by Google App Engine
This is Rietveld 408576698