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.
		
		
		
		
		
			
		
			
				
					50 lines
				
				1.2 KiB
			
		
		
			
		
	
	
					50 lines
				
				1.2 KiB
			| 
											3 years ago
										 | var tape = require('tape') | ||
|  | var genfun = require('./') | ||
|  | 
 | ||
|  | tape('generate add function', function(t) { | ||
|  |   var fn = genfun() | ||
|  |     ('function add(n) {') | ||
|  |       ('return n + %d', 42) | ||
|  |     ('}') | ||
|  | 
 | ||
|  |   t.same(fn.toString(), 'function add(n) {\n  return n + 42\n}', 'code is indented') | ||
|  |   t.same(fn.toFunction()(10), 52, 'function works') | ||
|  |   t.end() | ||
|  | }) | ||
|  | 
 | ||
|  | tape('generate function + closed variables', function(t) { | ||
|  |   var fn = genfun() | ||
|  |     ('function add(n) {') | ||
|  |       ('return n + %d + number', 42) | ||
|  |     ('}') | ||
|  | 
 | ||
|  |   var notGood = fn.toFunction() | ||
|  |   var good = fn.toFunction({number:10}) | ||
|  | 
 | ||
|  |   try { | ||
|  |     notGood(10) | ||
|  |     t.ok(false, 'function should not work') | ||
|  |   } catch (err) { | ||
|  |     t.same(err.message, 'number is not defined', 'throws reference error') | ||
|  |   } | ||
|  | 
 | ||
|  |   t.same(good(11), 63, 'function with closed var works') | ||
|  |   t.end() | ||
|  | }) | ||
|  | 
 | ||
|  | tape('generate property', function(t) { | ||
|  |   var gen = genfun() | ||
|  | 
 | ||
|  |   t.same(gen.property('a'), 'a') | ||
|  |   t.same(gen.property('42'), '"42"') | ||
|  |   t.same(gen.property('b', 'a'), 'b.a') | ||
|  |   t.same(gen.property('b', '42'), 'b["42"]') | ||
|  |   t.same(gen.sym(42), 'tmp') | ||
|  |   t.same(gen.sym('a'), 'a') | ||
|  |   t.same(gen.sym('a'), 'a1') | ||
|  |   t.same(gen.sym(42), 'tmp1') | ||
|  |   t.same(gen.sym('const'), 'tmp2') | ||
|  | 
 | ||
|  |   t.end() | ||
|  | }) |