Index: test/cctest/test-api.cc |
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
index 38ca9f59adf0c5480578368f89c406b486282244..d5e838ebe09618a6dbc3dcdd567d5d0136482cc2 100644 |
--- a/test/cctest/test-api.cc |
+++ b/test/cctest/test-api.cc |
@@ -17504,6 +17504,70 @@ THREADED_TEST(FunctionGetInferredName) { |
} |
+THREADED_TEST(FunctionGetDisplayName) { |
+ LocalContext env; |
+ v8::HandleScope scope(env->GetIsolate()); |
+ const char* code = "var error = false;" |
+ "function a() { this.x = 1; };" |
+ "a.displayName = 'display_a';" |
+ "var b = (function() {" |
+ " var f = function() { this.x = 2; };" |
+ " f.displayName = 'display_b';" |
+ " return f;" |
+ "})();" |
+ "var c = function() {};" |
+ "c.__defineGetter__('displayName', function() {" |
+ " error = true;" |
+ " throw new Error();" |
+ "});" |
+ "function d() {};" |
+ "d.__defineGetter__('displayName', function() {" |
+ " error = true;" |
+ " return 'wrong_display_name';" |
+ "});" |
+ "function e() {};" |
+ "e.displayName = 'wrong_display_name';" |
+ "e.__defineSetter__('displayName', function() {" |
+ " error = true;" |
+ " throw new Error();" |
+ "});" |
+ "function f() {};" |
+ "f.displayName = { 'foo': 6, toString: function() {" |
+ " error = true;" |
+ " return 'wrong_display_name';" |
+ "}};" |
+ "var g = function() {" |
+ " arguments.callee.displayName = 'set_in_runtime';" |
+ "}; g();" |
+ ; |
+ v8::ScriptOrigin origin = v8::ScriptOrigin(v8::String::New("test")); |
+ v8::Script::Compile(v8::String::New(code), &origin)->Run(); |
+ v8::Local<v8::Value> error = env->Global()->Get(v8::String::New("error")); |
+ v8::Local<v8::Function> a = v8::Local<v8::Function>::Cast( |
+ env->Global()->Get(v8::String::New("a"))); |
+ v8::Local<v8::Function> b = v8::Local<v8::Function>::Cast( |
+ env->Global()->Get(v8::String::New("b"))); |
+ v8::Local<v8::Function> c = v8::Local<v8::Function>::Cast( |
+ env->Global()->Get(v8::String::New("c"))); |
+ v8::Local<v8::Function> d = v8::Local<v8::Function>::Cast( |
+ env->Global()->Get(v8::String::New("d"))); |
+ v8::Local<v8::Function> e = v8::Local<v8::Function>::Cast( |
+ env->Global()->Get(v8::String::New("e"))); |
+ v8::Local<v8::Function> f = v8::Local<v8::Function>::Cast( |
+ env->Global()->Get(v8::String::New("f"))); |
+ v8::Local<v8::Function> g = v8::Local<v8::Function>::Cast( |
+ env->Global()->Get(v8::String::New("g"))); |
+ CHECK_EQ(false, error->BooleanValue()); |
+ CHECK_EQ("display_a", *v8::String::Utf8Value(a->GetDisplayName())); |
+ CHECK_EQ("display_b", *v8::String::Utf8Value(b->GetDisplayName())); |
+ CHECK(c->GetDisplayName()->IsUndefined()); |
+ CHECK(d->GetDisplayName()->IsUndefined()); |
+ CHECK(e->GetDisplayName()->IsUndefined()); |
+ CHECK(f->GetDisplayName()->IsUndefined()); |
+ CHECK_EQ("set_in_runtime", *v8::String::Utf8Value(g->GetDisplayName())); |
+} |
+ |
+ |
THREADED_TEST(ScriptLineNumber) { |
LocalContext env; |
v8::HandleScope scope(env->GetIsolate()); |