Skip to content

Commit 16a943a

Browse files
committed
Tests of v8::Object::CreateDataProperty().
1 parent 3f52092 commit 16a943a

File tree

2 files changed

+95
-1
lines changed

2 files changed

+95
-1
lines changed

graal-nodejs/test/graal/unit/object.cc

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, 2018, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -254,4 +254,28 @@ EXPORT_TO_JS(SetIntegrityLevel) {
254254
}
255255
}
256256

257+
EXPORT_TO_JS(CreateDataProperty) {
258+
Local<Context> context = args.GetIsolate()->GetCurrentContext();
259+
Local<Object> obj = args[0].As<Object>();
260+
Local<Name> key = args[1].As<Name>();
261+
262+
Maybe<bool> result = obj->CreateDataProperty(context, key, args[2]);
263+
264+
if (result.IsJust()) {
265+
args.GetReturnValue().Set(result.FromJust());
266+
}
267+
}
268+
269+
EXPORT_TO_JS(CreateDataPropertyIndex) {
270+
Local<Context> context = args.GetIsolate()->GetCurrentContext();
271+
Local<Object> obj = args[0].As<Object>();
272+
uint32_t index = args[1]->Uint32Value(context).FromJust();
273+
274+
Maybe<bool> result = obj->CreateDataProperty(context, index, args[2]);
275+
276+
if (result.IsJust()) {
277+
args.GetReturnValue().Set(result.FromJust());
278+
}
279+
}
280+
257281
#undef SUITE

graal-nodejs/test/graal/unit/object.js

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,4 +507,74 @@ describe('Object', function () {
507507
});
508508
}
509509
});
510+
describe('CreateDataProperty', function () {
511+
describe('name version', function () {
512+
it('should create data property', function () {
513+
var o = {};
514+
var key = 'foo';
515+
assert.strictEqual(module.Object_CreateDataProperty(o, key, 42), true);
516+
var desc = Object.getOwnPropertyDescriptor(o, key);
517+
assert.strictEqual(desc.value, 42);
518+
assert.strictEqual(desc.configurable, true);
519+
assert.strictEqual(desc.enumerable, true);
520+
assert.strictEqual(desc.writable, true);
521+
});
522+
it('should not override existing non-configurable property', function () {
523+
var o = {};
524+
var key = 'foo';
525+
Object.defineProperty(o, key, { value: 211 });
526+
assert.strictEqual(module.Object_CreateDataProperty(o, key, 42), false);
527+
var desc = Object.getOwnPropertyDescriptor(o, key);
528+
assert.strictEqual(desc.value, 211);
529+
assert.strictEqual(desc.configurable, false);
530+
assert.strictEqual(desc.enumerable, false);
531+
assert.strictEqual(desc.writable, false);
532+
});
533+
it('should not create data property on non-extensible object', function () {
534+
var o = Object.freeze({});
535+
var key = 'foo';
536+
assert.strictEqual(module.Object_CreateDataProperty(o, key, 42), false);
537+
assert.strictEqual(Object.getOwnPropertyDescriptor(o, key), undefined);
538+
});
539+
});
540+
describe('index version', function () {
541+
it('should create data property', function () {
542+
var o = {};
543+
var key = 123;
544+
assert.strictEqual(module.Object_CreateDataPropertyIndex(o, key, 42), true);
545+
var desc = Object.getOwnPropertyDescriptor(o, key);
546+
assert.strictEqual(desc.value, 42);
547+
assert.strictEqual(desc.configurable, true);
548+
assert.strictEqual(desc.enumerable, true);
549+
assert.strictEqual(desc.writable, true);
550+
});
551+
it('should not override existing non-configurable property', function () {
552+
var o = {};
553+
var key = 123;
554+
Object.defineProperty(o, key, { value: 211 });
555+
assert.strictEqual(module.Object_CreateDataPropertyIndex(o, key, 42), false);
556+
var desc = Object.getOwnPropertyDescriptor(o, key);
557+
assert.strictEqual(desc.value, 211);
558+
assert.strictEqual(desc.configurable, false);
559+
assert.strictEqual(desc.enumerable, false);
560+
assert.strictEqual(desc.writable, false);
561+
});
562+
it('should not create data property on non-extensible object', function () {
563+
var o = Object.freeze({});
564+
var key = 123;
565+
assert.strictEqual(module.Object_CreateDataPropertyIndex(o, key, 42), false);
566+
assert.strictEqual(Object.getOwnPropertyDescriptor(o, key), undefined);
567+
});
568+
it('should work for indices that do not fit into int32', function () {
569+
var o = {};
570+
var key = 4294967295;
571+
assert.strictEqual(module.Object_CreateDataPropertyIndex(o, key, 42), true);
572+
var desc = Object.getOwnPropertyDescriptor(o, key);
573+
assert.strictEqual(desc.value, 42);
574+
assert.strictEqual(desc.configurable, true);
575+
assert.strictEqual(desc.enumerable, true);
576+
assert.strictEqual(desc.writable, true);
577+
});
578+
});
579+
});
510580
});

0 commit comments

Comments
 (0)