| Index: test/cctest/test-debug.cc
|
| ===================================================================
|
| --- test/cctest/test-debug.cc (revision 2035)
|
| +++ test/cctest/test-debug.cc (working copy)
|
| @@ -3312,6 +3312,82 @@
|
| }
|
|
|
|
|
| +static v8::Handle<v8::Value> ProtperyXNativeGetter(
|
| + v8::Local<v8::String> property, const v8::AccessorInfo& info) {
|
| + return v8::Integer::New(10);
|
| +}
|
| +
|
| +
|
| +TEST(NativeGetterPropertyMirror) {
|
| + // Create a V8 environment with debug access.
|
| + v8::HandleScope scope;
|
| + DebugLocalContext env;
|
| + env.ExposeDebug();
|
| +
|
| + v8::Handle<v8::String> name = v8::String::New("x");
|
| + // Create object with named accessor.
|
| + v8::Handle<v8::ObjectTemplate> named = v8::ObjectTemplate::New();
|
| + named->SetAccessor(name, &ProtperyXNativeGetter, NULL,
|
| + v8::Handle<v8::Value>(), v8::DEFAULT, v8::None);
|
| +
|
| + // Create object with named property getter.
|
| + env->Global()->Set(v8::String::New("instance"), named->NewInstance());
|
| + CHECK_EQ(10, CompileRun("instance.x")->Int32Value());
|
| +
|
| + // Get mirror for the object with property getter.
|
| + CompileRun("instance_mirror = debug.MakeMirror(instance);");
|
| + CHECK(CompileRun(
|
| + "instance_mirror instanceof debug.ObjectMirror")->BooleanValue());
|
| +
|
| + CompileRun("named_names = instance_mirror.propertyNames();");
|
| + CHECK_EQ(1, CompileRun("named_names.length")->Int32Value());
|
| + CHECK(CompileRun("named_names[0] == 'x'")->BooleanValue());
|
| + CHECK(CompileRun(
|
| + "instance_mirror.property('x').value().isNumber()")->BooleanValue());
|
| + CHECK(CompileRun(
|
| + "instance_mirror.property('x').value().value() == 10")->BooleanValue());
|
| +}
|
| +
|
| +
|
| +static v8::Handle<v8::Value> ProtperyXNativeGetterThrowingError(
|
| + v8::Local<v8::String> property, const v8::AccessorInfo& info) {
|
| + return CompileRun("throw new Error('Error message');");
|
| +}
|
| +
|
| +
|
| +TEST(NativeGetterThrowingErrorPropertyMirror) {
|
| + // Create a V8 environment with debug access.
|
| + v8::HandleScope scope;
|
| + DebugLocalContext env;
|
| + env.ExposeDebug();
|
| +
|
| + v8::Handle<v8::String> name = v8::String::New("x");
|
| + // Create object with named accessor.
|
| + v8::Handle<v8::ObjectTemplate> named = v8::ObjectTemplate::New();
|
| + named->SetAccessor(name, &ProtperyXNativeGetterThrowingError, NULL,
|
| + v8::Handle<v8::Value>(), v8::DEFAULT, v8::None);
|
| +
|
| + // Create object with named property getter.
|
| + env->Global()->Set(v8::String::New("instance"), named->NewInstance());
|
| +
|
| + // Get mirror for the object with property getter.
|
| + CompileRun("instance_mirror = debug.MakeMirror(instance);");
|
| + CHECK(CompileRun(
|
| + "instance_mirror instanceof debug.ObjectMirror")->BooleanValue());
|
| + CompileRun("named_names = instance_mirror.propertyNames();");
|
| + CHECK_EQ(1, CompileRun("named_names.length")->Int32Value());
|
| + CHECK(CompileRun("named_names[0] == 'x'")->BooleanValue());
|
| + CHECK(CompileRun(
|
| + "instance_mirror.property('x').value().isError()")->BooleanValue());
|
| +
|
| + // Check that the message is that passed to the Error constructor.
|
| + CHECK(CompileRun(
|
| + "instance_mirror.property('x').value().message() == 'Error message'")->
|
| + BooleanValue());
|
| +}
|
| +
|
| +
|
| +
|
| // Multithreaded tests of JSON debugger protocol
|
|
|
| // Support classes
|
|
|