-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathPDSLoader.test.js
More file actions
104 lines (80 loc) · 2.61 KB
/
PDSLoader.test.js
File metadata and controls
104 lines (80 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import { PDSLoader } from './PDSLoader.js';
import { getFirstLabelInstance } from './utils.js';
function stringToBuffer( str ) {
const byteBuffer = new Uint8Array( new ArrayBuffer( str.length ) );
for ( let i = 0, l = str.length; i < l; i ++ ) {
byteBuffer[ i ] = str.charCodeAt( i );
}
return byteBuffer.buffer;
}
describe( 'PDSLoader', () => {
it( 'should correctly parse header labels.', done => {
const loader = new PDSLoader();
const labels = `
RECORD_TYPE = FIXED_LENGTH
ENUM = A
STRING="B"
SPACE_STRING="LONG STRING"
MULTILINE_STRING="
THIS IS
A
MULTILINE"
ARRAY=(1, "A")
OBJECT=OBJECT_NAME
NESTED_FIELD=1
END_OBJECT
END
`;
loader.parse( stringToBuffer( labels ) ).then( res => {
expect( res.labels ).toEqual( [
{ name: 'RECORD_TYPE', value: 'FIXED_LENGTH' },
{ name: 'ENUM', value: 'A' },
{ name: 'STRING', value: 'B' },
{ name: 'SPACE_STRING', value: 'LONG STRING' },
{ name: 'MULTILINE_STRING', value:
'\n THIS IS\n A\n MULTILINE' },
{ name: 'ARRAY', value: [ 1, 'A' ] },
{
isLabelGroup: true,
name: 'OBJECT_NAME',
value: [
{ name: 'NESTED_FIELD', value: 1 },
],
},
] );
done();
} );
} );
it.todo( 'should load an internal vicar product.' );
} );
describe( 'getFirstLabelInstance', () => {
it( 'should return just the first instance of the label.', () => {
const labels = [
{ name: 'A', value: 1 },
{ name: 'B', value: 2 },
{ name: 'A', value: 3 },
{ name: 'D', value: [ 1, 2, 3 ] },
];
expect( getFirstLabelInstance( labels, 'A', 4 ) ).toEqual( 1 );
expect( getFirstLabelInstance( labels, 'B', 4 ) ).toEqual( 2 );
expect( getFirstLabelInstance( labels, 'C', 4 ) ).toEqual( 4 );
expect( getFirstLabelInstance( labels, 'C' ) ).toEqual( undefined );
expect( getFirstLabelInstance( labels, 'D', 4 ) ).toEqual( [ 1, 2, 3 ] );
} );
it( 'should support deep object nesting.', () => {
const labels = [
{ isLabelGroup: true, name: 'A', value: [
{ isLabelGroup: true, name: 'C', value: [
{
name: 'D',
value: 'TEST',
},
] },
] },
{ name: 'B', value: [ { name: 'INSIDE', value: 10 } ] },
];
expect( getFirstLabelInstance( labels, 'A.C.D' ) ).toEqual( 'TEST' );
expect( getFirstLabelInstance( labels, 'A.C' ) ).toEqual( [ { name: 'D', value: 'TEST' } ] );
expect( getFirstLabelInstance( labels, 'B.INSIDE' ) ).toEqual( undefined );
} );
} );