You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					145 lines
				
				5.8 KiB
			
		
		
			
		
	
	
					145 lines
				
				5.8 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const tap = require('tap')
							 | 
						||
| 
								 | 
							
								const test = tap.test
							 | 
						||
| 
								 | 
							
								const URI = require('../')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('URI Serialize', (t) => {
							 | 
						||
| 
								 | 
							
								  let components = {
							 | 
						||
| 
								 | 
							
								    scheme: undefined,
							 | 
						||
| 
								 | 
							
								    userinfo: undefined,
							 | 
						||
| 
								 | 
							
								    host: undefined,
							 | 
						||
| 
								 | 
							
								    port: undefined,
							 | 
						||
| 
								 | 
							
								    path: undefined,
							 | 
						||
| 
								 | 
							
								    query: undefined,
							 | 
						||
| 
								 | 
							
								    fragment: undefined
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize(components), '', 'Undefined Components')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  components = {
							 | 
						||
| 
								 | 
							
								    scheme: '',
							 | 
						||
| 
								 | 
							
								    userinfo: '',
							 | 
						||
| 
								 | 
							
								    host: '',
							 | 
						||
| 
								 | 
							
								    port: 0,
							 | 
						||
| 
								 | 
							
								    path: '',
							 | 
						||
| 
								 | 
							
								    query: '',
							 | 
						||
| 
								 | 
							
								    fragment: ''
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize(components), '//@:0?#', 'Empty Components')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  components = {
							 | 
						||
| 
								 | 
							
								    scheme: 'uri',
							 | 
						||
| 
								 | 
							
								    userinfo: 'foo:bar',
							 | 
						||
| 
								 | 
							
								    host: 'example.com',
							 | 
						||
| 
								 | 
							
								    port: 1,
							 | 
						||
| 
								 | 
							
								    path: 'path',
							 | 
						||
| 
								 | 
							
								    query: 'query',
							 | 
						||
| 
								 | 
							
								    fragment: 'fragment'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize(components), 'uri://foo:bar@example.com:1/path?query#fragment', 'All Components')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  components = {
							 | 
						||
| 
								 | 
							
								    scheme: 'uri',
							 | 
						||
| 
								 | 
							
								    host: 'example.com',
							 | 
						||
| 
								 | 
							
								    port: '9000'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize(components), 'uri://example.com:9000', 'String port')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ path: '//path' }), '/%2Fpath', 'Double slash path')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ path: 'foo:bar' }), 'foo%3Abar', 'Colon path')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ path: '?query' }), '%3Fquery', 'Query path')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ host: '10.10.10.10' }), '//10.10.10.10', 'IPv4address')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // mixed IPv4address & reg-name, example from terion-name (https://github.com/garycourt/uri-js/issues/4)
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ host: '10.10.10.10.example.com' }), '//10.10.10.10.example.com', 'Mixed IPv4address & reg-name')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // IPv6address
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ host: '2001:db8::7' }), '//[2001:db8::7]', 'IPv6 Host')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ host: '::ffff:129.144.52.38' }), '//[::ffff:129.144.52.38]', 'IPv6 Mixed Host')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ host: '2606:2800:220:1:248:1893:25c8:1946' }), '//[2606:2800:220:1:248:1893:25c8:1946]', 'IPv6 Full Host')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // IPv6address with zone identifier, RFC 6874
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ host: 'fe80::a%en1' }), '//[fe80::a%25en1]', 'IPv6 Zone Unescaped Host')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ host: 'fe80::a%25en1' }), '//[fe80::a%25en1]', 'IPv6 Zone Escaped Host')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.end()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('WS serialize', (t) => {
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'ws' }), 'ws:')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'ws', host: 'example.com' }), 'ws://example.com')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'ws', resourceName: '/' }), 'ws:')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'ws', resourceName: '/foo' }), 'ws:/foo')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'ws', resourceName: '/foo?bar' }), 'ws:/foo?bar')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'ws', secure: false }), 'ws:')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'ws', secure: true }), 'wss:')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo' }), 'ws://example.com/foo')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo?bar' }), 'ws://example.com/foo?bar')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', secure: false }), 'ws://example.com')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', secure: true }), 'wss://example.com')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo?bar', secure: false }), 'ws://example.com/foo?bar')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'ws', host: 'example.com', resourceName: '/foo?bar', secure: true }), 'wss://example.com/foo?bar')
							 | 
						||
| 
								 | 
							
								  t.end()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('WSS serialize', (t) => {
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'wss' }), 'wss:')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'wss', host: 'example.com' }), 'wss://example.com')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'wss', resourceName: '/' }), 'wss:')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'wss', resourceName: '/foo' }), 'wss:/foo')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'wss', resourceName: '/foo?bar' }), 'wss:/foo?bar')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'wss', secure: false }), 'ws:')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'wss', secure: true }), 'wss:')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', resourceName: '/foo' }), 'wss://example.com/foo')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', resourceName: '/foo?bar' }), 'wss://example.com/foo?bar')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', secure: false }), 'ws://example.com')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', secure: true }), 'wss://example.com')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', resourceName: '/foo?bar', secure: false }), 'ws://example.com/foo?bar')
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize({ scheme: 'wss', host: 'example.com', resourceName: '/foo?bar', secure: true }), 'wss://example.com/foo?bar')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.end()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('URN serialize', (t) => {
							 | 
						||
| 
								 | 
							
								// example from RFC 2141
							 | 
						||
| 
								 | 
							
								  const components = {
							 | 
						||
| 
								 | 
							
								    scheme: 'urn',
							 | 
						||
| 
								 | 
							
								    nid: 'foo',
							 | 
						||
| 
								 | 
							
								    nss: 'a123,456'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize(components), 'urn:foo:a123,456')
							 | 
						||
| 
								 | 
							
								  // example from RFC 4122
							 | 
						||
| 
								 | 
							
								  let uuidcomponents = {
							 | 
						||
| 
								 | 
							
								    scheme: 'urn',
							 | 
						||
| 
								 | 
							
								    nid: 'uuid',
							 | 
						||
| 
								 | 
							
								    uuid: 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize(uuidcomponents), 'urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  uuidcomponents = {
							 | 
						||
| 
								 | 
							
								    scheme: 'urn',
							 | 
						||
| 
								 | 
							
								    nid: 'uuid',
							 | 
						||
| 
								 | 
							
								    uuid: 'notauuid-7dec-11d0-a765-00a0c91e6bf6'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize(uuidcomponents), 'urn:uuid:notauuid-7dec-11d0-a765-00a0c91e6bf6')
							 | 
						||
| 
								 | 
							
								  t.end()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								test('URN NID Override', (t) => {
							 | 
						||
| 
								 | 
							
								  let components = URI.parse('urn:foo:f81d4fae-7dec-11d0-a765-00a0c91e6bf6', { nid: 'uuid' })
							 | 
						||
| 
								 | 
							
								  t.equal(components.error, undefined, 'errors')
							 | 
						||
| 
								 | 
							
								  t.equal(components.scheme, 'urn', 'scheme')
							 | 
						||
| 
								 | 
							
								  t.equal(components.path, undefined, 'path')
							 | 
						||
| 
								 | 
							
								  t.equal(components.nid, 'foo', 'nid')
							 | 
						||
| 
								 | 
							
								  t.equal(components.nss, undefined, 'nss')
							 | 
						||
| 
								 | 
							
								  t.equal(components.uuid, 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6', 'uuid')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  components = {
							 | 
						||
| 
								 | 
							
								    scheme: 'urn',
							 | 
						||
| 
								 | 
							
								    nid: 'foo',
							 | 
						||
| 
								 | 
							
								    uuid: 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  t.equal(URI.serialize(components, { nid: 'uuid' }), 'urn:foo:f81d4fae-7dec-11d0-a765-00a0c91e6bf6')
							 | 
						||
| 
								 | 
							
								  t.end()
							 | 
						||
| 
								 | 
							
								})
							 |