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.
		
		
		
		
		
			
		
			
				
					130 lines
				
				3.8 KiB
			
		
		
			
		
	
	
					130 lines
				
				3.8 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | 
 | ||
|  | const tap = require('tap') | ||
|  | const test = tap.test | ||
|  | const fastifyURI = require('../') | ||
|  | const urijs = require('uri-js') | ||
|  | 
 | ||
|  | test('compatibility Parse', (t) => { | ||
|  |   const toParse = [ | ||
|  |     '//www.g.com/error\n/bleh/bleh', | ||
|  |     'https://fastify.org', | ||
|  |     '//10.10.10.10', | ||
|  |     '//10.10.000.10', | ||
|  |     '//[2001:db8::7%en0]', | ||
|  |     '//[2001:dbZ::1]:80', | ||
|  |     '//[2001:db8::1]:80', | ||
|  |     '//[2001:db8::001]:80', | ||
|  |     'uri://user:pass@example.com:123/one/two.three?q1=a1&q2=a2#body', | ||
|  |     'http://user:pass@example.com:123/one/space in.url?q1=a1&q2=a2#body', | ||
|  |     '//[::ffff:129.144.52.38]', | ||
|  |     'uri://10.10.10.10.example.com/en/process', | ||
|  |     '//[2606:2800:220:1:248:1893:25c8:1946]/test', | ||
|  |     'ws://example.com/chat', | ||
|  |     'ws://example.com/foo?bar=baz', | ||
|  |     'wss://example.com/?bar=baz', | ||
|  |     'wss://example.com/chat', | ||
|  |     'wss://example.com/foo?bar=baz', | ||
|  |     'wss://example.com/?bar=baz', | ||
|  |     'urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6', | ||
|  |     'urn:uuid:notauuid-7dec-11d0-a765-00a0c91e6bf6', | ||
|  |     'urn:example:%D0%B0123,z456', | ||
|  |     '//[2606:2800:220:1:248:1893:25c8:1946:43209]', | ||
|  |     'http://foo.bar', | ||
|  |     'http://', | ||
|  |     '#/$defs/stringMap', | ||
|  |     '#/$defs/string%20Map', | ||
|  |     '#/$defs/string Map', | ||
|  |     '//?json=%7B%22foo%22%3A%22bar%22%7D' | ||
|  |     //  'mailto:chris@example.com'-203845,
 | ||
|  |     //  'mailto:infobot@example.com?subject=current-issue',
 | ||
|  |     //  'mailto:infobot@example.com?body=send%20current-issue',
 | ||
|  |     //  'mailto:infobot@example.com?body=send%20current-issue%0D%0Asend%20index',
 | ||
|  |     //  'mailto:list@example.org?In-Reply-To=%3C3469A91.D10AF4C@example.com%3E',
 | ||
|  |     //  'mailto:majordomo@example.com?body=subscribe%20bamboo-l',
 | ||
|  |     //  'mailto:joe@example.com?cc=bob@example.com&body=hello',
 | ||
|  |     //  'mailto:gorby%25kremvax@example.com',
 | ||
|  |     //  'mailto:unlikely%3Faddress@example.com?blat=foop',
 | ||
|  |     //  'mailto:Mike%26family@example.org',
 | ||
|  |     //  'mailto:%22not%40me%22@example.org',
 | ||
|  |     //  'mailto:%22oh%5C%5Cno%22@example.org',
 | ||
|  |     //  'mailto:%22%5C%5C%5C%22it\'s%5C%20ugly%5C%5C%5C%22%22@example.org',
 | ||
|  |     //  'mailto:user@example.org?subject=caf%C3%A9',
 | ||
|  |     //  'mailto:user@example.org?subject=%3D%3Futf-8%3FQ%3Fcaf%3DC3%3DA9%3F%3D',
 | ||
|  |     //  'mailto:user@example.org?subject=%3D%3Fiso-8859-1%3FQ%3Fcaf%3DE9%3F%3D',
 | ||
|  |     //  'mailto:user@example.org?subject=caf%C3%A9&body=caf%C3%A9',
 | ||
|  |     //  'mailto:user@%E7%B4%8D%E8%B1%86.example.org?subject=Test&body=NATTO'
 | ||
|  |   ] | ||
|  |   toParse.forEach((x) => { | ||
|  |     t.same(fastifyURI.parse(x), urijs.parse(x), 'Compatibility parse: ' + x) | ||
|  |   }) | ||
|  |   t.end() | ||
|  | }) | ||
|  | 
 | ||
|  | test('compatibility serialize', (t) => { | ||
|  |   const toSerialize = [ | ||
|  |     { host: '10.10.10.10.example.com' }, | ||
|  |     { host: '2001:db8::7' }, | ||
|  |     { host: '::ffff:129.144.52.38' }, | ||
|  |     { host: '2606:2800:220:1:248:1893:25c8:1946' }, | ||
|  |     { host: '10.10.10.10.example.com' }, | ||
|  |     { host: '10.10.10.10' }, | ||
|  |     { path: '?query' }, | ||
|  |     { path: 'foo:bar' }, | ||
|  |     { path: '//path' }, | ||
|  |     { | ||
|  |       scheme: 'uri', | ||
|  |       host: 'example.com', | ||
|  |       port: '9000' | ||
|  |     }, | ||
|  |     { | ||
|  |       scheme: 'uri', | ||
|  |       userinfo: 'foo:bar', | ||
|  |       host: 'example.com', | ||
|  |       port: 1, | ||
|  |       path: 'path', | ||
|  |       query: 'query', | ||
|  |       fragment: 'fragment' | ||
|  |     }, | ||
|  |     { | ||
|  |       scheme: '', | ||
|  |       userinfo: '', | ||
|  |       host: '', | ||
|  |       port: 0, | ||
|  |       path: '', | ||
|  |       query: '', | ||
|  |       fragment: '' | ||
|  |     }, | ||
|  |     { | ||
|  |       scheme: undefined, | ||
|  |       userinfo: undefined, | ||
|  |       host: undefined, | ||
|  |       port: undefined, | ||
|  |       path: undefined, | ||
|  |       query: undefined, | ||
|  |       fragment: undefined | ||
|  |     }, | ||
|  |     { host: 'fe80::a%en1' }, | ||
|  |     { host: 'fe80::a%25en1' }, | ||
|  |     { | ||
|  |       scheme: 'ws', | ||
|  |       host: 'example.com', | ||
|  |       resourceName: '/foo?bar', | ||
|  |       secure: true | ||
|  |     }, | ||
|  |     { | ||
|  |       scheme: 'scheme', | ||
|  |       path: 'with:colon' | ||
|  |     } | ||
|  |   ] | ||
|  |   toSerialize.forEach((x) => { | ||
|  |     const r = JSON.stringify(x) | ||
|  |     t.same( | ||
|  |       fastifyURI.serialize(x), | ||
|  |       urijs.serialize(x), | ||
|  |       'Compatibility serialize: ' + JSON.stringify(r) | ||
|  |     ) | ||
|  |   }) | ||
|  |   t.end() | ||
|  | }) |