| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 "}" | 222 "}" |
| 223 "result")); | 223 "result")); |
| 224 CHECK_EQ(80, array->Length()); | 224 CHECK_EQ(80, array->Length()); |
| 225 for (int i = 0; i < 80; i++) { | 225 for (int i = 0; i < 80; i++) { |
| 226 v8::Handle<Value> entry = array->Get(v8::Integer::New(isolate, i)); | 226 v8::Handle<Value> entry = array->Get(v8::Integer::New(isolate, i)); |
| 227 CHECK_EQ(v8::Integer::New(isolate, i/2), entry); | 227 CHECK_EQ(v8::Integer::New(isolate, i/2), entry); |
| 228 } | 228 } |
| 229 } | 229 } |
| 230 | 230 |
| 231 | 231 |
| 232 static void AccessorProhibitsOverwritingGetter( | |
| 233 Local<String> name, | |
| 234 const v8::PropertyCallbackInfo<v8::Value>& info) { | |
| 235 ApiTestFuzzer::Fuzz(); | |
| 236 info.GetReturnValue().Set(true); | |
| 237 } | |
| 238 | |
| 239 | |
| 240 THREADED_TEST(AccessorProhibitsOverwriting) { | |
| 241 LocalContext context; | |
| 242 v8::Isolate* isolate = context->GetIsolate(); | |
| 243 v8::HandleScope scope(isolate); | |
| 244 Local<ObjectTemplate> templ = ObjectTemplate::New(isolate); | |
| 245 templ->SetAccessor(v8_str("x"), | |
| 246 AccessorProhibitsOverwritingGetter, | |
| 247 0, | |
| 248 v8::Handle<Value>(), | |
| 249 v8::PROHIBITS_OVERWRITING, | |
| 250 v8::ReadOnly); | |
| 251 Local<v8::Object> instance = templ->NewInstance(); | |
| 252 context->Global()->Set(v8_str("obj"), instance); | |
| 253 Local<Value> value = CompileRun( | |
| 254 "obj.__defineGetter__('x', function() { return false; });" | |
| 255 "obj.x"); | |
| 256 CHECK(value->BooleanValue()); | |
| 257 value = CompileRun( | |
| 258 "var setter_called = false;" | |
| 259 "obj.__defineSetter__('x', function() { setter_called = true; });" | |
| 260 "obj.x = 42;" | |
| 261 "setter_called"); | |
| 262 CHECK(!value->BooleanValue()); | |
| 263 value = CompileRun( | |
| 264 "obj2 = {};" | |
| 265 "obj2.__proto__ = obj;" | |
| 266 "obj2.__defineGetter__('x', function() { return false; });" | |
| 267 "obj2.x"); | |
| 268 CHECK(value->BooleanValue()); | |
| 269 value = CompileRun( | |
| 270 "var setter_called = false;" | |
| 271 "obj2 = {};" | |
| 272 "obj2.__proto__ = obj;" | |
| 273 "obj2.__defineSetter__('x', function() { setter_called = true; });" | |
| 274 "obj2.x = 42;" | |
| 275 "setter_called"); | |
| 276 CHECK(!value->BooleanValue()); | |
| 277 } | |
| 278 | |
| 279 | |
| 280 template <int C> | 232 template <int C> |
| 281 static void HandleAllocatingGetter( | 233 static void HandleAllocatingGetter( |
| 282 Local<String> name, | 234 Local<String> name, |
| 283 const v8::PropertyCallbackInfo<v8::Value>& info) { | 235 const v8::PropertyCallbackInfo<v8::Value>& info) { |
| 284 ApiTestFuzzer::Fuzz(); | 236 ApiTestFuzzer::Fuzz(); |
| 285 for (int i = 0; i < C; i++) | 237 for (int i = 0; i < C; i++) |
| 286 v8::String::NewFromUtf8(info.GetIsolate(), "foo"); | 238 v8::String::NewFromUtf8(info.GetIsolate(), "foo"); |
| 287 info.GetReturnValue().Set(v8::String::NewFromUtf8(info.GetIsolate(), "foo")); | 239 info.GetReturnValue().Set(v8::String::NewFromUtf8(info.GetIsolate(), "foo")); |
| 288 } | 240 } |
| 289 | 241 |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 618 "Object.defineProperty(this.__proto__, 'x', {" | 570 "Object.defineProperty(this.__proto__, 'x', {" |
| 619 " get : function() { return this; }," | 571 " get : function() { return this; }," |
| 620 " set : function() { set_value = this; }" | 572 " set : function() { set_value = this; }" |
| 621 "});" | 573 "});" |
| 622 "function getter() { return x; }" | 574 "function getter() { return x; }" |
| 623 "function setter() { x = 1; }" | 575 "function setter() { x = 1; }" |
| 624 "for (var i = 0; i < 4; i++) { getter(); setter(); }"); | 576 "for (var i = 0; i < 4; i++) { getter(); setter(); }"); |
| 625 CHECK(v8::Utils::OpenHandle(*CompileRun("getter()"))->IsJSGlobalProxy()); | 577 CHECK(v8::Utils::OpenHandle(*CompileRun("getter()"))->IsJSGlobalProxy()); |
| 626 CHECK(v8::Utils::OpenHandle(*CompileRun("set_value"))->IsJSGlobalProxy()); | 578 CHECK(v8::Utils::OpenHandle(*CompileRun("set_value"))->IsJSGlobalProxy()); |
| 627 } | 579 } |
| OLD | NEW |