Skip to content
This repository was archived by the owner on Jul 24, 2025. It is now read-only.

Commit 19a26f8

Browse files
authored
Merge pull request #3 from NordicPlayground/split-descriptors-unit-test
Split descriptors unit test
2 parents 2a21452 + cc23ce5 commit 19a26f8

File tree

5 files changed

+100
-18
lines changed

5 files changed

+100
-18
lines changed

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
"scripts": {
1010
"rollup": "rollup -c rollup.config.js",
1111
"lint": "eslint src/",
12-
"lintfix": "eslint src/ --fix"
12+
"lintfix": "eslint src/ --fix",
13+
"test": "rollup -c rollup.config.js && jasmine"
1314
},
1415
"dependencies": {
1516
"debug": "^3.1.0",
@@ -19,6 +20,7 @@
1920
"eslint": "^4.16.0",
2021
"eslint-config-airbnb-base": "^12.1.0",
2122
"eslint-plugin-import": "^2.8.0",
23+
"jasmine": "^2.8.0",
2224
"rollup": "^0.55.0",
2325
"rollup-plugin-buble": "^0.18.0",
2426
"rollup-plugin-eslint": "^4.0.0"

rollup.config.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,15 @@ export default [
1414
eslint(),
1515
buble(),
1616
]
17+
},
18+
{
19+
input: 'src/split-descriptors.js',
20+
output: [
21+
{ file: 'dist/split-descriptors.cjs.js', format: 'cjs', sourcemap: true },
22+
],
23+
plugins: [
24+
eslint(),
25+
buble(),
26+
]
1727
}
1828
];

spec/split-descriptors-spec.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/* Copyright (c) 2010 - 2018, Nordic Semiconductor ASA
2+
*
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are met:
7+
*
8+
* 1. Redistributions of source code must retain the above copyright notice, this
9+
* list of conditions and the following disclaimer.
10+
*
11+
* 2. Redistributions in binary form must reproduce the above copyright
12+
* notice, this list of conditions and the following disclaimer in the
13+
* documentation and/or other materials provided with the distribution.
14+
*
15+
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
16+
* contributors may be used to endorse or promote products derived from this
17+
* software without specific prior written permission.
18+
*
19+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21+
* IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE
22+
* ARE DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
23+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29+
* POSSIBILITY OF SUCH DAMAGE.
30+
*/
31+
32+
const splitDescriptors = require('../dist/split-descriptors.cjs.js');
33+
34+
describe('splitDescriptors', () => {
35+
it('should return empty array for undefined input', () => {
36+
expect(splitDescriptors()).toEqual([]);
37+
});
38+
39+
it('should return empty array for null input', () => {
40+
expect(splitDescriptors(null)).toEqual([]);
41+
});
42+
43+
it('should return empty array for non-Uint8Array', () => {
44+
expect(splitDescriptors([1, 2, 3, 4, 5, 6, 7, 8])).toEqual([]);
45+
});
46+
47+
it('should split input to subarrays', () => {
48+
const bytes = new Uint8Array([
49+
5, 36, 0, 16, 1, 5, 36, 1, 3, 1, 4, 36, 2, 6, 5, 36, 6, 0, 1,
50+
]);
51+
expect(splitDescriptors(bytes))
52+
.toEqual([
53+
new Uint8Array([5, 36, 0, 16, 1]),
54+
new Uint8Array([5, 36, 1, 3, 1]),
55+
new Uint8Array([4, 36, 2, 6]),
56+
new Uint8Array([5, 36, 6, 0, 1]),
57+
]);
58+
});
59+
60+
it('should silently ignore insufficient data', () => {
61+
const bytes = new Uint8Array([15, 36, 0, 16, 1]);
62+
expect(splitDescriptors(bytes)).toEqual([bytes]);
63+
});
64+
65+
it('should throw exception on 0 length descriptor', () => {
66+
const bytes = new Uint8Array([0, 36, 0, 16, 1]);
67+
expect(() => {
68+
splitDescriptors(bytes);
69+
}).toThrowError();
70+
});
71+
});

spec/support/jasmine.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"spec_dir": "spec",
3+
"spec_files": [
4+
"**/*[sS]pec.js"
5+
],
6+
"helpers": [
7+
"helpers/**/*.js"
8+
],
9+
"stopSpecOnExpectationFailure": false,
10+
"random": false
11+
}

src/split-descriptors.js

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
// should be splitted into
3737
// 5 X X X X | 4 X X X | 9 X X X X X X X X
3838

39-
4039
// Given a Uint8Array, returns an Array of Uint8Array
4140
// Each element of the resulting array is a subarray of the original Uint8Array.
4241
export default function splitDescriptors(bytes) {
@@ -49,26 +48,15 @@ export default function splitDescriptors(bytes) {
4948

5049
while (len > 0) {
5150
const descLen = bytes[pointer];
51+
if (descLen < 1) {
52+
throw new Error('invalid descriptor length');
53+
}
5254
descs.push(bytes.subarray(pointer, pointer + descLen));
5355
len -= descLen;
5456
pointer += descLen;
5557
}
5658

59+
// TODO: Consider handling if len !== 0 at this point.
60+
5761
return descs;
5862
}
59-
60-
61-
/*
62-
let test = Uint8Array.from([5, 36, 0, 16, 1, 5, 36, 1, 3, 1, 4, 36, 2, 6, 5, 36, 6, 0, 1]);
63-
64-
console.log(splitDescriptors(test));
65-
*/
66-
67-
/*
68-
The previous code should output:
69-
70-
[ Uint8Array [ 5, 36, 0, 16, 1 ],
71-
Uint8Array [ 5, 36, 1, 3, 1 ],
72-
Uint8Array [ 4, 36, 2, 6 ],
73-
Uint8Array [ 5, 36, 6, 0, 1 ] ]
74-
*/

0 commit comments

Comments
 (0)