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.
		
		
		
		
		
			
		
			
				
					
					
						
							549 lines
						
					
					
						
							9.3 KiB
						
					
					
				
			
		
		
	
	
							549 lines
						
					
					
						
							9.3 KiB
						
					
					
				| 'use strict'
 | |
| 
 | |
| const { test } = require('tap')
 | |
| const SemVerStore = require('./index')
 | |
| 
 | |
| test('Should create a store', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.2.4', 2)
 | |
|     .set('1.3.0', 3)
 | |
| 
 | |
|   t.deepEqual(store.tree, {
 | |
|     prefix: 0,
 | |
|     store: null,
 | |
|     childrenPrefixes: [1],
 | |
|     children: {
 | |
|       1: {
 | |
|         prefix: 1,
 | |
|         store: null,
 | |
|         childrenPrefixes: [2, 3],
 | |
|         children: {
 | |
|           2: {
 | |
|             prefix: 2,
 | |
|             store: null,
 | |
|             childrenPrefixes: [3, 4],
 | |
|             children: {
 | |
|               3: {
 | |
|                 prefix: 3,
 | |
|                 store: 1,
 | |
|                 childrenPrefixes: [],
 | |
|                 children: null
 | |
|               },
 | |
|               4: {
 | |
|                 prefix: 4,
 | |
|                 store: 2,
 | |
|                 childrenPrefixes: [],
 | |
|                 children: null
 | |
|               }
 | |
|             }
 | |
|           },
 | |
|           3: {
 | |
|             prefix: 3,
 | |
|             store: null,
 | |
|             childrenPrefixes: [0],
 | |
|             children: {
 | |
|               0: {
 | |
|                 prefix: 0,
 | |
|                 store: 3,
 | |
|                 childrenPrefixes: [],
 | |
|                 children: null
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Should get the leaf', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.2.4', 2)
 | |
|     .set('1.3.0', 3)
 | |
| 
 | |
|   t.strictEqual(store.get('1.2.4'), 2)
 | |
| })
 | |
| 
 | |
| test('Should get the leaf (wildcard) / 1', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.2.4', 2)
 | |
|     .set('1.3.0', 3)
 | |
| 
 | |
|   t.strictEqual(store.get('1.2.x'), 2)
 | |
| })
 | |
| 
 | |
| test('Should get the leaf (wildcard) / 2', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.2.4', 2)
 | |
|     .set('1.3.0', 3)
 | |
| 
 | |
|   t.strictEqual(store.get('1.x'), 3)
 | |
| })
 | |
| 
 | |
| test('Should get the leaf (wildcard) / 3', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.2.4', 2)
 | |
|     .set('1.3.0', 3)
 | |
| 
 | |
|   t.strictEqual(store.get('2.2.x'), null)
 | |
| })
 | |
| 
 | |
| test('Should get the leaf (wildcard) / 4', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.2.4', 2)
 | |
|     .set('1.3.0', 3)
 | |
| 
 | |
|   t.strictEqual(store.get('2.x'), null)
 | |
| })
 | |
| 
 | |
| test('Should get the leaf (wildcard) / 5', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.0.0', 1)
 | |
|     .set('1.0.1', 2)
 | |
|     .set('1.0.2', 3)
 | |
| 
 | |
|   t.strictEqual(store.get('*'), 3)
 | |
| })
 | |
| 
 | |
| test('Should get the leaf (wildcard) / 6', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.0.0', 1)
 | |
|     .set('1.1.0', 2)
 | |
|     .set('1.0.2', 3)
 | |
| 
 | |
|   t.strictEqual(store.get('*'), 2)
 | |
| })
 | |
| 
 | |
| test('Should get the leaf (wildcard) / 7', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('2.0.0', 1)
 | |
|     .set('1.1.0', 2)
 | |
|     .set('2.0.2', 3)
 | |
| 
 | |
|   t.strictEqual(store.get('*'), 3)
 | |
| })
 | |
| 
 | |
| test('Missing patch', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.2.4', 2)
 | |
|     .set('1.3.0', 3)
 | |
| 
 | |
|   t.strictEqual(store.get('1.2'), 2)
 | |
| })
 | |
| 
 | |
