Skip to content

Commit 67b7db0

Browse files
yjaeseokmhdawson
authored andcommitted
test: write tests for Array class
add tests for array class. PR-URL: #363 Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: Gabriel Schulhof <gabriel.schulhof@intel.com> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
1 parent 729f6dc commit 67b7db0

File tree

5 files changed

+82
-0
lines changed

5 files changed

+82
-0
lines changed

test/basic_types/array.cc

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#define NAPI_EXPERIMENTAL
2+
#include "napi.h"
3+
4+
using namespace Napi;
5+
6+
Value CreateArray(const CallbackInfo& info) {
7+
if (info.Length() > 0) {
8+
size_t length = info[0].As<Number>().Uint32Value();
9+
return Array::New(info.Env(), length);
10+
} else {
11+
return Array::New(info.Env());
12+
}
13+
}
14+
15+
Value GetLength(const CallbackInfo& info) {
16+
Array array = info[0].As<Array>();
17+
return Number::New(info.Env(), static_cast<uint32_t>(array.Length()));
18+
}
19+
20+
Value GetElement(const CallbackInfo& info) {
21+
Array array = info[0].As<Array>();
22+
size_t index = info[1].As<Number>().Uint32Value();
23+
return array[index];
24+
}
25+
26+
void SetElement(const CallbackInfo& info) {
27+
Array array = info[0].As<Array>();
28+
size_t index = info[1].As<Number>().Uint32Value();
29+
array[index] = info[2].As<Value>();
30+
}
31+
32+
Object InitBasicTypesArray(Env env) {
33+
Object exports = Object::New(env);
34+
35+
exports["createArray"] = Function::New(env, CreateArray);
36+
exports["getLength"] = Function::New(env, GetLength);
37+
exports["get"] = Function::New(env, GetElement);
38+
exports["set"] = Function::New(env, SetElement);
39+
40+
return exports;
41+
}

test/basic_types/array.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
'use strict';
2+
const buildType = process.config.target_defaults.default_configuration;
3+
const assert = require('assert');
4+
5+
test(require(`../build/${buildType}/binding.node`));
6+
test(require(`../build/${buildType}/binding_noexcept.node`));
7+
8+
function test(binding) {
9+
10+
// create empty array
11+
const array = binding.basic_types_array.createArray();
12+
assert.strictEqual(binding.basic_types_array.getLength(array), 0);
13+
14+
// create array with length
15+
const arrayWithLength = binding.basic_types_array.createArray(10);
16+
assert.strictEqual(binding.basic_types_array.getLength(arrayWithLength), 10);
17+
18+
// set function test
19+
binding.basic_types_array.set(array, 0, 10);
20+
binding.basic_types_array.set(array, 1, "test");
21+
binding.basic_types_array.set(array, 2, 3.0);
22+
23+
// check length after set data
24+
assert.strictEqual(binding.basic_types_array.getLength(array), 3);
25+
26+
// get function test
27+
assert.strictEqual(binding.basic_types_array.get(array, 0), 10);
28+
assert.strictEqual(binding.basic_types_array.get(array, 1), "test");
29+
assert.strictEqual(binding.basic_types_array.get(array, 2), 3.0);
30+
31+
// overwrite test
32+
binding.basic_types_array.set(array, 0, 5);
33+
assert.strictEqual(binding.basic_types_array.get(array, 0), 5);
34+
35+
// out of index test
36+
assert.strictEqual(binding.basic_types_array.get(array, 5), undefined);
37+
}

test/binding.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ using namespace Napi;
66
Object InitArrayBuffer(Env env);
77
Object InitAsyncContext(Env env);
88
Object InitAsyncWorker(Env env);
9+
Object InitBasicTypesArray(Env env);
910
Object InitBasicTypesBoolean(Env env);
1011
Object InitBasicTypesNumber(Env env);
1112
Object InitBasicTypesValue(Env env);
@@ -39,6 +40,7 @@ Object Init(Env env, Object exports) {
3940
exports.Set("arraybuffer", InitArrayBuffer(env));
4041
exports.Set("asynccontext", InitAsyncContext(env));
4142
exports.Set("asyncworker", InitAsyncWorker(env));
43+
exports.Set("basic_types_array", InitBasicTypesArray(env));
4244
exports.Set("basic_types_boolean", InitBasicTypesBoolean(env));
4345
exports.Set("basic_types_number", InitBasicTypesNumber(env));
4446
exports.Set("basic_types_value", InitBasicTypesValue(env));

test/binding.gyp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
'arraybuffer.cc',
99
'asynccontext.cc',
1010
'asyncworker.cc',
11+
'basic_types/array.cc',
1112
'basic_types/boolean.cc',
1213
'basic_types/number.cc',
1314
'basic_types/value.cc',

test/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ let testModules = [
1111
'arraybuffer',
1212
'asynccontext',
1313
'asyncworker',
14+
'basic_types/array',
1415
'basic_types/boolean',
1516
'basic_types/number',
1617
'basic_types/value',

0 commit comments

Comments
 (0)