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.
		
		
		
		
		
			
		
			
				
					489 lines
				
				16 KiB
			
		
		
			
		
	
	
					489 lines
				
				16 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const t = require('tap')
							 | 
						||
| 
								 | 
							
								const test = t.test
							 | 
						||
| 
								 | 
							
								const FindMyWay = require('../')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('pretty print - static routes', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const findMyWay = FindMyWay()
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/hello', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/hello/world', () => {})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const tree = findMyWay.prettyPrint()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const expected = `└── /
							 | 
						||
| 
								 | 
							
								    ├── test (GET)
							 | 
						||
| 
								 | 
							
								    │   └── /hello (GET)
							 | 
						||
| 
								 | 
							
								    └── hello/world (GET)
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof tree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(tree, expected)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('pretty print - parametric routes', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const findMyWay = FindMyWay()
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/hello/:world', () => {})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const tree = findMyWay.prettyPrint()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const expected = `└── /
							 | 
						||
| 
								 | 
							
								    ├── test (GET)
							 | 
						||
| 
								 | 
							
								    │   └── /:hello (GET)
							 | 
						||
| 
								 | 
							
								    └── hello/:world (GET)
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof tree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(tree, expected)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('pretty print - mixed parametric routes', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const findMyWay = FindMyWay()
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('POST', '/test/:hello', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello/world', () => {})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const tree = findMyWay.prettyPrint()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const expected = `└── /test (GET)
							 | 
						||
| 
								 | 
							
								    └── /
							 | 
						||
| 
								 | 
							
								        └── :hello (GET)
							 | 
						||
| 
								 | 
							
								            :hello (POST)
							 | 
						||
| 
								 | 
							
								            └── /world (GET)
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof tree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(tree, expected)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('pretty print - wildcard routes', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const findMyWay = FindMyWay()
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/*', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/hello/*', () => {})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const tree = findMyWay.prettyPrint()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const expected = `└── /
							 | 
						||
| 
								 | 
							
								    ├── test (GET)
							 | 
						||
| 
								 | 
							
								    │   └── /* (GET)
							 | 
						||
| 
								 | 
							
								    └── hello/* (GET)
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof tree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(tree, expected)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('pretty print - parametric routes with same parent and followed by a static route which has the same prefix with the former routes', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const findMyWay = FindMyWay()
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/hello/:id', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('POST', '/test/hello/:id', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/helloworld', () => {})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const tree = findMyWay.prettyPrint()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const expected = `└── /test (GET)
							 | 
						||
| 
								 | 
							
								    └── /hello
							 | 
						||
| 
								 | 
							
								        ├── /
							 | 
						||
| 
								 | 
							
								        │   └── :id (GET)
							 | 
						||
| 
								 | 
							
								        │       :id (POST)
							 | 
						||
| 
								 | 
							
								        └── world (GET)
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof tree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(tree, expected)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('pretty print - constrained parametric routes', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const findMyWay = FindMyWay()
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', { constraints: { host: 'auth.fastify.io' } }, () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', { constraints: { version: '1.1.2' } }, () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', { constraints: { version: '2.0.0' } }, () => {})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const tree = findMyWay.prettyPrint()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const expected = `└── /test (GET)
							 | 
						||
| 
								 | 
							
								    /test (GET) {"host":"auth.fastify.io"}
							 | 
						||
| 
								 | 
							
								    └── /:hello (GET)
							 | 
						||
| 
								 | 
							
								        /:hello (GET) {"version":"1.1.2"}
							 | 
						||
| 
								 | 
							
								        /:hello (GET) {"version":"2.0.0"}
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof tree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(tree, expected)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('pretty print - multiple parameters are drawn appropriately', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const findMyWay = FindMyWay()
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', () => {})
							 | 
						||
| 
								 | 
							
								  // routes with a nested parameter (i.e. no handler for the /:param) were breaking the display
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello/there/:ladies', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello/there/:ladies/and/:gents', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/are/:you/:ready/to/:rock', () => {})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const tree = findMyWay.prettyPrint()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const expected = `└── /test (GET)
							 | 
						||
| 
								 | 
							
								    └── /
							 | 
						||
| 
								 | 
							
								        ├── :hello/there/:ladies (GET)
							 | 
						||
| 
								 | 
							
								        │   └── /and/:gents (GET)
							 | 
						||
| 
								 | 
							
								        └── are/:you/:ready/to/:rock (GET)
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof tree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(tree, expected)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('pretty print commonPrefix - use routes array to draw flattened routes', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(4)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const findMyWay = FindMyWay()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/hello', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/testing', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/testing/:param', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('PUT', '/update', () => {})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const radixTree = findMyWay.prettyPrint({ commonPrefix: true })
							 | 
						||
| 
								 | 
							
								  const arrayTree = findMyWay.prettyPrint({ commonPrefix: false })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const radixExpected = `└── /
							 | 
						||
| 
								 | 
							
								    ├── test (GET)
							 | 
						||
| 
								 | 
							
								    │   ├── /hello (GET)
							 | 
						||
| 
								 | 
							
								    │   └── ing (GET)
							 | 
						||
| 
								 | 
							
								    │       └── /:param (GET)
							 | 
						||
| 
								 | 
							
								    └── update (PUT)
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								  const arrayExpected = `└── / (-)
							 | 
						||
| 
								 | 
							
								    ├── test (GET)
							 | 
						||
| 
								 | 
							
								    │   └── /hello (GET)
							 | 
						||
| 
								 | 
							
								    ├── testing (GET)
							 | 
						||
| 
								 | 
							
								    │   └── /:param (GET)
							 | 
						||
| 
								 | 
							
								    └── update (PUT)
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof radixTree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(typeof arrayTree, 'string')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(radixTree, radixExpected)
							 | 
						||
| 
								 | 
							
								  t.equal(arrayTree, arrayExpected)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('pretty print commonPrefix - handle wildcard root', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const findMyWay = FindMyWay()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  findMyWay.on('OPTIONS', '*', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/hello', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/testing', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/testing/:param', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('PUT', '/update', () => {})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const arrayTree = findMyWay.prettyPrint({ commonPrefix: false })
							 | 
						||
| 
								 | 
							
								  const arrayExpected = `├── * (OPTIONS)
							 | 
						||
| 
								 | 
							
								└── / (-)
							 | 
						||
| 
								 | 
							
								    ├── test/hello (GET)
							 | 
						||
| 
								 | 
							
								    ├── testing (GET)
							 | 
						||
| 
								 | 
							
								    │   └── /:param (GET)
							 | 
						||
| 
								 | 
							
								    └── update (PUT)
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof arrayTree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(arrayTree, arrayExpected)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('pretty print commonPrefix - handle constrained routes', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(2)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const findMyWay = FindMyWay()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', { constraints: { host: 'auth.fastify.io' } }, () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('PUT', '/test/:hello', () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', { constraints: { version: '1.1.2' } }, () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', { constraints: { version: '2.0.0' } }, () => {})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const arrayTree = findMyWay.prettyPrint({ commonPrefix: false })
							 | 
						||
| 
								 | 
							
								  const arrayExpected = `└── / (-)
							 | 
						||
| 
								 | 
							
								    └── test (GET)
							 | 
						||
| 
								 | 
							
								        test (GET) {"host":"auth.fastify.io"}
							 | 
						||
| 
								 | 
							
								        └── /:hello (GET, PUT)
							 | 
						||
| 
								 | 
							
								            /:hello (GET) {"version":"1.1.2"}
							 | 
						||
| 
								 | 
							
								            /:hello (GET) {"version":"2.0.0"}
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								  t.equal(typeof arrayTree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(arrayTree, arrayExpected)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('pretty print includeMeta - commonPrefix: true', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(6)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const findMyWay = FindMyWay()
							 | 
						||
| 
								 | 
							
								  const namedFunction = () => {}
							 | 
						||
| 
								 | 
							
								  const store = {
							 | 
						||
| 
								 | 
							
								    onRequest: [() => {}, namedFunction],
							 | 
						||
| 
								 | 
							
								    onTimeout: [() => {}],
							 | 
						||
| 
								 | 
							
								    genericMeta: 'meta',
							 | 
						||
| 
								 | 
							
								    mixedMeta: ['mixed items', { an: 'object' }],
							 | 
						||
| 
								 | 
							
								    objectMeta: { one: '1', two: 2 },
							 | 
						||
| 
								 | 
							
								    functionMeta: namedFunction
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  store[Symbol('symbolKey')] = Symbol('symbolValue')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', () => {}, store)
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', { constraints: { host: 'auth.fastify.io' } }, () => {}, store)
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/testing/:hello', () => {}, store)
							 | 
						||
| 
								 | 
							
								  findMyWay.on('PUT', '/tested/:hello', () => {}, store)
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', { constraints: { version: '1.1.2' } }, () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', { constraints: { version: '2.0.0' } }, () => {})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const radixTree = findMyWay.prettyPrint({ commonPrefix: true, includeMeta: true })
							 | 
						||
| 
								 | 
							
								  const radixTreeExpected = `└── /
							 | 
						||
| 
								 | 
							
								    ├── test (GET)
							 | 
						||
| 
								 | 
							
								    │   • (onRequest) ["anonymous()","namedFunction()"]
							 | 
						||
| 
								 | 
							
								    │   • (onTimeout) ["anonymous()"]
							 | 
						||
| 
								 | 
							
								    │   • (genericMeta) "meta"
							 | 
						||
| 
								 | 
							
								    │   • (mixedMeta) ["mixed items",{"an":"object"}]
							 | 
						||
| 
								 | 
							
								    │   • (objectMeta) {"one":"1","two":2}
							 | 
						||
| 
								 | 
							
								    │   • (functionMeta) "namedFunction()"
							 | 
						||
| 
								 | 
							
								    │   • (Symbol(symbolKey)) "Symbol(symbolValue)"
							 | 
						||
| 
								 | 
							
								    │   test (GET) {"host":"auth.fastify.io"}
							 | 
						||
| 
								 | 
							
								    │   • (onRequest) ["anonymous()","namedFunction()"]
							 | 
						||
| 
								 | 
							
								    │   • (onTimeout) ["anonymous()"]
							 | 
						||
| 
								 | 
							
								    │   • (genericMeta) "meta"
							 | 
						||
| 
								 | 
							
								    │   • (mixedMeta) ["mixed items",{"an":"object"}]
							 | 
						||
| 
								 | 
							
								    │   • (objectMeta) {"one":"1","two":2}
							 | 
						||
| 
								 | 
							
								    │   • (functionMeta) "namedFunction()"
							 | 
						||
| 
								 | 
							
								    │   • (Symbol(symbolKey)) "Symbol(symbolValue)"
							 | 
						||
| 
								 | 
							
								    │   ├── ing/:hello (GET)
							 | 
						||
| 
								 | 
							
								    │   │   • (onRequest) ["anonymous()","namedFunction()"]
							 | 
						||
| 
								 | 
							
								    │   │   • (onTimeout) ["anonymous()"]
							 | 
						||
| 
								 | 
							
								    │   │   • (genericMeta) "meta"
							 | 
						||
| 
								 | 
							
								    │   │   • (mixedMeta) ["mixed items",{"an":"object"}]
							 | 
						||
| 
								 | 
							
								    │   │   • (objectMeta) {"one":"1","two":2}
							 | 
						||
| 
								 | 
							
								    │   │   • (functionMeta) "namedFunction()"
							 | 
						||
| 
								 | 
							
								    │   │   • (Symbol(symbolKey)) "Symbol(symbolValue)"
							 | 
						||
| 
								 | 
							
								    │   └── /:hello (GET) {"version":"1.1.2"}
							 | 
						||
| 
								 | 
							
								    │       /:hello (GET) {"version":"2.0.0"}
							 | 
						||
| 
								 | 
							
								    └── tested/:hello (PUT)
							 | 
						||
| 
								 | 
							
								        • (onRequest) ["anonymous()","namedFunction()"]
							 | 
						||
| 
								 | 
							
								        • (onTimeout) ["anonymous()"]
							 | 
						||
| 
								 | 
							
								        • (genericMeta) "meta"
							 | 
						||
| 
								 | 
							
								        • (mixedMeta) ["mixed items",{"an":"object"}]
							 | 
						||
| 
								 | 
							
								        • (objectMeta) {"one":"1","two":2}
							 | 
						||
| 
								 | 
							
								        • (functionMeta) "namedFunction()"
							 | 
						||
| 
								 | 
							
								        • (Symbol(symbolKey)) "Symbol(symbolValue)"
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								  const radixTreeSpecific = findMyWay.prettyPrint({ commonPrefix: true, includeMeta: ['onTimeout', 'objectMeta', 'nonExistent'] })
							 | 
						||
| 
								 | 
							
								  const radixTreeSpecificExpected = `└── /
							 | 
						||
| 
								 | 
							
								    ├── test (GET)
							 | 
						||
| 
								 | 
							
								    │   • (onTimeout) ["anonymous()"]
							 | 
						||
| 
								 | 
							
								    │   • (objectMeta) {"one":"1","two":2}
							 | 
						||
| 
								 | 
							
								    │   test (GET) {"host":"auth.fastify.io"}
							 | 
						||
| 
								 | 
							
								    │   • (onTimeout) ["anonymous()"]
							 | 
						||
| 
								 | 
							
								    │   • (objectMeta) {"one":"1","two":2}
							 | 
						||
| 
								 | 
							
								    │   ├── ing/:hello (GET)
							 | 
						||
| 
								 | 
							
								    │   │   • (onTimeout) ["anonymous()"]
							 | 
						||
| 
								 | 
							
								    │   │   • (objectMeta) {"one":"1","two":2}
							 | 
						||
| 
								 | 
							
								    │   └── /:hello (GET) {"version":"1.1.2"}
							 | 
						||
| 
								 | 
							
								    │       /:hello (GET) {"version":"2.0.0"}
							 | 
						||
| 
								 | 
							
								    └── tested/:hello (PUT)
							 | 
						||
| 
								 | 
							
								        • (onTimeout) ["anonymous()"]
							 | 
						||
| 
								 | 
							
								        • (objectMeta) {"one":"1","two":2}
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const radixTreeNoMeta = findMyWay.prettyPrint({ commonPrefix: true, includeMeta: false })
							 | 
						||
| 
								 | 
							
								  const radixTreeNoMetaExpected = `└── /
							 | 
						||
| 
								 | 
							
								    ├── test (GET)
							 | 
						||
| 
								 | 
							
								    │   test (GET) {"host":"auth.fastify.io"}
							 | 
						||
| 
								 | 
							
								    │   ├── ing/:hello (GET)
							 | 
						||
| 
								 | 
							
								    │   └── /:hello (GET) {"version":"1.1.2"}
							 | 
						||
| 
								 | 
							
								    │       /:hello (GET) {"version":"2.0.0"}
							 | 
						||
| 
								 | 
							
								    └── tested/:hello (PUT)
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof radixTree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(radixTree, radixTreeExpected)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof radixTreeSpecific, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(radixTreeSpecific, radixTreeSpecificExpected)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof radixTreeNoMeta, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(radixTreeNoMeta, radixTreeNoMetaExpected)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('pretty print includeMeta - commonPrefix: false', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(6)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const findMyWay = FindMyWay()
							 | 
						||
| 
								 | 
							
								  const namedFunction = () => {}
							 | 
						||
| 
								 | 
							
								  const store = {
							 | 
						||
| 
								 | 
							
								    onRequest: [() => {}, namedFunction],
							 | 
						||
| 
								 | 
							
								    onTimeout: [() => {}],
							 | 
						||
| 
								 | 
							
								    genericMeta: 'meta',
							 | 
						||
| 
								 | 
							
								    mixedMeta: ['mixed items', { an: 'object' }],
							 | 
						||
| 
								 | 
							
								    objectMeta: { one: '1', two: 2 },
							 | 
						||
| 
								 | 
							
								    functionMeta: namedFunction
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  store[Symbol('symbolKey')] = Symbol('symbolValue')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', () => {}, store)
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', { constraints: { host: 'auth.fastify.io' } }, () => {}, store)
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', () => {}, store)
							 | 
						||
| 
								 | 
							
								  findMyWay.on('PUT', '/test/:hello', () => {}, store)
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', { constraints: { version: '1.1.2' } }, () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', { constraints: { version: '2.0.0' } }, () => {})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const arrayTree = findMyWay.prettyPrint({ commonPrefix: false, includeMeta: true })
							 | 
						||
| 
								 | 
							
								  const arrayExpected = `└── / (-)
							 | 
						||
| 
								 | 
							
								    └── test (GET)
							 | 
						||
| 
								 | 
							
								        • (onRequest) ["anonymous()","namedFunction()"]
							 | 
						||
| 
								 | 
							
								        • (onTimeout) ["anonymous()"]
							 | 
						||
| 
								 | 
							
								        • (genericMeta) "meta"
							 | 
						||
| 
								 | 
							
								        • (mixedMeta) ["mixed items",{"an":"object"}]
							 | 
						||
| 
								 | 
							
								        • (objectMeta) {"one":"1","two":2}
							 | 
						||
| 
								 | 
							
								        • (functionMeta) "namedFunction()"
							 | 
						||
| 
								 | 
							
								        • (Symbol(symbolKey)) "Symbol(symbolValue)"
							 | 
						||
| 
								 | 
							
								        test (GET) {"host":"auth.fastify.io"}
							 | 
						||
| 
								 | 
							
								        • (onRequest) ["anonymous()","namedFunction()"]
							 | 
						||
| 
								 | 
							
								        • (onTimeout) ["anonymous()"]
							 | 
						||
| 
								 | 
							
								        • (genericMeta) "meta"
							 | 
						||
| 
								 | 
							
								        • (mixedMeta) ["mixed items",{"an":"object"}]
							 | 
						||
| 
								 | 
							
								        • (objectMeta) {"one":"1","two":2}
							 | 
						||
| 
								 | 
							
								        • (functionMeta) "namedFunction()"
							 | 
						||
| 
								 | 
							
								        • (Symbol(symbolKey)) "Symbol(symbolValue)"
							 | 
						||
| 
								 | 
							
								        └── /:hello (GET, PUT)
							 | 
						||
| 
								 | 
							
								            • (onRequest) ["anonymous()","namedFunction()"]
							 | 
						||
| 
								 | 
							
								            • (onTimeout) ["anonymous()"]
							 | 
						||
| 
								 | 
							
								            • (genericMeta) "meta"
							 | 
						||
| 
								 | 
							
								            • (mixedMeta) ["mixed items",{"an":"object"}]
							 | 
						||
| 
								 | 
							
								            • (objectMeta) {"one":"1","two":2}
							 | 
						||
| 
								 | 
							
								            • (functionMeta) "namedFunction()"
							 | 
						||
| 
								 | 
							
								            • (Symbol(symbolKey)) "Symbol(symbolValue)"
							 | 
						||
| 
								 | 
							
								            /:hello (GET) {"version":"1.1.2"}
							 | 
						||
| 
								 | 
							
								            /:hello (GET) {"version":"2.0.0"}
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const arraySpecific = findMyWay.prettyPrint({ commonPrefix: false, includeMeta: ['onRequest', 'mixedMeta', 'nonExistent'] })
							 | 
						||
| 
								 | 
							
								  const arraySpecificExpected = `└── / (-)
							 | 
						||
| 
								 | 
							
								    └── test (GET)
							 | 
						||
| 
								 | 
							
								        • (onRequest) ["anonymous()","namedFunction()"]
							 | 
						||
| 
								 | 
							
								        • (mixedMeta) ["mixed items",{"an":"object"}]
							 | 
						||
| 
								 | 
							
								        test (GET) {"host":"auth.fastify.io"}
							 | 
						||
| 
								 | 
							
								        • (onRequest) ["anonymous()","namedFunction()"]
							 | 
						||
| 
								 | 
							
								        • (mixedMeta) ["mixed items",{"an":"object"}]
							 | 
						||
| 
								 | 
							
								        └── /:hello (GET, PUT)
							 | 
						||
| 
								 | 
							
								            • (onRequest) ["anonymous()","namedFunction()"]
							 | 
						||
| 
								 | 
							
								            • (mixedMeta) ["mixed items",{"an":"object"}]
							 | 
						||
| 
								 | 
							
								            /:hello (GET) {"version":"1.1.2"}
							 | 
						||
| 
								 | 
							
								            /:hello (GET) {"version":"2.0.0"}
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								  const arrayNoMeta = findMyWay.prettyPrint({ commonPrefix: false, includeMeta: false })
							 | 
						||
| 
								 | 
							
								  const arrayNoMetaExpected = `└── / (-)
							 | 
						||
| 
								 | 
							
								    └── test (GET)
							 | 
						||
| 
								 | 
							
								        test (GET) {"host":"auth.fastify.io"}
							 | 
						||
| 
								 | 
							
								        └── /:hello (GET, PUT)
							 | 
						||
| 
								 | 
							
								            /:hello (GET) {"version":"1.1.2"}
							 | 
						||
| 
								 | 
							
								            /:hello (GET) {"version":"2.0.0"}
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof arrayTree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(arrayTree, arrayExpected)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof arraySpecific, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(arraySpecific, arraySpecificExpected)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof arrayNoMeta, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(arrayNoMeta, arrayNoMetaExpected)
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test('pretty print includeMeta - buildPrettyMeta function', t => {
							 | 
						||
| 
								 | 
							
								  t.plan(4)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const findMyWay = FindMyWay({
							 | 
						||
| 
								 | 
							
								    buildPrettyMeta: route => {
							 | 
						||
| 
								 | 
							
								      // routes from radix tree do not contain a path element
							 | 
						||
| 
								 | 
							
								      // returns 'no path' to avoid an undefined value
							 | 
						||
| 
								 | 
							
								      return { metaKey: route.path || 'no path' }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  const namedFunction = () => {}
							 | 
						||
| 
								 | 
							
								  const store = {
							 | 
						||
| 
								 | 
							
								    onRequest: [() => {}, namedFunction],
							 | 
						||
| 
								 | 
							
								    onTimeout: [() => {}],
							 | 
						||
| 
								 | 
							
								    genericMeta: 'meta',
							 | 
						||
| 
								 | 
							
								    mixedMeta: ['mixed items', { an: 'object' }],
							 | 
						||
| 
								 | 
							
								    objectMeta: { one: '1', two: 2 },
							 | 
						||
| 
								 | 
							
								    functionMeta: namedFunction
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  store[Symbol('symbolKey')] = Symbol('symbolValue')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', () => {}, store)
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test', { constraints: { host: 'auth.fastify.io' } }, () => {}, store)
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', () => {}, store)
							 | 
						||
| 
								 | 
							
								  findMyWay.on('PUT', '/test/:hello', () => {}, store)
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', { constraints: { version: '1.1.2' } }, () => {})
							 | 
						||
| 
								 | 
							
								  findMyWay.on('GET', '/test/:hello', { constraints: { version: '2.0.0' } }, () => {})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const arrayTree = findMyWay.prettyPrint({ commonPrefix: false, includeMeta: true })
							 | 
						||
| 
								 | 
							
								  const arrayExpected = `└── / (-)
							 | 
						||
| 
								 | 
							
								    └── test (GET)
							 | 
						||
| 
								 | 
							
								        • (metaKey) "/test"
							 | 
						||
| 
								 | 
							
								        test (GET) {"host":"auth.fastify.io"}
							 | 
						||
| 
								 | 
							
								        • (metaKey) "/test"
							 | 
						||
| 
								 | 
							
								        └── /:hello (GET, PUT)
							 | 
						||
| 
								 | 
							
								            • (metaKey) "/test/:hello"
							 | 
						||
| 
								 | 
							
								            /:hello (GET) {"version":"1.1.2"}
							 | 
						||
| 
								 | 
							
								            • (metaKey) "/test/:hello"
							 | 
						||
| 
								 | 
							
								            /:hello (GET) {"version":"2.0.0"}
							 | 
						||
| 
								 | 
							
								            • (metaKey) "/test/:hello"
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								  const radixTree = findMyWay.prettyPrint({ includeMeta: true })
							 | 
						||
| 
								 | 
							
								  const radixExpected = `└── /test (GET)
							 | 
						||
| 
								 | 
							
								    • (metaKey) "no path"
							 | 
						||
| 
								 | 
							
								    /test (GET) {"host":"auth.fastify.io"}
							 | 
						||
| 
								 | 
							
								    • (metaKey) "no path"
							 | 
						||
| 
								 | 
							
								    └── /
							 | 
						||
| 
								 | 
							
								        └── :hello (GET)
							 | 
						||
| 
								 | 
							
								            • (metaKey) "no path"
							 | 
						||
| 
								 | 
							
								            :hello (GET) {"version":"1.1.2"}
							 | 
						||
| 
								 | 
							
								            • (metaKey) "no path"
							 | 
						||
| 
								 | 
							
								            :hello (GET) {"version":"2.0.0"}
							 | 
						||
| 
								 | 
							
								            • (metaKey) "no path"
							 | 
						||
| 
								 | 
							
								            :hello (PUT)
							 | 
						||
| 
								 | 
							
								            • (metaKey) "no path"
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								  t.equal(typeof arrayTree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(arrayTree, arrayExpected)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  t.equal(typeof radixTree, 'string')
							 | 
						||
| 
								 | 
							
								  t.equal(radixTree, radixExpected)
							 | 
						||
| 
								 | 
							
								})
							 |