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.
		
		
		
		
			
				
					132 lines
				
				3.3 KiB
			
		
		
			
		
	
	
					132 lines
				
				3.3 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								var a = require('assert'),
							 | 
						||
| 
								 | 
							
								  expression = require('./index.js'),
							 | 
						||
| 
								 | 
							
								  getter = expression.getter,
							 | 
						||
| 
								 | 
							
								  setter = expression.setter,
							 | 
						||
| 
								 | 
							
								  obj = {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								obj = {
							 | 
						||
| 
								 | 
							
								  foo: {
							 | 
						||
| 
								 | 
							
								    bar: ['baz', 'bux'],
							 | 
						||
| 
								 | 
							
								    fux: 5,
							 | 
						||
| 
								 | 
							
								    '00N40000002S5U0': 1,
							 | 
						||
| 
								 | 
							
								    N40000002S5U0: 2,
							 | 
						||
| 
								 | 
							
								    'FE43-D880-21AE': 3
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// -- Getters --
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('foo.fux')(obj), 5);
							 | 
						||
| 
								 | 
							
								a.deepEqual(getter('foo.bar')(obj), ['baz', 'bux']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('foo.bar[1]')(obj), 'bux');
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('["foo"]["bar"][1]')(obj), 'bux');
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('[1]')([1, 'bux']), 'bux');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// safe access
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('foo.fux', true)(obj), 5);
							 | 
						||
| 
								 | 
							
								a.deepEqual(getter('foo.bar', true)(obj), ['baz', 'bux']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('foo.bar[1]', true)(obj), 'bux');
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('["foo"]["bar"][1]', true)(obj), 'bux');
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('[1]', true)([1, 'bux']), 'bux');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('foo.gih.df[0]', true)(obj), undefined);
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('["fr"]["bzr"][1]', true)(obj), undefined);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('foo["00N40000002S5U0"]', true)(obj), 1);
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('foo.00N40000002S5U0', true)(obj), 1);
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('foo["N40000002S5U0"]', true)(obj), 2);
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('foo.N40000002S5U0', true)(obj), 2);
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('foo["FE43-D880-21AE"]', true)(obj), 3);
							 | 
						||
| 
								 | 
							
								a.strictEqual(getter('foo.FE43-D880-21AE', true)(obj), 3);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// -- Setters --
							 | 
						||
| 
								 | 
							
								setter('foo.fux')(obj, 10);
							 | 
						||
| 
								 | 
							
								a.strictEqual(obj.foo.fux, 10);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								setter('foo.bar[1]')(obj, 'bot');
							 | 
						||
| 
								 | 
							
								a.strictEqual(obj.foo.bar[1], 'bot');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								setter('[\'foo\']["bar"][1]')(obj, 'baz');
							 | 
						||
| 
								 | 
							
								a.strictEqual(obj.foo.bar[1], 'baz');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// -- Cache --
							 | 
						||
| 
								 | 
							
								var cache = new expression.Cache(3)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache._size, 0)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache.set('a', a), a)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache.get('a'), a)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache._size, 1)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache.set('b', 123), 123)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache.get('b'), 123)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache.set('b', 321), 321)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache.get('b'), 321)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache.set('c', null), null)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache.get('c'), null)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache._size, 3)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache.set('d', 444), 444)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache._size, 1)
							 | 
						||
| 
								 | 
							
								cache.clear()
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache._size, 0)
							 | 
						||
| 
								 | 
							
								a.strictEqual(cache.get('a'), undefined)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// -- split --
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var parts = expression.split('foo.baz["bar"][1]');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								a.strictEqual(parts.length, 4);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// -- join --
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var parts = expression.split('foo.baz["bar"][1]');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								a.strictEqual(expression.join(['0', 'baz', '"bar"', 1]), '[0].baz["bar"][1]');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								a.strictEqual(expression.join(parts), 'foo.baz["bar"][1]');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// -- forEach --
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var count = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								expression.forEach('foo.baz["bar"][1]', function(
							 | 
						||
| 
								 | 
							
								  part,
							 | 
						||
| 
								 | 
							
								  isBracket,
							 | 
						||
| 
								 | 
							
								  isArray,
							 | 
						||
| 
								 | 
							
								  idx
							 | 
						||
| 
								 | 
							
								) {
							 | 
						||
| 
								 | 
							
								  count = idx;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  switch (idx) {
							 | 
						||
| 
								 | 
							
								    case 0:
							 | 
						||
| 
								 | 
							
								      a.strictEqual(part, 'foo');
							 | 
						||
| 
								 | 
							
								      a.strictEqual(isBracket, false);
							 | 
						||
| 
								 | 
							
								      a.strictEqual(isArray, false);
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 1:
							 | 
						||
| 
								 | 
							
								      a.strictEqual(part, 'baz');
							 | 
						||
| 
								 | 
							
								      a.strictEqual(isBracket, false);
							 | 
						||
| 
								 | 
							
								      a.strictEqual(isArray, false);
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 2:
							 | 
						||
| 
								 | 
							
								      a.strictEqual(part, '"bar"');
							 | 
						||
| 
								 | 
							
								      a.strictEqual(isBracket, true);
							 | 
						||
| 
								 | 
							
								      a.strictEqual(isArray, false);
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								    case 3:
							 | 
						||
| 
								 | 
							
								      a.strictEqual(part, '1');
							 | 
						||
| 
								 | 
							
								      a.strictEqual(isBracket, false);
							 | 
						||
| 
								 | 
							
								      a.strictEqual(isArray, true);
							 | 
						||
| 
								 | 
							
								      break;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								a.strictEqual(count, 3);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// -- normalizePath --
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								a.deepEqual(
							 | 
						||
| 
								 | 
							
								  expression.normalizePath('foo[ " bux\'s " ].bar["baz"][ 9 ][ \' s \' ]'),
							 | 
						||
| 
								 | 
							
								  ['foo', ' bux\'s ', 'bar', 'baz', '9', ' s ']
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								console.log('--- Tests Passed ---');
							 |