Skip to content

Commit 42187ff

Browse files
committed
test: add some test
1 parent 808fb47 commit 42187ff

12 files changed

+516
-4
lines changed

README.md

+12-2
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,19 @@ find_package(node_addon_api_ohos REQUIRED)
2727
target_link_libraries(entry PRIVATE node_addon_api_ohos)
2828
```
2929

30+
## Environment
31+
32+
For node-addon-api-ohos, we acccepted the following environment variables:
33+
34+
| Name | Description | Default Value |
35+
| --------------------------- | ----------------------------------- | ------------- |
36+
| NAPI_CPP_EXCEPTIONS | Allow catch the cpp exception | true |
37+
| NAPI_DISABLE_CPP_EXCEPTIONS | Disable catch the cpp exception | false |
38+
| NAPI_NORMAL | Hidden some APIs or cases for Harmony | true |
39+
3040
## Build
3141

32-
You can release package locally. Just run command:
42+
You can release package locally. Just run command:
3343

3444
```shell
3545
bash ./scripts/release.sh
@@ -39,4 +49,4 @@ It will generate a `.har` package in current path. You can import it with `file`
3949

4050
## Community
4151

42-
- [ohos-rs](https://github.com/ohos-rs/ohos-rs)
52+
- [ohos-rs](https://github.com/ohos-rs/ohos-rs)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
import { describe, it, DEFAULT } from './util/framework.test';
2+
import binding from './util/binding';
3+
import assert from './util/assert.test';
4+
import { runGCTests } from './util/gc.test';
5+
import { buffer } from '@kit.ArkTS';
6+
7+
declare class ArkTools {
8+
static hintGC: () => void
9+
}
10+
11+
export default function testCase() {
12+
describe("Buffer", () => {
13+
it("RunBuffer", DEFAULT, () => {
14+
return runGCTests([
15+
'Internal Buffer',
16+
() => {
17+
const test = binding.buffer.createBuffer();
18+
binding.buffer.checkBuffer(test);
19+
assert.ok(test instanceof ArrayBuffer);
20+
21+
const test2 = buffer.alloc(test.length);
22+
test.copy(test2.buffer);
23+
binding.buffer.checkBuffer(test2.buffer);
24+
},
25+
26+
'Buffer copy',
27+
() => {
28+
const test = binding.buffer.createBufferCopy();
29+
binding.buffer.checkBuffer(test);
30+
assert.ok(test instanceof ArrayBuffer);
31+
},
32+
33+
'External Buffer',
34+
() => {
35+
const test = binding.buffer.createExternalBuffer();
36+
binding.buffer.checkBuffer(test);
37+
assert.ok(test instanceof ArrayBuffer);
38+
assert.strictEqual(0, binding.buffer.getFinalizeCount());
39+
},
40+
() => {
41+
ArkTools.hintGC();
42+
assert.strictEqual(0, binding.buffer.getFinalizeCount());
43+
},
44+
45+
'External Buffer with finalizer',
46+
() => {
47+
const test = binding.buffer.createExternalBufferWithFinalize();
48+
binding.buffer.checkBuffer(test);
49+
assert.ok(test instanceof ArrayBuffer);
50+
assert.strictEqual(0, binding.buffer.getFinalizeCount());
51+
},
52+
() => {
53+
ArkTools.hintGC();
54+
},
55+
() => {
56+
assert.strictEqual(1, binding.buffer.getFinalizeCount());
57+
},
58+
59+
'External Buffer with finalizer hint',
60+
() => {
61+
const test = binding.buffer.createExternalBufferWithFinalizeHint();
62+
binding.buffer.checkBuffer(test);
63+
assert.ok(test instanceof ArrayBuffer);
64+
assert.strictEqual(0, binding.buffer.getFinalizeCount());
65+
},
66+
() => {
67+
ArkTools.hintGC();
68+
},
69+
() => {
70+
assert.strictEqual(1, binding.buffer.getFinalizeCount());
71+
},
72+
73+
'Create or Copy External Buffer',
74+
() => {
75+
const test = binding.buffer.createOrCopyExternalBuffer();
76+
binding.buffer.checkBuffer(test);
77+
assert.ok(test instanceof ArrayBuffer);
78+
assert.strictEqual(0, binding.buffer.getFinalizeCount());
79+
},
80+
() => {
81+
ArkTools.hintGC();
82+
assert.strictEqual(0, binding.buffer.getFinalizeCount());
83+
},
84+
85+
'Create or Copy External Buffer with finalizer',
86+
() => {
87+
const test = binding.buffer.createOrCopyExternalBufferWithFinalize();
88+
binding.buffer.checkBuffer(test);
89+
assert.ok(test instanceof ArrayBuffer);
90+
assert.strictEqual(0, binding.buffer.getFinalizeCount());
91+
},
92+
() => {
93+
ArkTools.hintGC();
94+
},
95+
() => {
96+
assert.strictEqual(1, binding.buffer.getFinalizeCount());
97+
},
98+
99+
'Create or Copy External Buffer with finalizer hint',
100+
() => {
101+
const test = binding.buffer.createOrCopyExternalBufferWithFinalizeHint();
102+
binding.buffer.checkBuffer(test);
103+
assert.ok(test instanceof ArrayBuffer);
104+
assert.strictEqual(0, binding.buffer.getFinalizeCount());
105+
},
106+
() => {
107+
ArkTools.hintGC();
108+
},
109+
() => {
110+
assert.strictEqual(1, binding.buffer.getFinalizeCount());
111+
},
112+
113+
'Create or Copy External Buffer when NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED defined',
114+
() => {
115+
const test = binding.bufferNoExternal.createOrCopyExternalBuffer();
116+
binding.buffer.checkBuffer(test);
117+
assert.ok(test instanceof ArrayBuffer);
118+
assert.strictEqual(0, binding.buffer.getFinalizeCount());
119+
},
120+
() => {
121+
ArkTools.hintGC();
122+
assert.strictEqual(0, binding.buffer.getFinalizeCount());
123+
},
124+
125+
'Create or Copy External Buffer with finalizer when NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED defined',
126+
() => {
127+
const test = binding.bufferNoExternal.createOrCopyExternalBufferWithFinalize();
128+
binding.buffer.checkBuffer(test);
129+
assert.ok(test instanceof ArrayBuffer);
130+
// finalizer should have been called when the buffer was created.
131+
assert.strictEqual(1, binding.buffer.getFinalizeCount());
132+
},
133+
() => {
134+
ArkTools.hintGC();
135+
},
136+
() => {
137+
assert.strictEqual(1, binding.buffer.getFinalizeCount());
138+
},
139+
140+
'Create or Copy External Buffer with finalizer hint when NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED defined',
141+
() => {
142+
const test = binding.bufferNoExternal.createOrCopyExternalBufferWithFinalizeHint();
143+
binding.buffer.checkBuffer(test);
144+
assert.ok(test instanceof ArrayBuffer);
145+
// finalizer should have been called when the buffer was created.
146+
assert.strictEqual(1, binding.buffer.getFinalizeCount());
147+
},
148+
() => {
149+
ArkTools.hintGC();
150+
},
151+
() => {
152+
assert.strictEqual(1, binding.buffer.getFinalizeCount());
153+
}
154+
]);
155+
})
156+
})
157+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { describe, it, DEFAULT } from '../util/framework.test';
2+
import binding from '../util/binding';
3+
import assert from '../util/assert.test';
4+
5+
export default function testCase() {
6+
describe("DataView", () => {
7+
it("RunDataView", DEFAULT, () => {
8+
function testDataViewCreation (factory, arrayBuffer, offset?, length?) {
9+
const view = factory(arrayBuffer, offset, length);
10+
offset = offset || 0;
11+
assert.ok(dataview.getArrayBuffer(view) instanceof ArrayBuffer);
12+
assert.strictEqual(dataview.getArrayBuffer(view), arrayBuffer);
13+
assert.strictEqual(dataview.getByteOffset(view), offset);
14+
assert.strictEqual(dataview.getByteLength(view),
15+
length || arrayBuffer.byteLength - offset);
16+
}
17+
18+
function testInvalidRange (factory, arrayBuffer, offset, length) {
19+
assert.throws(() => {
20+
factory(arrayBuffer, offset, length);
21+
}, RangeError);
22+
}
23+
24+
const dataview = binding.dataview;
25+
const arrayBuffer = new ArrayBuffer(10);
26+
27+
testDataViewCreation(dataview.createDataView1, arrayBuffer);
28+
testDataViewCreation(dataview.createDataView2, arrayBuffer, 2);
29+
testDataViewCreation(dataview.createDataView2, arrayBuffer, 10);
30+
testDataViewCreation(dataview.createDataView3, arrayBuffer, 2, 4);
31+
testDataViewCreation(dataview.createDataView3, arrayBuffer, 10, 0);
32+
33+
// @ts-ignore
34+
testInvalidRange(dataview.createDataView2, arrayBuffer, 11);
35+
testInvalidRange(dataview.createDataView3, arrayBuffer, 11, 0);
36+
testInvalidRange(dataview.createDataView3, arrayBuffer, 6, 5);
37+
})
38+
})
39+
}

ohos_addon_example/entry/src/ohosTest/ets/test/Example

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { describe, it, DEFAULT } from '../util/framework.test';
22
import binding from '../util/binding';
33
import assert from '../util/assert.test';
44

5-
export default function basicTypeArray() {
5+
export default function testCase() {
66
describe("basic_type_array_test", () => {
77
it("RunArray", DEFAULT, () => {
88
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { describe, it, DEFAULT } from '../util/framework.test';
2+
import binding from '../util/binding';
3+
import assert from '../util/assert.test';
4+
5+
export default function testCase() {
6+
describe("GlobalObjectDeleteProperty", () => {
7+
it("RunGlobalObjectDeleteProperty", DEFAULT, () => {
8+
const KEY_TYPE = {
9+
C_STR: 'KEY_AS_C_STRING',
10+
CPP_STR: 'KEY_AS_CPP_STRING',
11+
NAPI: 'KEY_AS_NAPI_VALUES',
12+
INT_32: 'KEY_AS_INT_32_NUM'
13+
};
14+
15+
function assertNotGlobalObjectHasNoProperty (key, keyType) {
16+
switch (keyType) {
17+
case KEY_TYPE.NAPI:
18+
assert.notStrictEqual(binding.globalObject.hasPropertyWithNapiValue(key), true);
19+
break;
20+
21+
case KEY_TYPE.C_STR:
22+
assert.notStrictEqual(binding.globalObject.hasPropertyWithCStyleString(key), true);
23+
break;
24+
25+
case KEY_TYPE.CPP_STR:
26+
assert.notStrictEqual(binding.globalObject.hasPropertyWithCppStyleString(key), true);
27+
break;
28+
29+
case KEY_TYPE.INT_32:
30+
assert.notStrictEqual(binding.globalObject.hasPropertyWithInt32(key), true);
31+
break;
32+
}
33+
}
34+
35+
function assertErrMessageIsThrown (propertyCheckExistenceFunction, errMsg) {
36+
assert.throws(() => {
37+
propertyCheckExistenceFunction(undefined);
38+
}, errMsg);
39+
}
40+
41+
binding.globalObject.createMockTestObject();
42+
43+
binding.globalObject.deletePropertyWithCStyleString('c_str_key');
44+
binding.globalObject.deletePropertyWithCppStyleString('cpp_string_key');
45+
binding.globalObject.deletePropertyWithCppStyleString('circular');
46+
binding.globalObject.deletePropertyWithInt32(15);
47+
binding.globalObject.deletePropertyWithNapiValue('2');
48+
49+
assertNotGlobalObjectHasNoProperty('c_str_key', KEY_TYPE.C_STR);
50+
assertNotGlobalObjectHasNoProperty('cpp_string_key', KEY_TYPE.CPP_STR);
51+
assertNotGlobalObjectHasNoProperty('circular', KEY_TYPE.CPP_STR);
52+
assertNotGlobalObjectHasNoProperty(15, true);
53+
assertNotGlobalObjectHasNoProperty('2', KEY_TYPE.NAPI);
54+
55+
assertErrMessageIsThrown(binding.globalObject.hasPropertyWithCppStyleString, 'Error: A string was expected');
56+
assertErrMessageIsThrown(binding.globalObject.hasPropertyWithCStyleString, 'Error: A string was expected');
57+
assertErrMessageIsThrown(binding.globalObject.hasPropertyWithInt32, 'Error: A number was expected');
58+
})
59+
})
60+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { describe, it, DEFAULT } from '../util/framework.test';
2+
import binding from '../util/binding';
3+
import assert from '../util/assert.test';
4+
5+
export default function testCase() {
6+
describe("GlobalObjectGetProperty", () => {
7+
it("RunGlobalObjectGetProperty", DEFAULT, () => {
8+
const KEY_TYPE = {
9+
C_STR: 'KEY_AS_C_STRING',
10+
CPP_STR: 'KEY_AS_CPP_STRING',
11+
NAPI: 'KEY_AS_NAPI_VALUES',
12+
INT_32: 'KEY_AS_INT_32_NUM'
13+
};
14+
15+
binding.globalObject.createMockTestObject();
16+
function assertGlobalObjectPropertyIs (key, attribute, keyType) {
17+
let napiObjectAttr;
18+
switch (keyType) {
19+
case KEY_TYPE.NAPI:
20+
napiObjectAttr = binding.globalObject.getPropertyWithNapiValue(key);
21+
assert.deepStrictEqual(attribute, napiObjectAttr);
22+
break;
23+
24+
case KEY_TYPE.C_STR:
25+
napiObjectAttr = binding.globalObject.getPropertyWithCString(key);
26+
assert.deepStrictEqual(attribute, napiObjectAttr);
27+
break;
28+
29+
case KEY_TYPE.CPP_STR:
30+
napiObjectAttr = binding.globalObject.getPropertyWithCppString(key);
31+
assert.deepStrictEqual(attribute, napiObjectAttr);
32+
break;
33+
34+
case KEY_TYPE.INT_32:
35+
napiObjectAttr = binding.globalObject.getPropertyWithInt32(key);
36+
assert.deepStrictEqual(attribute, napiObjectAttr);
37+
break;
38+
}
39+
}
40+
41+
function assertErrMessageIsThrown (propertyFetchFunction, errMsg) {
42+
assert.throws(() => {
43+
propertyFetchFunction(undefined);
44+
}, errMsg);
45+
}
46+
47+
// @ts-ignore
48+
assertGlobalObjectPropertyIs('2', global['2'], KEY_TYPE.NAPI);
49+
// @ts-ignore
50+
assertGlobalObjectPropertyIs('c_str_key', global.c_str_key, KEY_TYPE.C_STR);
51+
// @ts-ignore
52+
assertGlobalObjectPropertyIs('cpp_string_key', global.cpp_string_key, KEY_TYPE.CPP_STR);
53+
// @ts-ignore
54+
assertGlobalObjectPropertyIs('circular', global.circular, KEY_TYPE.CPP_STR);
55+
// @ts-ignore
56+
assertGlobalObjectPropertyIs(15, global['15'], KEY_TYPE.INT_32);
57+
58+
assertErrMessageIsThrown(binding.globalObject.getPropertyWithCString, 'Error: A string was expected');
59+
assertErrMessageIsThrown(binding.globalObject.getPropertyWithCppString, 'Error: A string was expected');
60+
assertErrMessageIsThrown(binding.globalObject.getPropertyWithInt32, 'Error: A number was expected');
61+
})
62+
})
63+
}

0 commit comments

Comments
 (0)