| test('Should get the leaf - 404', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.2.4', 2)
 | |
|     .set('1.3.0', 3)
 | |
| 
 | |
|   t.strictEqual(store.get('1.2.5'), null)
 | |
| })
 | |
| 
 | |
| test('Should get the leaf (bad formatted semver) / 1', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.2.4', 2)
 | |
|     .set('1.3.0', 3)
 | |
| 
 | |
|   t.strictEqual(store.get('1.2.a'), null)
 | |
| })
 | |
| 
 | |
| test('Should get the leaf (bad formatted semver) / 2', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.2.4', 2)
 | |
|     .set('1.3.0', 3)
 | |
| 
 | |
|   t.strictEqual(store.get('1.a'), null)
 | |
| })
 | |
| 
 | |
| test('Big numbers', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.22.34', 1)
 | |
|     .set('2.32.456', 2)
 | |
|     .set('345.432.34', 3)
 | |
|     .set('343.432.36', 4)
 | |
|     .set('343.432.342', 5)
 | |
|     .set('343.435.367', 6)
 | |
|     .set('342.435.34', 7)
 | |
|     .set('341.432.34', 8)
 | |
| 
 | |
|   t.strictEqual(store.get('343.x'), 6)
 | |
| })
 | |
| 
 | |
| test('Delete a version / 1', t => {
 | |
|   t.plan(4)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.2.4', 2)
 | |
| 
 | |
|   t.strictEqual(store.get('1.2.3'), 1)
 | |
|   t.strictEqual(store.get('1.2.4'), 2)
 | |
| 
 | |
|   store.del('1.2.3')
 | |
| 
 | |
|   t.strictEqual(store.get('1.2.3'), null)
 | |
|   t.strictEqual(store.get('1.2.4'), 2)
 | |
| })
 | |
| 
 | |
| test('Delete a version / 2', t => {
 | |
|   t.plan(2)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.2.4', 2)
 | |
| 
 | |
|   t.deepEqual(store.tree, {
 | |
|     prefix: 0,
 | |
|     store: null,
 | |
|     childrenPrefixes: [1],
 | |
|     children: {
 | |
|       1: {
 | |
|         prefix: 1,
 | |
|         store: null,
 | |
|         childrenPrefixes: [2],
 | |
|         children: {
 | |
|           2: {
 | |
|             prefix: 2,
 | |
|             store: null,
 | |
|             childrenPrefixes: [3, 4],
 | |
|             children: {
 | |
|               3: {
 | |
|                 prefix: 3,
 | |
|                 store: 1,
 | |
|                 childrenPrefixes: [],
 | |
|                 children: null
 | |
|               },
 | |
|               4: {
 | |
|                 prefix: 4,
 | |
|                 store: 2,
 | |
|                 childrenPrefixes: [],
 | |
|                 children: null
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   })
 | |
| 
 | |
|   store.del('1.2.3')
 | |
| 
 | |
|   t.deepEqual(store.tree, {
 | |
|     prefix: 0,
 | |
|     store: null,
 | |
|     childrenPrefixes: [1],
 | |
|     children: {
 | |
|       1: {
 | |
|         prefix: 1,
 | |
|         store: null,
 | |
|         childrenPrefixes: [2],
 | |
|         children: {
 | |
|           2: {
 | |
|             prefix: 2,
 | |
|             store: null,
 | |
|             childrenPrefixes: [4],
 | |
|             children: {
 | |
|               4: {
 | |
|                 prefix: 4,
 | |
|                 store: 2,
 | |
|                 childrenPrefixes: [],
 | |
|                 children: null
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Delete a version / 3', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .del('1.2.3')
 | |
| 
 | |
|   t.deepEqual(store.tree, {
 | |
|     prefix: 0,
 | |
|     store: null,
 | |
|     childrenPrefixes: [],
 | |
|     children: {}
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Delete a version / 4', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('2.2.3', 2)
 | |
|     .del('1.2.3')
 | |
| 
 | |
|   t.deepEqual(store.tree, {
 | |
|     prefix: 0,
 | |
|     store: null,
 | |
|     childrenPrefixes: [2],
 | |
|     children: {
 | |
|       2: {
 | |
|         prefix: 2,
 | |
|         store: null,
 | |
|         childrenPrefixes: [2],
 | |
|         children: {
 | |
|           2: {
 | |
|             prefix: 2,
 | |
|             store: null,
 | |
|             childrenPrefixes: [3],
 | |
|             children: {
 | |
|               3: {
 | |
|                 prefix: 3,
 | |
|                 store: 2,
 | |
|                 childrenPrefixes: [],
 | |
|                 children: null
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Delete a version / 5', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.3.3', 2)
 | |
|     .set('2.2.3', 3)
 | |
|     .del('1.2.x')
 | |
| 
 | |
|   t.deepEqual(store.tree, {
 | |
|     prefix: 0,
 | |
|     store: null,
 | |
|     childrenPrefixes: [1, 2],
 | |
|     children: {
 | |
|       1: {
 | |
|         prefix: 1,
 | |
|         store: null,
 | |
|         childrenPrefixes: [3],
 | |
|         children: {
 | |
|           3: {
 | |
|             prefix: 3,
 | |
|             store: null,
 | |
|             childrenPrefixes: [3],
 | |
|             children: {
 | |
|               3: {
 | |
|                 prefix: 3,
 | |
|                 store: 2,
 | |
|                 childrenPrefixes: [],
 | |
|                 children: null
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       },
 | |
|       2: {
 | |
|         prefix: 2,
 | |
|         store: null,
 | |
|         childrenPrefixes: [2],
 | |
|         children: {
 | |
|           2: {
 | |
|             prefix: 2,
 | |
|             store: null,
 | |
|             childrenPrefixes: [3],
 | |
|             children: {
 | |
|               3: {
 | |
|                 prefix: 3,
 | |
|                 store: 3,
 | |
|                 childrenPrefixes: [],
 | |
|                 children: null
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Delete a version / 6', t => {
 | |
|   t.plan(2)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.3.3', 2)
 | |
|     .set('2.2.3', 3)
 | |
|     .del('1.x')
 | |
| 
 | |
|   t.deepEqual(store.tree, {
 | |
|     prefix: 0,
 | |
|     store: null,
 | |
|     childrenPrefixes: [2],
 | |
|     children: {
 | |
|       2: {
 | |
|         prefix: 2,
 | |
|         store: null,
 | |
|         childrenPrefixes: [2],
 | |
|         children: {
 | |
|           2: {
 | |
|             prefix: 2,
 | |
|             store: null,
 | |
|             childrenPrefixes: [3],
 | |
|             children: {
 | |
|               3: {
 | |
|                 prefix: 3,
 | |
|                 store: 3,
 | |
|                 childrenPrefixes: [],
 | |
|                 children: null
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   })
 | |
| 
 | |
|   store.del('2.x')
 | |
| 
 | |
|   t.deepEqual(store.tree, {
 | |
|     prefix: 0,
 | |
|     store: null,
 | |
|     childrenPrefixes: [],
 | |
|     children: {}
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('Empty store', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store
 | |
|     .set('1.2.3', 1)
 | |
|     .set('1.3.3', 2)
 | |
|     .set('2.2.3', 3)
 | |
|     .empty()
 | |
| 
 | |
|   t.deepEqual(store.tree, {
 | |
|     prefix: 0,
 | |
|     store: null,
 | |
|     childrenPrefixes: [],
 | |
|     children: null
 | |
|   })
 | |
| })
 | |
| 
 | |
| test('get with bad type', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   store.set('1.2.3', 1)
 | |
| 
 | |
|   t.strictEqual(store.get(5), null)
 | |
| })
 | |
| 
 | |
| test('set with bad type', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   try {
 | |
|     store.set(1, 1)
 | |
|     t.fail('Should fail')
 | |
|   } catch (err) {
 | |
|     t.is(err.message, 'Version should be a string')
 | |
|   }
 | |
| })
 | |
| 
 | |
| test('del with bad type', t => {
 | |
|   t.plan(1)
 | |
| 
 | |
|   const store = SemVerStore()
 | |
| 
 | |
|   try {
 | |
|     store.del(1)
 | |
|     t.fail('Should fail')
 | |
|   } catch (err) {
 | |
|     t.is(err.message, 'Version should be a string')
 | |
|   }
 | |
| })
 |