OLD | NEW |
---|---|
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |