Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stdlib.h> | 5 #include <stdlib.h> |
| 6 | 6 |
| 7 #include "test/cctest/test-api.h" | 7 #include "test/cctest/test-api.h" |
| 8 | 8 |
| 9 #include "include/v8-util.h" | 9 #include "include/v8-util.h" |
| 10 #include "src/api.h" | 10 #include "src/api.h" |
| (...skipping 1798 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1809 "Object.freeze(obj.x); " | 1809 "Object.freeze(obj.x); " |
| 1810 "Object.isFrozen(obj.x);"; | 1810 "Object.isFrozen(obj.x);"; |
| 1811 | 1811 |
| 1812 CHECK(v8_compile(code) | 1812 CHECK(v8_compile(code) |
| 1813 ->Run(env.local()) | 1813 ->Run(env.local()) |
| 1814 .ToLocalChecked() | 1814 .ToLocalChecked() |
| 1815 ->BooleanValue(env.local()) | 1815 ->BooleanValue(env.local()) |
| 1816 .FromJust()); | 1816 .FromJust()); |
| 1817 } | 1817 } |
| 1818 | 1818 |
| 1819 // Check that the descriptor callback is not triggered for DefineProperty | |
|
Franzi
2017/05/10 09:17:52
Is this description correct?
I thought we're skip
| |
| 1820 // when bypass_interceptor = true | |
| 1821 THREADED_TEST(DefinerCallbackWithoutDescriptorInterceptor) { | |
| 1822 v8::Isolate* isolate = CcTest::isolate(); | |
| 1823 v8::HandleScope scope(isolate); | |
| 1824 v8::Local<v8::ObjectTemplate> templ = ObjectTemplate::New(isolate); | |
| 1825 | |
| 1826 templ->SetHandler(v8::NamedPropertyHandlerConfiguration( | |
| 1827 nullptr, nullptr, PropertyDescriptorCallback, nullptr, nullptr, | |
| 1828 NotInterceptingPropertyDefineCallback)); | |
|
Franzi
2017/05/10 09:17:52
This tests seems to make more sense if you set an
| |
| 1829 | |
| 1830 LocalContext context; | |
| 1831 v8::Local<v8::Name> p; | |
| 1832 | |
| 1833 v8::Local<v8::Object> obj = | |
| 1834 templ->NewInstance(context.local()).ToLocalChecked(); | |
| 1835 | |
| 1836 descriptor_was_called = 0; | |
| 1837 | |
| 1838 // bypass_interceptor = false (default) triggers the descriptor callback | |
| 1839 // Use a generic descriptor. | |
| 1840 v8::PropertyDescriptor desc_generic; | |
| 1841 | |
| 1842 p = v8_str("v1"); | |
| 1843 | |
| 1844 CHECK(obj->DefineProperty(context.local(), p, desc_generic).FromJust()); | |
| 1845 CHECK_EQ(1, descriptor_was_called); | |
| 1846 | |
| 1847 descriptor_was_called = 0; | |
| 1848 | |
| 1849 // bypass_interceptor = true does not trigger the descriptor callback | |
| 1850 p = v8_str("v2"); | |
|
Franzi
2017/05/10 09:17:52
Why are you using a different p here?
| |
| 1851 | |
| 1852 CHECK(obj->DefineProperty(context.local(), p, desc_generic, true).FromJust()); | |
| 1853 CHECK_EQ(0, descriptor_was_called); | |
| 1854 } | |
| 1855 | |
| 1819 // Check that the descriptor passed to the callback is enumerable. | 1856 // Check that the descriptor passed to the callback is enumerable. |
| 1820 namespace { | 1857 namespace { |
| 1821 void CheckEnumerablePropertyDefineCallback( | 1858 void CheckEnumerablePropertyDefineCallback( |
| 1822 Local<Name> name, const v8::PropertyDescriptor& desc, | 1859 Local<Name> name, const v8::PropertyDescriptor& desc, |
| 1823 const v8::PropertyCallbackInfo<v8::Value>& info) { | 1860 const v8::PropertyCallbackInfo<v8::Value>& info) { |
| 1824 CHECK(desc.has_value()); | 1861 CHECK(desc.has_value()); |
| 1825 CHECK_EQ(42, desc.value() | 1862 CHECK_EQ(42, desc.value() |
| 1826 ->Int32Value(info.GetIsolate()->GetCurrentContext()) | 1863 ->Int32Value(info.GetIsolate()->GetCurrentContext()) |
| 1827 .FromJust()); | 1864 .FromJust()); |
| 1828 CHECK(desc.has_enumerable()); | 1865 CHECK(desc.has_enumerable()); |
| (...skipping 3185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5014 ->Set(env.local(), v8_str("Fun"), | 5051 ->Set(env.local(), v8_str("Fun"), |
| 5015 fun_templ->GetFunction(env.local()).ToLocalChecked()) | 5052 fun_templ->GetFunction(env.local()).ToLocalChecked()) |
| 5016 .FromJust()); | 5053 .FromJust()); |
| 5017 | 5054 |
| 5018 CompileRun( | 5055 CompileRun( |
| 5019 "var f = new Fun();" | 5056 "var f = new Fun();" |
| 5020 "Number.prototype.__proto__ = f;" | 5057 "Number.prototype.__proto__ = f;" |
| 5021 "var a = 42;" | 5058 "var a = 42;" |
| 5022 "for (var i = 0; i<3; i++) { a.foo; }"); | 5059 "for (var i = 0; i<3; i++) { a.foo; }"); |
| 5023 } | 5060 } |
| OLD | NEW |