mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-31 11:44:31 +01:00 
			
		
		
		
	sourceRevisionAtLastExport: 33f2fb0e53d135f0ee17cfccd9d993eb2a6f47de targetRevisionAtLastExport: 31340cbd9add103f586d501b0c3354b7b182abc0
		
			
				
	
	
		
			871 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			871 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Copyright 2016 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.
 | |
| 
 | |
| function check({cooked, raw, exprs}) {
 | |
|   return function(strs, ...args) {
 | |
|     assertArrayEquals(cooked, strs);
 | |
|     assertArrayEquals(raw, strs.raw);
 | |
|     assertArrayEquals(exprs, args);
 | |
|   };
 | |
| }
 | |
| 
 | |
| // clang-format off
 | |
| 
 | |
| 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': []
 | |
| }])` `` `();
 |