mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-31 11:44:31 +01:00 
			
		
		
		
	sourceRevisionAtLastExport: 33f2fb0e53d135f0ee17cfccd9d993eb2a6f47de targetRevisionAtLastExport: 31340cbd9add103f586d501b0c3354b7b182abc0
		
			
				
	
	
		
			1737 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			1737 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Copyright 2017 the V8 project authors. All rights reserved.
 | |
| // Use of this source code is governed by a BSD-style license that can be
 | |
| // found in the LICENSE file.
 | |
| 
 | |
| // This test is added because harmony-template-escapes were not properly
 | |
| // handled in the preparser.
 | |
| 
 | |
| function check({cooked, raw, exprs}) {
 | |
|   return function(strs, ...args) {
 | |
|     assertArrayEquals(cooked, strs);
 | |
|     assertArrayEquals(raw, strs.raw);
 | |
|     assertArrayEquals(exprs, args);
 | |
|   };
 | |
| }
 | |
| 
 | |
| // clang-format off
 | |
| 
 | |
| function lazy() {
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\01'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\01`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\01',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\01${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\01'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\01`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\01',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\01${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\1'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\1`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\1',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\1${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\1'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\1`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\1',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\1${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\xg'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\xg`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\xg',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\xg${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\xg'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\xg`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\xg',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\xg${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\xAg'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\xAg`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\xAg',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\xAg${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\xAg'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\xAg`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\xAg',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\xAg${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u0'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u0`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u0',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u0${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u0'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u0`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u0',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u0${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u0g'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u0g`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u0g',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u0g${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u0g'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u0g`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u0g',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u0g${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u00g'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u00g`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u00g',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u00g${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u00g'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u00g`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u00g',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u00g${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u000g'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u000g`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u000g',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u000g${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u000g'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u000g`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u000g',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u000g${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{}'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u{}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u{}${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{}'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u{}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u{}${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{-0}'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u{-0}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{-0}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u{-0}${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{-0}'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u{-0}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{-0}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u{-0}${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{g}'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u{g}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{g}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u{g}${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{g}'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u{g}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{g}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u{g}${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{0'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u{0`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{0',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u{0${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{0'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u{0`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{0',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u{0${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{\\u{0}'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u{\u{0}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{\\u{0}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u{\u{0}${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{\\u{0}'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u{\u{0}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{\\u{0}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u{\u{0}${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{110000}'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u{110000}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{110000}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u{110000}${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{110000}'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u{110000}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{110000}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u{110000}${1}right`;
 | |
| 
 | |
| 
 | |
| 
 | |
|   function checkMultiple(expectedArray) {
 | |
|     let results = [];
 | |
|     return function consume(strs, ...args) {
 | |
|       if (typeof strs === 'undefined') {
 | |
|         assertArrayEquals(expectedArray, results);
 | |
|       } else {
 | |
|         results.push({cooked: strs, raw: strs.raw, exprs: args});
 | |
|         return consume;
 | |
|       }
 | |
|     };
 | |
|   }
 | |
| 
 | |
| 
 | |
|   checkMultiple([{
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }, {
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }])`\u``\u`();
 | |
| 
 | |
|   checkMultiple([{
 | |
|     'cooked': [
 | |
|       ' '
 | |
|     ],
 | |
|     'raw': [
 | |
|       ' ',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }, {
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }])` ``\u`();
 | |
| 
 | |
|   checkMultiple([{
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }, {
 | |
|     'cooked': [
 | |
|       ' '
 | |
|     ],
 | |
|     'raw': [
 | |
|       ' ',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }])`\u`` `();
 | |
| 
 | |
|   checkMultiple([{
 | |
|     'cooked': [
 | |
|       ' '
 | |
|     ],
 | |
|     'raw': [
 | |
|       ' ',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }, {
 | |
|     'cooked': [
 | |
|       ' '
 | |
|     ],
 | |
|     'raw': [
 | |
|       ' ',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }])` `` `();
 | |
| }
 | |
| 
 | |
| (function eager() {
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\01'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\01`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\01',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\01${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\01'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\01`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\01',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\01${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\1'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\1`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\1',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\1${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\1'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\1`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\1',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\1${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\xg'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\xg`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\xg',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\xg${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\xg'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\xg`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\xg',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\xg${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\xAg'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\xAg`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\xAg',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\xAg${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\xAg'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\xAg`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\xAg',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\xAg${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u0'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u0`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u0',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u0${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u0'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u0`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u0',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u0${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u0g'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u0g`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u0g',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u0g${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u0g'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u0g`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u0g',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u0g${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u00g'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u00g`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u00g',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u00g${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u00g'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u00g`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u00g',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u00g${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u000g'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u000g`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u000g',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u000g${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u000g'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u000g`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u000g',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u000g${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{}'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u{}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u{}${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{}'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u{}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u{}${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{-0}'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u{-0}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{-0}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u{-0}${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{-0}'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u{-0}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{-0}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u{-0}${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{g}'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u{g}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{g}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u{g}${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{g}'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u{g}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{g}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u{g}${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{0'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u{0`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{0',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u{0${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{0'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u{0`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{0',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u{0${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{\\u{0}'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u{\u{0}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{\\u{0}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u{\u{0}${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{\\u{0}'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u{\u{0}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{\\u{0}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u{\u{0}${1}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{110000}'
 | |
|     ],
 | |
|     'exprs': []
 | |
|   })`\u{110000}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u{110000}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`\u{110000}${0}right`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{110000}'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0
 | |
|     ]
 | |
|   })`left${0}\u{110000}`;
 | |
| 
 | |
|   check({
 | |
|     'cooked': [
 | |
|       'left',
 | |
|       undefined,
 | |
|       'right'
 | |
|     ],
 | |
|     'raw': [
 | |
|       'left',
 | |
|       '\\u{110000}',
 | |
|       'right'
 | |
|     ],
 | |
|     'exprs': [
 | |
|       0,
 | |
|       1
 | |
|     ]
 | |
|   })`left${0}\u{110000}${1}right`;
 | |
| 
 | |
| 
 | |
| 
 | |
|   function checkMultiple(expectedArray) {
 | |
|     let results = [];
 | |
|     return function consume(strs, ...args) {
 | |
|       if (typeof strs === 'undefined') {
 | |
|         assertArrayEquals(expectedArray, results);
 | |
|       } else {
 | |
|         results.push({cooked: strs, raw: strs.raw, exprs: args});
 | |
|         return consume;
 | |
|       }
 | |
|     };
 | |
|   }
 | |
| 
 | |
| 
 | |
|   checkMultiple([{
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }, {
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }])`\u``\u`();
 | |
| 
 | |
|   checkMultiple([{
 | |
|     'cooked': [
 | |
|       ' '
 | |
|     ],
 | |
|     'raw': [
 | |
|       ' ',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }, {
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }])` ``\u`();
 | |
| 
 | |
|   checkMultiple([{
 | |
|     'cooked': [
 | |
|       undefined
 | |
|     ],
 | |
|     'raw': [
 | |
|       '\\u',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }, {
 | |
|     'cooked': [
 | |
|       ' '
 | |
|     ],
 | |
|     'raw': [
 | |
|       ' ',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }])`\u`` `();
 | |
| 
 | |
|   checkMultiple([{
 | |
|     'cooked': [
 | |
|       ' '
 | |
|     ],
 | |
|     'raw': [
 | |
|       ' ',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }, {
 | |
|     'cooked': [
 | |
|       ' '
 | |
|     ],
 | |
|     'raw': [
 | |
|       ' ',
 | |
|     ],
 | |
|     'exprs': []
 | |
|   }])` `` `();
 | |
| })();
 | |
| 
 | |
| lazy();
 |