Add extras test for calling into runtime.
authoryangguo <yangguo@chromium.org>
Thu, 11 Jun 2015 12:19:40 +0000 (05:19 -0700)
committerCommit bot <commit-bot@chromium.org>
Thu, 11 Jun 2015 12:19:50 +0000 (12:19 +0000)
The alternative of passing an object template at context creation is
unfeasible because we need a context to instantiate the template.
At the time we create the context from snapshot or bootstrap from
scratch, we would already need that template instance, leading to a
chicken-and-egg problem.

This is an alternative that is simpler and less intrusive.

R=domenic@chromium.org, jochen@chromium.org

Review URL: https://codereview.chromium.org/1182443002

Cr-Commit-Position: refs/heads/master@{#28938}

test/cctest/test-api.cc
test/cctest/test-extra.js

index 849833e..2fd67d8 100644 (file)
@@ -21445,21 +21445,35 @@ TEST(StrongObjectDelete) {
 }
 
 
+static void ExtrasExportsTestRuntimeFunction(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  CHECK_EQ(3, args[0]->Int32Value());
+  args.GetReturnValue().Set(v8_num(7));
+}
+
+
 TEST(ExtrasExportsObject) {
   v8::Isolate* isolate = CcTest::isolate();
   v8::HandleScope handle_scope(isolate);
   LocalContext env;
 
   // standalone.gypi ensures we include the test-extra.js file, which should
-  // add the testExtraShouldReturnFive export
+  // export the tested functions.
   v8::Local<v8::Object> exports = env->GetExtrasExportsObject();
 
   auto func =
       exports->Get(v8_str("testExtraShouldReturnFive")).As<v8::Function>();
   auto undefined = v8::Undefined(isolate);
   auto result = func->Call(undefined, 0, {}).As<v8::Number>();
-
-  CHECK(result->Value() == 5.0);
+  CHECK_EQ(5, result->Int32Value());
+
+  v8::Handle<v8::FunctionTemplate> runtimeFunction =
+      v8::FunctionTemplate::New(isolate, ExtrasExportsTestRuntimeFunction);
+  exports->Set(v8_str("runtime"), runtimeFunction->GetFunction());
+  func =
+      exports->Get(v8_str("testExtraShouldCallToRuntime")).As<v8::Function>();
+  result = func->Call(undefined, 0, {}).As<v8::Number>();
+  CHECK_EQ(7, result->Int32Value());
 }
 
 
index 9c63d9c..829ddee 100644 (file)
@@ -7,4 +7,8 @@
   exports.testExtraShouldReturnFive = function () {
     return 5;
   };
+
+  exports.testExtraShouldCallToRuntime = function() {
+    return exports.runtime(3);
+  };
 })