Skip to content

Commit

Permalink
test: add new.target add-on regression test
Browse files Browse the repository at this point in the history
Add a test that checks that new.target inheritance works when inheriting
from a constructor defined in C++.

PR-URL: #9689
Refs: #9288
Refs: #9293
Reviewed-By: Anna Henningsen <anna@addaleax.net>
  • Loading branch information
bnoordhuis authored and addaleax committed Nov 22, 2016
1 parent 0083bf2 commit 7c1a2f5
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 0 deletions.
16 changes: 16 additions & 0 deletions test/addons/new-target/binding.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#include <node.h>
#include <v8.h>

namespace {

inline void NewClass(const v8::FunctionCallbackInfo<v8::Value>&) {}

inline void Initialize(v8::Local<v8::Object> binding) {
auto isolate = binding->GetIsolate();
binding->Set(v8::String::NewFromUtf8(isolate, "Class"),
v8::FunctionTemplate::New(isolate, NewClass)->GetFunction());
}

NODE_MODULE(binding, Initialize)

} // anonymous namespace
9 changes: 9 additions & 0 deletions test/addons/new-target/binding.gyp
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
'targets': [
{
'target_name': 'binding',
'defines': [ 'V8_DEPRECATION_WARNINGS=1' ],
'sources': [ 'binding.cc' ]
}
]
}
18 changes: 18 additions & 0 deletions test/addons/new-target/test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
'use strict';

const common = require('../../common');
const assert = require('assert');
const binding = require(`./build/${common.buildType}/binding`);

class Class extends binding.Class {
constructor() {
super();
this.method();
}
method() {
this.ok = true;
}
}

assert.ok(new Class() instanceof binding.Class);
assert.ok(new Class().ok);

0 comments on commit 7c1a2f5

Please sign in to comment.