| 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 12774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12785 // Check that 'h' cannot be shadowed. | 12785 // Check that 'h' cannot be shadowed. |
| 12786 value = v8_compile("o.h = 3; o.h")->Run(context.local()).ToLocalChecked(); | 12786 value = v8_compile("o.h = 3; o.h")->Run(context.local()).ToLocalChecked(); |
| 12787 CHECK_EQ(1, value->Int32Value(context.local()).FromJust()); | 12787 CHECK_EQ(1, value->Int32Value(context.local()).FromJust()); |
| 12788 | 12788 |
| 12789 // Check that 'i' cannot be shadowed or changed. | 12789 // Check that 'i' cannot be shadowed or changed. |
| 12790 value = v8_compile("o.i = 3; o.i")->Run(context.local()).ToLocalChecked(); | 12790 value = v8_compile("o.i = 3; o.i")->Run(context.local()).ToLocalChecked(); |
| 12791 CHECK_EQ(42, value->Int32Value(context.local()).FromJust()); | 12791 CHECK_EQ(42, value->Int32Value(context.local()).FromJust()); |
| 12792 } | 12792 } |
| 12793 | 12793 |
| 12794 | 12794 |
| 12795 static void ShouldThrowOnErrorGetter( | |
| 12796 Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { | |
| 12797 ApiTestFuzzer::Fuzz(); | |
| 12798 v8::Isolate* isolate = info.GetIsolate(); | |
| 12799 Local<Boolean> should_throw_on_error = | |
| 12800 Boolean::New(isolate, info.ShouldThrowOnError()); | |
| 12801 info.GetReturnValue().Set(should_throw_on_error); | |
| 12802 } | |
| 12803 | |
| 12804 | |
| 12805 template <typename T> | |
| 12806 static void ShouldThrowOnErrorSetter(Local<Name> name, Local<v8::Value> value, | |
| 12807 const v8::PropertyCallbackInfo<T>& info) { | |
| 12808 ApiTestFuzzer::Fuzz(); | |
| 12809 v8::Isolate* isolate = info.GetIsolate(); | |
| 12810 auto context = isolate->GetCurrentContext(); | |
| 12811 Local<Boolean> should_throw_on_error_value = | |
| 12812 Boolean::New(isolate, info.ShouldThrowOnError()); | |
| 12813 CHECK(context->Global() | |
| 12814 ->Set(isolate->GetCurrentContext(), v8_str("should_throw_setter"), | |
| 12815 should_throw_on_error_value) | |
| 12816 .FromJust()); | |
| 12817 } | |
| 12818 | |
| 12819 | |
| 12820 THREADED_TEST(AccessorShouldThrowOnError) { | |
| 12821 i::FLAG_strong_mode = true; | |
| 12822 LocalContext context; | |
| 12823 v8::Isolate* isolate = context->GetIsolate(); | |
| 12824 v8::HandleScope scope(isolate); | |
| 12825 Local<Object> global = context->Global(); | |
| 12826 | |
| 12827 Local<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(isolate); | |
| 12828 Local<ObjectTemplate> instance_templ = templ->InstanceTemplate(); | |
| 12829 instance_templ->SetAccessor(v8_str("f"), ShouldThrowOnErrorGetter, | |
| 12830 ShouldThrowOnErrorSetter<void>); | |
| 12831 | |
| 12832 Local<v8::Object> instance = templ->GetFunction(context.local()) | |
| 12833 .ToLocalChecked() | |
| 12834 ->NewInstance(context.local()) | |
| 12835 .ToLocalChecked(); | |
| 12836 | |
| 12837 CHECK(global->Set(context.local(), v8_str("o"), instance).FromJust()); | |
| 12838 | |
| 12839 // SLOPPY mode | |
| 12840 Local<Value> value = v8_compile("o.f")->Run(context.local()).ToLocalChecked(); | |
| 12841 CHECK(value->IsFalse()); | |
| 12842 v8_compile("o.f = 153")->Run(context.local()).ToLocalChecked(); | |
| 12843 value = global->Get(context.local(), v8_str("should_throw_setter")) | |
| 12844 .ToLocalChecked(); | |
| 12845 CHECK(value->IsFalse()); | |
| 12846 | |
| 12847 // STRICT mode | |
| 12848 value = v8_compile("'use strict';o.f")->Run(context.local()).ToLocalChecked(); | |
| 12849 CHECK(value->IsFalse()); | |
| 12850 v8_compile("'use strict'; o.f = 153")->Run(context.local()).ToLocalChecked(); | |
| 12851 value = global->Get(context.local(), v8_str("should_throw_setter")) | |
| 12852 .ToLocalChecked(); | |
| 12853 CHECK(value->IsTrue()); | |
| 12854 | |
| 12855 // STRONG mode | |
| 12856 value = v8_compile("'use strong';o.f")->Run(context.local()).ToLocalChecked(); | |
| 12857 CHECK(value->IsFalse()); | |
| 12858 v8_compile("'use strong'; o.f = 153")->Run(context.local()).ToLocalChecked(); | |
| 12859 value = global->Get(context.local(), v8_str("should_throw_setter")) | |
| 12860 .ToLocalChecked(); | |
| 12861 CHECK(value->IsTrue()); | |
| 12862 } | |
| 12863 | |
| 12864 | |
| 12865 static void ShouldThrowOnErrorQuery( | |
| 12866 Local<Name> name, const v8::PropertyCallbackInfo<v8::Integer>& info) { | |
| 12867 ApiTestFuzzer::Fuzz(); | |
| 12868 v8::Isolate* isolate = info.GetIsolate(); | |
| 12869 info.GetReturnValue().Set(v8::None); | |
| 12870 | |
| 12871 auto context = isolate->GetCurrentContext(); | |
| 12872 Local<Boolean> should_throw_on_error_value = | |
| 12873 Boolean::New(isolate, info.ShouldThrowOnError()); | |
| 12874 CHECK(context->Global() | |
| 12875 ->Set(isolate->GetCurrentContext(), v8_str("should_throw_query"), | |
| 12876 should_throw_on_error_value) | |
| 12877 .FromJust()); | |
| 12878 } | |
| 12879 | |
| 12880 | |
| 12881 static void ShouldThrowOnErrorDeleter( | |
| 12882 Local<Name> name, const v8::PropertyCallbackInfo<v8::Boolean>& info) { | |
| 12883 ApiTestFuzzer::Fuzz(); | |
| 12884 v8::Isolate* isolate = info.GetIsolate(); | |
| 12885 info.GetReturnValue().Set(v8::True(isolate)); | |
| 12886 | |
| 12887 auto context = isolate->GetCurrentContext(); | |
| 12888 Local<Boolean> should_throw_on_error_value = | |
| 12889 Boolean::New(isolate, info.ShouldThrowOnError()); | |
| 12890 CHECK(context->Global() | |
| 12891 ->Set(isolate->GetCurrentContext(), v8_str("should_throw_deleter"), | |
| 12892 should_throw_on_error_value) | |
| 12893 .FromJust()); | |
| 12894 } | |
| 12895 | |
| 12896 | |
| 12897 static void ShouldThrowOnErrorPropertyEnumerator( | |
| 12898 const v8::PropertyCallbackInfo<v8::Array>& info) { | |
| 12899 ApiTestFuzzer::Fuzz(); | |
| 12900 v8::Isolate* isolate = info.GetIsolate(); | |
| 12901 Local<v8::Array> names = v8::Array::New(isolate, 1); | |
| 12902 CHECK(names->Set(isolate->GetCurrentContext(), names, v8_num(1)).FromJust()); | |
| 12903 info.GetReturnValue().Set(names); | |
| 12904 | |
| 12905 auto context = isolate->GetCurrentContext(); | |
| 12906 Local<Boolean> should_throw_on_error_value = | |
| 12907 Boolean::New(isolate, info.ShouldThrowOnError()); | |
| 12908 CHECK(context->Global() | |
| 12909 ->Set(isolate->GetCurrentContext(), | |
| 12910 v8_str("should_throw_enumerator"), | |
| 12911 should_throw_on_error_value) | |
| 12912 .FromJust()); | |
| 12913 } | |
| 12914 | |
| 12915 | |
| 12916 THREADED_TEST(InterceptorShouldThrowOnError) { | |
| 12917 i::FLAG_strong_mode = true; | |
| 12918 LocalContext context; | |
| 12919 v8::Isolate* isolate = context->GetIsolate(); | |
| 12920 v8::HandleScope scope(isolate); | |
| 12921 Local<Object> global = context->Global(); | |
| 12922 | |
| 12923 auto interceptor_templ = v8::ObjectTemplate::New(isolate); | |
| 12924 v8::NamedPropertyHandlerConfiguration handler( | |
| 12925 ShouldThrowOnErrorGetter, ShouldThrowOnErrorSetter<Value>, | |
| 12926 ShouldThrowOnErrorQuery, ShouldThrowOnErrorDeleter, | |
| 12927 ShouldThrowOnErrorPropertyEnumerator); | |
| 12928 interceptor_templ->SetHandler(handler); | |
| 12929 | |
| 12930 Local<v8::Object> instance = | |
| 12931 interceptor_templ->NewInstance(context.local()).ToLocalChecked(); | |
| 12932 | |
| 12933 CHECK(global->Set(context.local(), v8_str("o"), instance).FromJust()); | |
| 12934 | |
| 12935 // SLOPPY mode | |
| 12936 Local<Value> value = v8_compile("o.f")->Run(context.local()).ToLocalChecked(); | |
| 12937 CHECK(value->IsFalse()); | |
| 12938 v8_compile("o.f = 153")->Run(context.local()).ToLocalChecked(); | |
| 12939 value = global->Get(context.local(), v8_str("should_throw_setter")) | |
| 12940 .ToLocalChecked(); | |
| 12941 CHECK(value->IsFalse()); | |
| 12942 | |
| 12943 v8_compile("delete o.f")->Run(context.local()).ToLocalChecked(); | |
| 12944 value = global->Get(context.local(), v8_str("should_throw_deleter")) | |
| 12945 .ToLocalChecked(); | |
| 12946 CHECK(value->IsFalse()); | |
| 12947 | |
| 12948 v8_compile("Object.getOwnPropertyNames(o)") | |
| 12949 ->Run(context.local()) | |
| 12950 .ToLocalChecked(); | |
| 12951 value = global->Get(context.local(), v8_str("should_throw_enumerator")) | |
| 12952 .ToLocalChecked(); | |
| 12953 CHECK(value->IsFalse()); | |
| 12954 | |
| 12955 // STRICT mode | |
| 12956 value = v8_compile("'use strict';o.f")->Run(context.local()).ToLocalChecked(); | |
| 12957 CHECK(value->IsFalse()); | |
| 12958 v8_compile("'use strict'; o.f = 153")->Run(context.local()).ToLocalChecked(); | |
| 12959 value = global->Get(context.local(), v8_str("should_throw_setter")) | |
| 12960 .ToLocalChecked(); | |
| 12961 CHECK(value->IsTrue()); | |
| 12962 | |
| 12963 v8_compile("'use strict'; delete o.f")->Run(context.local()).ToLocalChecked(); | |
| 12964 value = global->Get(context.local(), v8_str("should_throw_deleter")) | |
| 12965 .ToLocalChecked(); | |
| 12966 CHECK(value->IsTrue()); | |
| 12967 | |
| 12968 v8_compile("'use strict'; Object.getOwnPropertyNames(o)") | |
| 12969 ->Run(context.local()) | |
| 12970 .ToLocalChecked(); | |
| 12971 value = global->Get(context.local(), v8_str("should_throw_enumerator")) | |
| 12972 .ToLocalChecked(); | |
| 12973 CHECK(value->IsFalse()); | |
| 12974 | |
| 12975 // STRONG mode | |
| 12976 value = v8_compile("'use strong';o.f")->Run(context.local()).ToLocalChecked(); | |
| 12977 CHECK(value->IsFalse()); | |
| 12978 v8_compile("'use strong'; o.f = 153")->Run(context.local()).ToLocalChecked(); | |
| 12979 value = global->Get(context.local(), v8_str("should_throw_setter")) | |
| 12980 .ToLocalChecked(); | |
| 12981 CHECK(value->IsTrue()); | |
| 12982 | |
| 12983 v8_compile("'use strong'; Object.getOwnPropertyNames(o)") | |
| 12984 ->Run(context.local()) | |
| 12985 .ToLocalChecked(); | |
| 12986 value = global->Get(context.local(), v8_str("should_throw_enumerator")) | |
| 12987 .ToLocalChecked(); | |
| 12988 CHECK(value->IsFalse()); | |
| 12989 } | |
| 12990 | |
| 12991 | |
| 12992 static void IsConstructHandler( | 12795 static void IsConstructHandler( |
| 12993 const v8::FunctionCallbackInfo<v8::Value>& args) { | 12796 const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 12994 ApiTestFuzzer::Fuzz(); | 12797 ApiTestFuzzer::Fuzz(); |
| 12995 args.GetReturnValue().Set(args.IsConstructCall()); | 12798 args.GetReturnValue().Set(args.IsConstructCall()); |
| 12996 } | 12799 } |
| 12997 | 12800 |
| 12998 | 12801 |
| 12999 THREADED_TEST(IsConstructCall) { | 12802 THREADED_TEST(IsConstructCall) { |
| 13000 v8::Isolate* isolate = CcTest::isolate(); | 12803 v8::Isolate* isolate = CcTest::isolate(); |
| 13001 v8::HandleScope scope(isolate); | 12804 v8::HandleScope scope(isolate); |
| (...skipping 11637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 24639 CHECK(proxy->GetTarget()->SameValue(target)); | 24442 CHECK(proxy->GetTarget()->SameValue(target)); |
| 24640 CHECK(proxy->GetHandler()->SameValue(handler)); | 24443 CHECK(proxy->GetHandler()->SameValue(handler)); |
| 24641 | 24444 |
| 24642 proxy->Revoke(); | 24445 proxy->Revoke(); |
| 24643 CHECK(proxy->IsProxy()); | 24446 CHECK(proxy->IsProxy()); |
| 24644 CHECK(!target->IsProxy()); | 24447 CHECK(!target->IsProxy()); |
| 24645 CHECK(proxy->IsRevoked()); | 24448 CHECK(proxy->IsRevoked()); |
| 24646 CHECK(proxy->GetTarget()->SameValue(target)); | 24449 CHECK(proxy->GetTarget()->SameValue(target)); |
| 24647 CHECK(proxy->GetHandler()->IsNull()); | 24450 CHECK(proxy->GetHandler()->IsNull()); |
| 24648 } | 24451 } |
| OLD | NEW |