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

Unified Diff: test/cctest/test-api.cc

Issue 7331035: Implement API functions for handling the AccessorDescriptor (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/handles.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-api.cc
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
index 1531f905d1b078f6286418e3c0096e98350a8a66..721d5569d17d7b6ac9d0ff6f9839026b5221ec13 100644
--- a/test/cctest/test-api.cc
+++ b/test/cctest/test-api.cc
@@ -6979,6 +6979,78 @@ THREADED_TEST(GetterSetterExceptions) {
}
+THREADED_TEST(DefineAndLookupGetterSetter) {
+ v8::HandleScope handle_scope;
+ LocalContext context;
+ v8::Handle<v8::Object> global = context->Global();
+
+ CompileRun("function getter() { return 'getter'; }");
+ Local<Function> getter = Local<Function>::Cast(global->Get(v8_str("getter")));
+ CompileRun("function setter() { return 'setter'; }");
+ Local<Function> setter = Local<Function>::Cast(global->Get(v8_str("setter")));
+
+ Local<Object> obj = Object::New();
+ obj->DefineGetter(v8_str("getter"), getter);
+ obj->DefineSetter(v8_str("setter"), setter);
+ context->Global()->Set(String::New("obj"), obj);
+
+ CompileRun("d_getter = Object.getOwnPropertyDescriptor(obj, 'getter');"
+ "d_setter = Object.getOwnPropertyDescriptor(obj, 'setter');");
+
+ Local<Value> res = CompileRun("d_getter.get()");
+ String::AsciiValue string_value1(res);
+ CHECK_EQ("getter", *string_value1);
+ Local<Value> f1 = obj->LookupGetter(v8_str("getter"));
+ Local<Value> res2 = Local<Function>::Cast(f1)->Call(obj, 0, NULL);
+ String::AsciiValue string_value2(res2);
+ CHECK_EQ("getter", *string_value2);
+
+ Local<Value> res3 = CompileRun("d_getter.set");
+ CHECK(res3->IsUndefined());
+ Local<Value> res4 = obj->LookupSetter(v8_str("getter"));
+ CHECK(res4->IsUndefined());
+
+ Local<Value> res5 = CompileRun("d_setter.get");
+ CHECK(res5->IsUndefined());
+ Local<Value> res6 = obj->LookupGetter(v8_str("setter"));
+ CHECK(res6->IsUndefined());
+
+ Local<Value> res7 = CompileRun("d_setter.set()");
+ String::AsciiValue string_value3(res7);
+ CHECK_EQ("setter", *string_value3);
+ Local<Value> f2 = obj->LookupSetter(v8_str("setter"));
+ Local<Value> res8 = Local<Function>::Cast(f2)->Call(obj, 0, NULL);
+ String::AsciiValue string_value4(res8);
+ CHECK_EQ("setter", *string_value4);
+
+ CompileRun("function getter2() { return 'getter2'; }");
+ Local<Function> getter2 =
+ Local<Function>::Cast(global->Get(v8_str("getter2")));
+ obj->DefineGetter(v8_str("getter"), getter2);
+ CompileRun("d_getter = Object.getOwnPropertyDescriptor(obj, 'getter');");
+ Local<Value> res9 = CompileRun("d_getter.get()");
+ String::AsciiValue string_value5(res9);
+ CHECK_EQ("getter2", *string_value5);
+ Local<Value> f3 = obj->LookupGetter(v8_str("getter"));
+ Local<Value> res10 = Local<Function>::Cast(f3)->Call(obj, 0, NULL);
+ String::AsciiValue string_value6(res10);
+ CHECK_EQ("getter2", *string_value6);
+
+ CompileRun("function setter2() { return 'setter2'; }");
+ Local<Function> setter2 =
+ Local<Function>::Cast(global->Get(v8_str("setter2")));
+ obj->DefineSetter(v8_str("setter"), setter2);
+ CompileRun("d_setter = Object.getOwnPropertyDescriptor(obj, 'setter');");
+ Local<Value> res11 = CompileRun("d_setter.set()");
+ String::AsciiValue string_value7(res11);
+ CHECK_EQ("setter2", *string_value7);
+ Local<Value> f4 = obj->LookupSetter(v8_str("setter"));
+ Local<Value> res12 = Local<Function>::Cast(f4)->Call(obj, 0, NULL);
+ String::AsciiValue string_value8(res12);
+ CHECK_EQ("setter2", *string_value8);
+}
+
+
THREADED_TEST(Constructor) {
v8::HandleScope handle_scope;
LocalContext context;
« no previous file with comments | « src/handles.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698