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();
|