@tomgiee/tsdp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +124 -0
- package/dist/src/builder/media-builder.d.ts +221 -0
- package/dist/src/builder/media-builder.d.ts.map +1 -0
- package/dist/src/builder/media-builder.js +385 -0
- package/dist/src/builder/session-builder.d.ts +195 -0
- package/dist/src/builder/session-builder.d.ts.map +1 -0
- package/dist/src/builder/session-builder.js +366 -0
- package/dist/src/index.d.ts +67 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +250 -0
- package/dist/src/parser/attribute-parser.d.ts +100 -0
- package/dist/src/parser/attribute-parser.d.ts.map +1 -0
- package/dist/src/parser/attribute-parser.js +217 -0
- package/dist/src/parser/field-parser.d.ts +124 -0
- package/dist/src/parser/field-parser.d.ts.map +1 -0
- package/dist/src/parser/field-parser.js +335 -0
- package/dist/src/parser/media-parser.d.ts +45 -0
- package/dist/src/parser/media-parser.d.ts.map +1 -0
- package/dist/src/parser/media-parser.js +157 -0
- package/dist/src/parser/primitive-parser.d.ts +138 -0
- package/dist/src/parser/primitive-parser.d.ts.map +1 -0
- package/dist/src/parser/primitive-parser.js +316 -0
- package/dist/src/parser/scanner.d.ts +142 -0
- package/dist/src/parser/scanner.d.ts.map +1 -0
- package/dist/src/parser/scanner.js +284 -0
- package/dist/src/parser/session-parser.d.ts +35 -0
- package/dist/src/parser/session-parser.d.ts.map +1 -0
- package/dist/src/parser/session-parser.js +207 -0
- package/dist/src/parser/time-parser.d.ts +74 -0
- package/dist/src/parser/time-parser.d.ts.map +1 -0
- package/dist/src/parser/time-parser.js +168 -0
- package/dist/src/serializer/attribute-serializer.d.ts +18 -0
- package/dist/src/serializer/attribute-serializer.d.ts.map +1 -0
- package/dist/src/serializer/attribute-serializer.js +34 -0
- package/dist/src/serializer/field-serializer.d.ts +112 -0
- package/dist/src/serializer/field-serializer.d.ts.map +1 -0
- package/dist/src/serializer/field-serializer.js +212 -0
- package/dist/src/serializer/media-serializer.d.ts +31 -0
- package/dist/src/serializer/media-serializer.d.ts.map +1 -0
- package/dist/src/serializer/media-serializer.js +83 -0
- package/dist/src/serializer/session-serializer.d.ts +29 -0
- package/dist/src/serializer/session-serializer.d.ts.map +1 -0
- package/dist/src/serializer/session-serializer.js +99 -0
- package/dist/src/serializer/time-serializer.d.ts +46 -0
- package/dist/src/serializer/time-serializer.d.ts.map +1 -0
- package/dist/src/serializer/time-serializer.js +86 -0
- package/dist/src/types/attributes.d.ts +318 -0
- package/dist/src/types/attributes.d.ts.map +1 -0
- package/dist/src/types/attributes.js +225 -0
- package/dist/src/types/errors.d.ts +129 -0
- package/dist/src/types/errors.d.ts.map +1 -0
- package/dist/src/types/errors.js +186 -0
- package/dist/src/types/fields.d.ts +100 -0
- package/dist/src/types/fields.d.ts.map +1 -0
- package/dist/src/types/fields.js +48 -0
- package/dist/src/types/media.d.ts +148 -0
- package/dist/src/types/media.d.ts.map +1 -0
- package/dist/src/types/media.js +137 -0
- package/dist/src/types/network.d.ts +136 -0
- package/dist/src/types/network.d.ts.map +1 -0
- package/dist/src/types/network.js +130 -0
- package/dist/src/types/primitives.d.ts +193 -0
- package/dist/src/types/primitives.d.ts.map +1 -0
- package/dist/src/types/primitives.js +195 -0
- package/dist/src/types/session.d.ts +122 -0
- package/dist/src/types/session.d.ts.map +1 -0
- package/dist/src/types/session.js +81 -0
- package/dist/src/types/time.d.ts +129 -0
- package/dist/src/types/time.d.ts.map +1 -0
- package/dist/src/types/time.js +84 -0
- package/dist/src/utils/address-parser.d.ts +100 -0
- package/dist/src/utils/address-parser.d.ts.map +1 -0
- package/dist/src/utils/address-parser.js +338 -0
- package/dist/src/utils/format-validators.d.ts +77 -0
- package/dist/src/utils/format-validators.d.ts.map +1 -0
- package/dist/src/utils/format-validators.js +504 -0
- package/dist/src/utils/line-reader.d.ts +84 -0
- package/dist/src/utils/line-reader.d.ts.map +1 -0
- package/dist/src/utils/line-reader.js +169 -0
- package/dist/src/utils/time-converter.d.ts +99 -0
- package/dist/src/utils/time-converter.d.ts.map +1 -0
- package/dist/src/utils/time-converter.js +195 -0
- package/dist/src/validator/media-validator.d.ts +27 -0
- package/dist/src/validator/media-validator.d.ts.map +1 -0
- package/dist/src/validator/media-validator.js +241 -0
- package/dist/src/validator/semantic-validator.d.ts +47 -0
- package/dist/src/validator/semantic-validator.d.ts.map +1 -0
- package/dist/src/validator/semantic-validator.js +207 -0
- package/dist/src/validator/session-validator.d.ts +36 -0
- package/dist/src/validator/session-validator.d.ts.map +1 -0
- package/dist/src/validator/session-validator.js +280 -0
- package/dist/tests/integration/round-trip.test.d.ts +5 -0
- package/dist/tests/integration/round-trip.test.d.ts.map +1 -0
- package/dist/tests/integration/round-trip.test.js +320 -0
- package/dist/tests/integration/voip-examples.test.d.ts +5 -0
- package/dist/tests/integration/voip-examples.test.d.ts.map +1 -0
- package/dist/tests/integration/voip-examples.test.js +361 -0
- package/dist/tests/unit/builder/media-builder.test.d.ts +5 -0
- package/dist/tests/unit/builder/media-builder.test.d.ts.map +1 -0
- package/dist/tests/unit/builder/media-builder.test.js +524 -0
- package/dist/tests/unit/builder/session-builder.test.d.ts +5 -0
- package/dist/tests/unit/builder/session-builder.test.d.ts.map +1 -0
- package/dist/tests/unit/builder/session-builder.test.js +367 -0
- package/dist/tests/unit/parser/attribute-parser.test.d.ts +5 -0
- package/dist/tests/unit/parser/attribute-parser.test.d.ts.map +1 -0
- package/dist/tests/unit/parser/attribute-parser.test.js +319 -0
- package/dist/tests/unit/parser/field-parser.test.d.ts +5 -0
- package/dist/tests/unit/parser/field-parser.test.d.ts.map +1 -0
- package/dist/tests/unit/parser/field-parser.test.js +355 -0
- package/dist/tests/unit/parser/media-parser.test.d.ts +5 -0
- package/dist/tests/unit/parser/media-parser.test.d.ts.map +1 -0
- package/dist/tests/unit/parser/media-parser.test.js +241 -0
- package/dist/tests/unit/parser/primitive-parser.test.d.ts +5 -0
- package/dist/tests/unit/parser/primitive-parser.test.d.ts.map +1 -0
- package/dist/tests/unit/parser/primitive-parser.test.js +261 -0
- package/dist/tests/unit/parser/scanner.test.d.ts +5 -0
- package/dist/tests/unit/parser/scanner.test.d.ts.map +1 -0
- package/dist/tests/unit/parser/scanner.test.js +241 -0
- package/dist/tests/unit/parser/session-parser.test.d.ts +5 -0
- package/dist/tests/unit/parser/session-parser.test.d.ts.map +1 -0
- package/dist/tests/unit/parser/session-parser.test.js +346 -0
- package/dist/tests/unit/parser/time-parser.test.d.ts +5 -0
- package/dist/tests/unit/parser/time-parser.test.d.ts.map +1 -0
- package/dist/tests/unit/parser/time-parser.test.js +173 -0
- package/dist/tests/unit/serializer/attribute-serializer.test.d.ts +5 -0
- package/dist/tests/unit/serializer/attribute-serializer.test.d.ts.map +1 -0
- package/dist/tests/unit/serializer/attribute-serializer.test.js +78 -0
- package/dist/tests/unit/serializer/field-serializer.test.d.ts +5 -0
- package/dist/tests/unit/serializer/field-serializer.test.d.ts.map +1 -0
- package/dist/tests/unit/serializer/field-serializer.test.js +159 -0
- package/dist/tests/unit/serializer/media-serializer.test.d.ts +5 -0
- package/dist/tests/unit/serializer/media-serializer.test.d.ts.map +1 -0
- package/dist/tests/unit/serializer/media-serializer.test.js +155 -0
- package/dist/tests/unit/serializer/session-serializer.test.d.ts +5 -0
- package/dist/tests/unit/serializer/session-serializer.test.d.ts.map +1 -0
- package/dist/tests/unit/serializer/session-serializer.test.js +317 -0
- package/dist/tests/unit/serializer/time-serializer.test.d.ts +5 -0
- package/dist/tests/unit/serializer/time-serializer.test.d.ts.map +1 -0
- package/dist/tests/unit/serializer/time-serializer.test.js +115 -0
- package/dist/tests/unit/types/errors.test.d.ts +5 -0
- package/dist/tests/unit/types/errors.test.d.ts.map +1 -0
- package/dist/tests/unit/types/errors.test.js +127 -0
- package/dist/tests/unit/types/network.test.d.ts +5 -0
- package/dist/tests/unit/types/network.test.d.ts.map +1 -0
- package/dist/tests/unit/types/network.test.js +132 -0
- package/dist/tests/unit/types/primitives.test.d.ts +5 -0
- package/dist/tests/unit/types/primitives.test.d.ts.map +1 -0
- package/dist/tests/unit/types/primitives.test.js +108 -0
- package/dist/tests/unit/utils/address-parser.test.d.ts +5 -0
- package/dist/tests/unit/utils/address-parser.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/address-parser.test.js +203 -0
- package/dist/tests/unit/utils/format-validators.test.d.ts +5 -0
- package/dist/tests/unit/utils/format-validators.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/format-validators.test.js +224 -0
- package/dist/tests/unit/utils/line-reader.test.d.ts +5 -0
- package/dist/tests/unit/utils/line-reader.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/line-reader.test.js +157 -0
- package/dist/tests/unit/utils/time-converter.test.d.ts +5 -0
- package/dist/tests/unit/utils/time-converter.test.d.ts.map +1 -0
- package/dist/tests/unit/utils/time-converter.test.js +190 -0
- package/dist/tests/unit/validator/media-validator.test.d.ts +5 -0
- package/dist/tests/unit/validator/media-validator.test.d.ts.map +1 -0
- package/dist/tests/unit/validator/media-validator.test.js +313 -0
- package/dist/tests/unit/validator/semantic-validator.test.d.ts +5 -0
- package/dist/tests/unit/validator/semantic-validator.test.d.ts.map +1 -0
- package/dist/tests/unit/validator/semantic-validator.test.js +262 -0
- package/dist/tests/unit/validator/session-validator.test.d.ts +5 -0
- package/dist/tests/unit/validator/session-validator.test.d.ts.map +1 -0
- package/dist/tests/unit/validator/session-validator.test.js +447 -0
- package/package.json +50 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tests for field-serializer.ts
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const field_serializer_1 = require("../../../src/serializer/field-serializer");
|
|
7
|
+
const fields_1 = require("../../../src/types/fields");
|
|
8
|
+
const network_1 = require("../../../src/types/network");
|
|
9
|
+
describe('field-serializer', () => {
|
|
10
|
+
describe('serializeVersionField', () => {
|
|
11
|
+
it('should serialize version 0', () => {
|
|
12
|
+
expect((0, field_serializer_1.serializeVersionField)(0)).toBe('v=0');
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
describe('serializeOriginField', () => {
|
|
16
|
+
it('should serialize origin with IPv4', () => {
|
|
17
|
+
const origin = (0, fields_1.createOrigin)('jdoe', '2890844526', '2890842807', 'IN', 'IP4', (0, network_1.createIP4Address)('10.47.16.5'));
|
|
18
|
+
expect((0, field_serializer_1.serializeOriginField)(origin)).toBe('o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5');
|
|
19
|
+
});
|
|
20
|
+
it('should serialize origin with hyphen username', () => {
|
|
21
|
+
const origin = (0, fields_1.createOrigin)('-', '1234567890', '1234567890', 'IN', 'IP4', (0, network_1.createIP4Address)('192.168.1.100'));
|
|
22
|
+
expect((0, field_serializer_1.serializeOriginField)(origin)).toBe('o=- 1234567890 1234567890 IN IP4 192.168.1.100');
|
|
23
|
+
});
|
|
24
|
+
it('should serialize origin with IPv6', () => {
|
|
25
|
+
const origin = (0, fields_1.createOrigin)('user', '123', '456', 'IN', 'IP6', (0, network_1.createIP6Address)('2001:db8::1'));
|
|
26
|
+
expect((0, field_serializer_1.serializeOriginField)(origin)).toBe('o=user 123 456 IN IP6 2001:db8::1');
|
|
27
|
+
});
|
|
28
|
+
it('should serialize origin with FQDN', () => {
|
|
29
|
+
const origin = (0, fields_1.createOrigin)('alice', '100', '200', 'IN', 'IP4', (0, network_1.createFQDN)('host.example.com'));
|
|
30
|
+
expect((0, field_serializer_1.serializeOriginField)(origin)).toBe('o=alice 100 200 IN IP4 host.example.com');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe('serializeSessionNameField', () => {
|
|
34
|
+
it('should serialize session name', () => {
|
|
35
|
+
expect((0, field_serializer_1.serializeSessionNameField)('SDP Seminar')).toBe('s=SDP Seminar');
|
|
36
|
+
});
|
|
37
|
+
it('should serialize single space session name', () => {
|
|
38
|
+
expect((0, field_serializer_1.serializeSessionNameField)(' ')).toBe('s= ');
|
|
39
|
+
});
|
|
40
|
+
it('should serialize session name with special characters', () => {
|
|
41
|
+
expect((0, field_serializer_1.serializeSessionNameField)('Test Session: Audio & Video!')).toBe('s=Test Session: Audio & Video!');
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
describe('serializeInformationField', () => {
|
|
45
|
+
it('should serialize information', () => {
|
|
46
|
+
expect((0, field_serializer_1.serializeInformationField)('Session information')).toBe('i=Session information');
|
|
47
|
+
});
|
|
48
|
+
it('should serialize empty information', () => {
|
|
49
|
+
expect((0, field_serializer_1.serializeInformationField)('')).toBe('i=');
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe('serializeUriField', () => {
|
|
53
|
+
it('should serialize HTTP URI', () => {
|
|
54
|
+
expect((0, field_serializer_1.serializeUriField)('http://example.com/sdp')).toBe('u=http://example.com/sdp');
|
|
55
|
+
});
|
|
56
|
+
it('should serialize HTTPS URI', () => {
|
|
57
|
+
expect((0, field_serializer_1.serializeUriField)('https://example.com/session')).toBe('u=https://example.com/session');
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe('serializeEmailField', () => {
|
|
61
|
+
it('should serialize email', () => {
|
|
62
|
+
expect((0, field_serializer_1.serializeEmailField)('j.doe@example.com')).toBe('e=j.doe@example.com');
|
|
63
|
+
});
|
|
64
|
+
it('should serialize email with display name', () => {
|
|
65
|
+
expect((0, field_serializer_1.serializeEmailField)('j.doe@example.com (Jane Doe)')).toBe('e=j.doe@example.com (Jane Doe)');
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('serializePhoneField', () => {
|
|
69
|
+
it('should serialize phone', () => {
|
|
70
|
+
expect((0, field_serializer_1.serializePhoneField)('+1 617 555-6011')).toBe('p=+1 617 555-6011');
|
|
71
|
+
});
|
|
72
|
+
it('should serialize phone with display name', () => {
|
|
73
|
+
expect((0, field_serializer_1.serializePhoneField)('+1 617 555-6011 (Jane Doe)')).toBe('p=+1 617 555-6011 (Jane Doe)');
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe('serializeConnectionField', () => {
|
|
77
|
+
it('should serialize unicast IPv4 connection', () => {
|
|
78
|
+
const connection = (0, fields_1.createConnection)('IN', 'IP4', (0, network_1.createIP4Address)('192.168.1.100'));
|
|
79
|
+
expect((0, field_serializer_1.serializeConnectionField)(connection)).toBe('c=IN IP4 192.168.1.100');
|
|
80
|
+
});
|
|
81
|
+
it('should serialize unicast IPv6 connection', () => {
|
|
82
|
+
const connection = (0, fields_1.createConnection)('IN', 'IP6', (0, network_1.createIP6Address)('2001:db8::1'));
|
|
83
|
+
expect((0, field_serializer_1.serializeConnectionField)(connection)).toBe('c=IN IP6 2001:db8::1');
|
|
84
|
+
});
|
|
85
|
+
it('should serialize unicast FQDN connection', () => {
|
|
86
|
+
const connection = (0, fields_1.createConnection)('IN', 'IP4', (0, network_1.createFQDN)('host.example.com'));
|
|
87
|
+
expect((0, field_serializer_1.serializeConnectionField)(connection)).toBe('c=IN IP4 host.example.com');
|
|
88
|
+
});
|
|
89
|
+
it('should serialize IPv4 multicast with TTL', () => {
|
|
90
|
+
const connection = (0, fields_1.createConnection)('IN', 'IP4', (0, network_1.createIP4MulticastAddress)((0, network_1.createIP4Address)('224.2.17.12'), 127));
|
|
91
|
+
expect((0, field_serializer_1.serializeConnectionField)(connection)).toBe('c=IN IP4 224.2.17.12/127');
|
|
92
|
+
});
|
|
93
|
+
it('should serialize IPv4 multicast with TTL and numAddresses', () => {
|
|
94
|
+
const connection = (0, fields_1.createConnection)('IN', 'IP4', (0, network_1.createIP4MulticastAddress)((0, network_1.createIP4Address)('224.2.1.1'), 127, 3));
|
|
95
|
+
expect((0, field_serializer_1.serializeConnectionField)(connection)).toBe('c=IN IP4 224.2.1.1/127/3');
|
|
96
|
+
});
|
|
97
|
+
it('should serialize IPv6 multicast', () => {
|
|
98
|
+
const connection = (0, fields_1.createConnection)('IN', 'IP6', (0, network_1.createIP6MulticastAddress)((0, network_1.createIP6Address)('ff15::101')));
|
|
99
|
+
expect((0, field_serializer_1.serializeConnectionField)(connection)).toBe('c=IN IP6 ff15::101');
|
|
100
|
+
});
|
|
101
|
+
it('should serialize IPv6 multicast with numAddresses', () => {
|
|
102
|
+
const connection = (0, fields_1.createConnection)('IN', 'IP6', (0, network_1.createIP6MulticastAddress)((0, network_1.createIP6Address)('ff15::101'), 2));
|
|
103
|
+
expect((0, field_serializer_1.serializeConnectionField)(connection)).toBe('c=IN IP6 ff15::101/2');
|
|
104
|
+
});
|
|
105
|
+
it('should serialize FQDN multicast with TTL', () => {
|
|
106
|
+
const connection = (0, fields_1.createConnection)('IN', 'IP4', (0, network_1.createFQDNMulticastAddress)((0, network_1.createFQDN)('mcast.example.com'), 127));
|
|
107
|
+
expect((0, field_serializer_1.serializeConnectionField)(connection)).toBe('c=IN IP4 mcast.example.com/127');
|
|
108
|
+
});
|
|
109
|
+
it('should serialize FQDN multicast with TTL and numAddresses', () => {
|
|
110
|
+
const connection = (0, fields_1.createConnection)('IN', 'IP4', (0, network_1.createFQDNMulticastAddress)((0, network_1.createFQDN)('mcast.example.com'), 127, 2));
|
|
111
|
+
expect((0, field_serializer_1.serializeConnectionField)(connection)).toBe('c=IN IP4 mcast.example.com/127/2');
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
describe('serializeConnectionAddress', () => {
|
|
115
|
+
it('should serialize unicast address', () => {
|
|
116
|
+
expect((0, field_serializer_1.serializeConnectionAddress)((0, network_1.createIP4Address)('192.168.1.1'))).toBe('192.168.1.1');
|
|
117
|
+
});
|
|
118
|
+
it('should serialize IPv4 multicast address', () => {
|
|
119
|
+
const addr = (0, network_1.createIP4MulticastAddress)((0, network_1.createIP4Address)('224.0.0.1'), 64);
|
|
120
|
+
expect((0, field_serializer_1.serializeConnectionAddress)(addr)).toBe('224.0.0.1/64');
|
|
121
|
+
});
|
|
122
|
+
it('should serialize IPv6 multicast address', () => {
|
|
123
|
+
const addr = (0, network_1.createIP6MulticastAddress)((0, network_1.createIP6Address)('ff02::1'));
|
|
124
|
+
expect((0, field_serializer_1.serializeConnectionAddress)(addr)).toBe('ff02::1');
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
describe('serializeBandwidthField', () => {
|
|
128
|
+
it('should serialize CT bandwidth', () => {
|
|
129
|
+
const bw = (0, fields_1.createBandwidth)('CT', 128);
|
|
130
|
+
expect((0, field_serializer_1.serializeBandwidthField)(bw)).toBe('b=CT:128');
|
|
131
|
+
});
|
|
132
|
+
it('should serialize AS bandwidth', () => {
|
|
133
|
+
const bw = (0, fields_1.createBandwidth)('AS', 64);
|
|
134
|
+
expect((0, field_serializer_1.serializeBandwidthField)(bw)).toBe('b=AS:64');
|
|
135
|
+
});
|
|
136
|
+
it('should serialize zero bandwidth', () => {
|
|
137
|
+
const bw = (0, fields_1.createBandwidth)('AS', 0);
|
|
138
|
+
expect((0, field_serializer_1.serializeBandwidthField)(bw)).toBe('b=AS:0');
|
|
139
|
+
});
|
|
140
|
+
it('should serialize extension bandwidth type', () => {
|
|
141
|
+
const bw = (0, fields_1.createBandwidth)('X-YZ', 1000);
|
|
142
|
+
expect((0, field_serializer_1.serializeBandwidthField)(bw)).toBe('b=X-YZ:1000');
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe('serializeKeyField', () => {
|
|
146
|
+
it('should serialize clear key', () => {
|
|
147
|
+
expect((0, field_serializer_1.serializeKeyField)('clear:mypassword')).toBe('k=clear:mypassword');
|
|
148
|
+
});
|
|
149
|
+
it('should serialize base64 key', () => {
|
|
150
|
+
expect((0, field_serializer_1.serializeKeyField)('base64:dGVzdA==')).toBe('k=base64:dGVzdA==');
|
|
151
|
+
});
|
|
152
|
+
it('should serialize URI key', () => {
|
|
153
|
+
expect((0, field_serializer_1.serializeKeyField)('uri:https://example.com/key')).toBe('k=uri:https://example.com/key');
|
|
154
|
+
});
|
|
155
|
+
it('should serialize prompt key', () => {
|
|
156
|
+
expect((0, field_serializer_1.serializeKeyField)('prompt')).toBe('k=prompt');
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-serializer.test.d.ts","sourceRoot":"","sources":["../../../../tests/unit/serializer/media-serializer.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tests for media-serializer.ts
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const media_serializer_1 = require("../../../src/serializer/media-serializer");
|
|
7
|
+
const media_1 = require("../../../src/types/media");
|
|
8
|
+
const fields_1 = require("../../../src/types/fields");
|
|
9
|
+
const network_1 = require("../../../src/types/network");
|
|
10
|
+
const attributes_1 = require("../../../src/types/attributes");
|
|
11
|
+
describe('media-serializer', () => {
|
|
12
|
+
describe('serializeMediaField', () => {
|
|
13
|
+
it('should serialize audio media with simple port', () => {
|
|
14
|
+
const media = (0, media_1.createMedia)('audio', (0, media_1.createSimplePort)(49170), 'RTP/AVP', ['0', '8', '101']);
|
|
15
|
+
expect((0, media_serializer_1.serializeMediaField)(media)).toBe('m=audio 49170 RTP/AVP 0 8 101');
|
|
16
|
+
});
|
|
17
|
+
it('should serialize video media', () => {
|
|
18
|
+
const media = (0, media_1.createMedia)('video', (0, media_1.createSimplePort)(51372), 'RTP/AVP', ['99']);
|
|
19
|
+
expect((0, media_serializer_1.serializeMediaField)(media)).toBe('m=video 51372 RTP/AVP 99');
|
|
20
|
+
});
|
|
21
|
+
it('should serialize media with port range', () => {
|
|
22
|
+
const media = (0, media_1.createMedia)('audio', (0, media_1.createPortRange)(49170, 2), 'RTP/AVP', ['0']);
|
|
23
|
+
expect((0, media_serializer_1.serializeMediaField)(media)).toBe('m=audio 49170/2 RTP/AVP 0');
|
|
24
|
+
});
|
|
25
|
+
it('should serialize text media', () => {
|
|
26
|
+
const media = (0, media_1.createMedia)('text', (0, media_1.createSimplePort)(49174), 'RTP/AVP', ['96']);
|
|
27
|
+
expect((0, media_serializer_1.serializeMediaField)(media)).toBe('m=text 49174 RTP/AVP 96');
|
|
28
|
+
});
|
|
29
|
+
it('should serialize application media', () => {
|
|
30
|
+
const media = (0, media_1.createMedia)('application', (0, media_1.createSimplePort)(49175), 'udp', ['wb']);
|
|
31
|
+
expect((0, media_serializer_1.serializeMediaField)(media)).toBe('m=application 49175 udp wb');
|
|
32
|
+
});
|
|
33
|
+
it('should serialize media with port 0 (disabled)', () => {
|
|
34
|
+
const media = (0, media_1.createMedia)('audio', (0, media_1.createSimplePort)(0), 'RTP/AVP', ['0']);
|
|
35
|
+
expect((0, media_serializer_1.serializeMediaField)(media)).toBe('m=audio 0 RTP/AVP 0');
|
|
36
|
+
});
|
|
37
|
+
it('should serialize media with multiple formats', () => {
|
|
38
|
+
const media = (0, media_1.createMedia)('audio', (0, media_1.createSimplePort)(49170), 'RTP/AVP', ['0', '8', '3', '18', '101']);
|
|
39
|
+
expect((0, media_serializer_1.serializeMediaField)(media)).toBe('m=audio 49170 RTP/AVP 0 8 3 18 101');
|
|
40
|
+
});
|
|
41
|
+
it('should serialize media with RTP/SAVP protocol', () => {
|
|
42
|
+
const media = (0, media_1.createMedia)('audio', (0, media_1.createSimplePort)(49170), 'RTP/SAVP', ['0']);
|
|
43
|
+
expect((0, media_serializer_1.serializeMediaField)(media)).toBe('m=audio 49170 RTP/SAVP 0');
|
|
44
|
+
});
|
|
45
|
+
it('should serialize media with RTP/SAVPF protocol', () => {
|
|
46
|
+
const media = (0, media_1.createMedia)('audio', (0, media_1.createSimplePort)(49170), 'RTP/SAVPF', ['111']);
|
|
47
|
+
expect((0, media_serializer_1.serializeMediaField)(media)).toBe('m=audio 49170 RTP/SAVPF 111');
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe('serializeMediaDescription', () => {
|
|
51
|
+
it('should serialize minimal media description (m= only)', () => {
|
|
52
|
+
const md = (0, media_1.createMediaDescription)((0, media_1.createMedia)('audio', (0, media_1.createSimplePort)(49170), 'RTP/AVP', ['0']));
|
|
53
|
+
const lines = (0, media_serializer_1.serializeMediaDescription)(md);
|
|
54
|
+
expect(lines).toHaveLength(1);
|
|
55
|
+
expect(lines[0]).toBe('m=audio 49170 RTP/AVP 0');
|
|
56
|
+
});
|
|
57
|
+
it('should serialize media description with information', () => {
|
|
58
|
+
const md = (0, media_1.createMediaDescription)((0, media_1.createMedia)('audio', (0, media_1.createSimplePort)(49170), 'RTP/AVP', ['0']), { information: 'Audio Stream' });
|
|
59
|
+
const lines = (0, media_serializer_1.serializeMediaDescription)(md);
|
|
60
|
+
expect(lines).toHaveLength(2);
|
|
61
|
+
expect(lines[0]).toBe('m=audio 49170 RTP/AVP 0');
|
|
62
|
+
expect(lines[1]).toBe('i=Audio Stream');
|
|
63
|
+
});
|
|
64
|
+
it('should serialize media description with connection', () => {
|
|
65
|
+
const md = (0, media_1.createMediaDescription)((0, media_1.createMedia)('audio', (0, media_1.createSimplePort)(49170), 'RTP/AVP', ['0']), {
|
|
66
|
+
connections: [
|
|
67
|
+
(0, fields_1.createConnection)('IN', 'IP4', (0, network_1.createIP4Address)('192.168.1.100')),
|
|
68
|
+
],
|
|
69
|
+
});
|
|
70
|
+
const lines = (0, media_serializer_1.serializeMediaDescription)(md);
|
|
71
|
+
expect(lines).toHaveLength(2);
|
|
72
|
+
expect(lines[0]).toBe('m=audio 49170 RTP/AVP 0');
|
|
73
|
+
expect(lines[1]).toBe('c=IN IP4 192.168.1.100');
|
|
74
|
+
});
|
|
75
|
+
it('should serialize media description with multiple connections', () => {
|
|
76
|
+
const md = (0, media_1.createMediaDescription)((0, media_1.createMedia)('audio', (0, media_1.createSimplePort)(49170), 'RTP/AVP', ['0']), {
|
|
77
|
+
connections: [
|
|
78
|
+
(0, fields_1.createConnection)('IN', 'IP4', (0, network_1.createIP4Address)('192.168.1.100')),
|
|
79
|
+
(0, fields_1.createConnection)('IN', 'IP4', (0, network_1.createIP4Address)('192.168.1.101')),
|
|
80
|
+
],
|
|
81
|
+
});
|
|
82
|
+
const lines = (0, media_serializer_1.serializeMediaDescription)(md);
|
|
83
|
+
expect(lines).toHaveLength(3);
|
|
84
|
+
expect(lines[1]).toBe('c=IN IP4 192.168.1.100');
|
|
85
|
+
expect(lines[2]).toBe('c=IN IP4 192.168.1.101');
|
|
86
|
+
});
|
|
87
|
+
it('should serialize media description with bandwidth', () => {
|
|
88
|
+
const md = (0, media_1.createMediaDescription)((0, media_1.createMedia)('audio', (0, media_1.createSimplePort)(49170), 'RTP/AVP', ['0']), { bandwidths: [(0, fields_1.createBandwidth)('AS', 64)] });
|
|
89
|
+
const lines = (0, media_serializer_1.serializeMediaDescription)(md);
|
|
90
|
+
expect(lines).toHaveLength(2);
|
|
91
|
+
expect(lines[1]).toBe('b=AS:64');
|
|
92
|
+
});
|
|
93
|
+
it('should serialize media description with key', () => {
|
|
94
|
+
const md = (0, media_1.createMediaDescription)((0, media_1.createMedia)('audio', (0, media_1.createSimplePort)(49170), 'RTP/AVP', ['0']), { key: 'clear:mykey123' });
|
|
95
|
+
const lines = (0, media_serializer_1.serializeMediaDescription)(md);
|
|
96
|
+
expect(lines).toHaveLength(2);
|
|
97
|
+
expect(lines[1]).toBe('k=clear:mykey123');
|
|
98
|
+
});
|
|
99
|
+
it('should serialize media description with attributes', () => {
|
|
100
|
+
const md = (0, media_1.createMediaDescription)((0, media_1.createMedia)('audio', (0, media_1.createSimplePort)(49170), 'RTP/AVP', ['0', '8']), {
|
|
101
|
+
attributes: [
|
|
102
|
+
(0, attributes_1.createRtpmap)(0, 'PCMU', 8000),
|
|
103
|
+
(0, attributes_1.createRtpmap)(8, 'PCMA', 8000),
|
|
104
|
+
(0, attributes_1.createPtime)(20),
|
|
105
|
+
(0, attributes_1.createSendrecv)(),
|
|
106
|
+
],
|
|
107
|
+
});
|
|
108
|
+
const lines = (0, media_serializer_1.serializeMediaDescription)(md);
|
|
109
|
+
expect(lines).toHaveLength(5);
|
|
110
|
+
expect(lines[1]).toBe('a=rtpmap:0 PCMU/8000');
|
|
111
|
+
expect(lines[2]).toBe('a=rtpmap:8 PCMA/8000');
|
|
112
|
+
expect(lines[3]).toBe('a=ptime:20');
|
|
113
|
+
expect(lines[4]).toBe('a=sendrecv');
|
|
114
|
+
});
|
|
115
|
+
it('should serialize complete media description with all fields', () => {
|
|
116
|
+
const md = (0, media_1.createMediaDescription)((0, media_1.createMedia)('audio', (0, media_1.createSimplePort)(49170), 'RTP/AVP', ['0']), {
|
|
117
|
+
information: 'Voice',
|
|
118
|
+
connections: [(0, fields_1.createConnection)('IN', 'IP4', (0, network_1.createIP4Address)('192.168.1.100'))],
|
|
119
|
+
bandwidths: [(0, fields_1.createBandwidth)('AS', 64)],
|
|
120
|
+
key: 'clear:key',
|
|
121
|
+
attributes: [(0, attributes_1.createRtpmap)(0, 'PCMU', 8000), (0, attributes_1.createSendrecv)()],
|
|
122
|
+
});
|
|
123
|
+
const lines = (0, media_serializer_1.serializeMediaDescription)(md);
|
|
124
|
+
expect(lines).toHaveLength(7);
|
|
125
|
+
expect(lines[0]).toBe('m=audio 49170 RTP/AVP 0');
|
|
126
|
+
expect(lines[1]).toBe('i=Voice');
|
|
127
|
+
expect(lines[2]).toBe('c=IN IP4 192.168.1.100');
|
|
128
|
+
expect(lines[3]).toBe('b=AS:64');
|
|
129
|
+
expect(lines[4]).toBe('k=clear:key');
|
|
130
|
+
expect(lines[5]).toBe('a=rtpmap:0 PCMU/8000');
|
|
131
|
+
expect(lines[6]).toBe('a=sendrecv');
|
|
132
|
+
});
|
|
133
|
+
it('should serialize media description with correct field ordering', () => {
|
|
134
|
+
const md = (0, media_1.createMediaDescription)((0, media_1.createMedia)('video', (0, media_1.createSimplePort)(51372), 'RTP/AVP', ['99']), {
|
|
135
|
+
information: 'Video Stream',
|
|
136
|
+
connections: [(0, fields_1.createConnection)('IN', 'IP4', (0, network_1.createIP4Address)('192.168.1.100'))],
|
|
137
|
+
bandwidths: [(0, fields_1.createBandwidth)('AS', 384)],
|
|
138
|
+
key: 'prompt',
|
|
139
|
+
attributes: [
|
|
140
|
+
(0, attributes_1.createRtpmap)(99, 'H264', 90000),
|
|
141
|
+
(0, attributes_1.createFmtp)('99', 'profile-level-id=42e01f'),
|
|
142
|
+
],
|
|
143
|
+
});
|
|
144
|
+
const lines = (0, media_serializer_1.serializeMediaDescription)(md);
|
|
145
|
+
expect(lines).toHaveLength(7);
|
|
146
|
+
expect(lines[0]).toBe('m=video 51372 RTP/AVP 99');
|
|
147
|
+
expect(lines[1]).toBe('i=Video Stream');
|
|
148
|
+
expect(lines[2]).toBe('c=IN IP4 192.168.1.100');
|
|
149
|
+
expect(lines[3]).toBe('b=AS:384');
|
|
150
|
+
expect(lines[4]).toBe('k=prompt');
|
|
151
|
+
expect(lines[5]).toBe('a=rtpmap:99 H264/90000');
|
|
152
|
+
expect(lines[6]).toBe('a=fmtp:99 profile-level-id=42e01f');
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-serializer.test.d.ts","sourceRoot":"","sources":["../../../../tests/unit/serializer/session-serializer.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|