1 | 'use strict'
|
---|
2 |
|
---|
3 | const test = require('tape')
|
---|
4 | const URI = require('../')
|
---|
5 |
|
---|
6 | test('URI Serialize', (t) => {
|
---|
7 | let components = {
|
---|
8 | scheme: undefined,
|
---|
9 | userinfo: undefined,
|
---|
10 | host: undefined,
|
---|
11 | port: undefined,
|
---|
12 | path: undefined,
|
---|
13 | query: undefined,
|
---|
14 | fragment: undefined
|
---|
15 | }
|
---|
16 | t.equal(URI.serialize(components), '', 'Undefined Components')
|
---|
17 |
|
---|
18 | components = {
|
---|
19 | scheme: '',
|
---|
20 | userinfo: '',
|
---|
21 | host: '',
|
---|
22 | port: 0,
|
---|
23 | path: '',
|
---|
24 | query: '',
|
---|
25 | fragment: ''
|
---|
26 | }
|
---|
27 | t.equal(URI.serialize(components), '//@:0?#', 'Empty Components')
|
---|
28 |
|
---|
29 | components = {
|
---|
30 | scheme: 'uri',
|
---|
31 | userinfo: 'foo:bar',
|
---|
32 | host: 'example.com',
|
---|
33 | port: 1,
|
---|
34 | path: 'path',
|
---|
35 | query: 'query',
|
---|
36 | fragment: 'fragment'
|
---|
37 | }
|
---|
38 | t.equal(URI.serialize(components), 'uri://foo:bar@example.com:1/path?query#fragment', 'All Components')
|
---|
39 |
|
---|
40 | components = {
|
---|
41 | scheme: 'uri',
|
---|
42 | host: 'example.com',
|
---|
43 | port: '9000'
|
---|
44 | }
|
---|
45 | t.equal(URI.serialize(components), 'uri://example.com:9000', 'String port')
|
---|
46 |
|
---|
47 | t.equal(URI.serialize({ path: '//path' }), '/%2Fpath', 'Double slash path')
|
---|
48 | t.equal(URI.serialize({ path: 'foo:bar' }), 'foo%3Abar', 'Colon path')
|
---|
49 | t.equal(URI.serialize({ path: '?query' }), '%3Fquery', 'Query path')
|
---|
50 |
|
---|
51 | t.equal(URI.serialize({ host: '10.10.10.10' }), '//10.10.10.10', 'IPv4address')
|
---|
52 |
|
---|
53 | // mixed IPv4address & reg-name, example from terion-name (https://github.com/garycourt/uri-js/issues/4)
|
---|
54 | t.equal(URI.serialize({ host: '10.10.10.10.example.com' }), '//10.10.10.10.example.com', 'Mixed IPv4address & reg-name')
|
---|
55 |
|
---|
56 | // IPv6address
|
---|
57 | t.equal(URI.serialize({ host: '2001:db8::7' }), '//[2001:db8::7]', 'IPv6 Host')
|
---|
58 | t.equal(URI.serialize({ host: '::ffff:129.144.52.38' }), '//[::ffff:129.144.52.38]', 'IPv6 Mixed Host')
|
---|
59 | t.equal(URI.serialize({ host: '2606:2800:220:1:248:1893:25c8:1946' }), '//[2606:2800:220:1:248:1893:25c8:1946]', 'IPv6 Full Host')
|
---|
60 |
|
---|
61 | // IPv6address with zone identifier, RFC 6874
|
---|
62 | t.equal(URI.serialize({ host: 'fe80::a%en1' }), '//[fe80::a%25en1]', 'IPv6 Zone Unescaped Host')
|
---|
63 | t.equal(URI.serialize({ host: 'fe80::a%25en1' }), '//[fe80::a%25en1]', 'IPv6 Zone Escaped Host')
|
---|
64 |
|
---|
65 | t.end()
|
---|
66 | })
|
---|
67 |
|
---|
68 | test('WS serialize', (t) => {
|
---|
69 | t.equal(URI.serialize({ scheme: 'ws' }), 'ws:')
|
---|
70 | t.equal(URI.serialize({ scheme: 'ws', host: 'example.com' }), 'ws://example.com')
|
---|
71 | t.equal(URI.serialize({ scheme: 'ws', resourceName: '/' }), 'ws:')
|
---|
72 | t.equal(URI.serialize({ scheme: 'ws', resourceName: '/foo' }), 'ws:/foo')
|
---|
73 | t.equal(URI.serialize({ scheme: 'ws', resourceName: '/foo?bar' }), 'ws:/foo?bar')
|
---|
74 | t.equal(URI.serialize({ scheme: 'ws', secure: false }), 'ws:')
|
---|
75 | t.equal(URI.serialize({ scheme: 'ws', secure: true }), 'wss:')
|
---|
76 | t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo' }), 'ws://example.com/foo')
|
---|
77 | t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo?bar' }), 'ws://example.com/foo?bar')
|
---|
78 | t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', secure: false }), 'ws://example.com')
|
---|
79 | t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', secure: true }), 'wss://example.com')
|
---|
80 | t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo?bar', secure: false }), 'ws://example.com/foo?bar')
|
---|
81 | t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo?bar', secure: true }), 'wss://example.com/foo?bar')
|
---|
82 | t.end()
|
---|
83 | })
|
---|
84 |
|
---|
85 | test('WSS serialize', (t) => {
|
---|
86 | t.equal(URI.serialize({ scheme: 'wss' }), 'wss:')
|
---|
87 | t.equal(URI.serialize({ scheme: 'wss', host: 'example.com' }), 'wss://example.com')
|
---|
88 | t.equal(URI.serialize({ scheme: 'wss', resourceName: '/' }), 'wss:')
|
---|
89 | t.equal(URI.serialize({ scheme: 'wss', resourceName: '/foo' }), 'wss:/foo')
|
---|
90 | t.equal(URI.serialize({ scheme: 'wss', resourceName: '/foo?bar' }), 'wss:/foo?bar')
|
---|
91 | t.equal(URI.serialize({ scheme: 'wss', secure: false }), 'ws:')
|
---|
92 | t.equal(URI.serialize({ scheme: 'wss', secure: true }), 'wss:')
|
---|
93 | t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', resourceName: '/foo' }), 'wss://example.com/foo')
|
---|
94 | t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', resourceName: '/foo?bar' }), 'wss://example.com/foo?bar')
|
---|
95 | t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', secure: false }), 'ws://example.com')
|
---|
96 | t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', secure: true }), 'wss://example.com')
|
---|
97 | t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', resourceName: '/foo?bar', secure: false }), 'ws://example.com/foo?bar')
|
---|
98 | t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', resourceName: '/foo?bar', secure: true }), 'wss://example.com/foo?bar')
|
---|
99 |
|
---|
100 | t.end()
|
---|
101 | })
|
---|
102 |
|
---|
103 | test('URN serialize', (t) => {
|
---|
104 | // example from RFC 2141
|
---|
105 | const components = {
|
---|
106 | scheme: 'urn',
|
---|
107 | nid: 'foo',
|
---|
108 | nss: 'a123,456'
|
---|
109 | }
|
---|
110 | t.equal(URI.serialize(components), 'urn:foo:a123,456')
|
---|
111 | // example from RFC 4122
|
---|
112 | let uuidcomponents = {
|
---|
113 | scheme: 'urn',
|
---|
114 | nid: 'uuid',
|
---|
115 | uuid: 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6'
|
---|
116 | }
|
---|
117 | t.equal(URI.serialize(uuidcomponents), 'urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6')
|
---|
118 |
|
---|
119 | uuidcomponents = {
|
---|
120 | scheme: 'urn',
|
---|
121 | nid: 'uuid',
|
---|
122 | uuid: 'notauuid-7dec-11d0-a765-00a0c91e6bf6'
|
---|
123 | }
|
---|
124 | t.equal(URI.serialize(uuidcomponents), 'urn:uuid:notauuid-7dec-11d0-a765-00a0c91e6bf6')
|
---|
125 | t.end()
|
---|
126 | })
|
---|
127 | test('URN NID Override', (t) => {
|
---|
128 | let components = URI.parse('urn:foo:f81d4fae-7dec-11d0-a765-00a0c91e6bf6', { nid: 'uuid' })
|
---|
129 | t.equal(components.error, undefined, 'errors')
|
---|
130 | t.equal(components.scheme, 'urn', 'scheme')
|
---|
131 | t.equal(components.path, undefined, 'path')
|
---|
132 | t.equal(components.nid, 'foo', 'nid')
|
---|
133 | t.equal(components.nss, undefined, 'nss')
|
---|
134 | t.equal(components.uuid, 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6', 'uuid')
|
---|
135 |
|
---|
136 | components = {
|
---|
137 | scheme: 'urn',
|
---|
138 | nid: 'foo',
|
---|
139 | uuid: 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6'
|
---|
140 | }
|
---|
141 | t.equal(URI.serialize(components, { nid: 'uuid' }), 'urn:foo:f81d4fae-7dec-11d0-a765-00a0c91e6bf6')
|
---|
142 | t.end()
|
---|
143 | })
|
---|