mirror of https://github.com/tc39/test262.git
[generation] Expand "comments" in string literals
Extend test generation tool to recognize and expand interpolation patterns within string literals.
This commit is contained in:
parent
3723e7caeb
commit
b0b41775e5
|
@ -78,6 +78,13 @@ class Template:
|
|||
for region in self.regions:
|
||||
whitespace = indentPattern.match(lines[region['lineno']]).group(1)
|
||||
value = context['regions'].get(region['name'], '')
|
||||
|
||||
str_char = region.get('in_string')
|
||||
if str_char:
|
||||
safe_char = '"' if str_char == '\'' else '\''
|
||||
value = value.replace(str_char, safe_char)
|
||||
value = value.replace('\n', '\\\n')
|
||||
|
||||
source = source[:region['firstchar']] + \
|
||||
indent(value, whitespace).lstrip() + \
|
||||
source[region['lastchar']:]
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
def find_comments(source):
|
||||
'''Parse input string describing JavaScript source and yield dictionaries
|
||||
describing the JavaScript comments in the order they appear in the source.
|
||||
This includes comment patterns within string literals.
|
||||
|
||||
Each dictionary defines the following attributes:
|
||||
|
||||
|
@ -11,6 +12,9 @@ def find_comments(source):
|
|||
- firstchar: the zero-indexed position of the token that begins the comment
|
||||
- lastchar: the zero-indexed position of the token that closes the comment
|
||||
- lineno: the zero-indexed offset of the line on which the comment appears
|
||||
- in_string: `False` if the comment is a true JavaScript comment, one of
|
||||
'\'' (single quote), '"' (double quote), or '`' (back tick) if
|
||||
the comment pattern appears within a string literal.
|
||||
'''
|
||||
in_string = False
|
||||
in_s_comment = False
|
||||
|
@ -37,6 +41,7 @@ def find_comments(source):
|
|||
source=comment[1:],
|
||||
firstchar=idx - len(comment) - 1,
|
||||
lastchar=idx,
|
||||
in_string=in_string,
|
||||
lineno=lineno)
|
||||
continue
|
||||
elif in_m_comment:
|
||||
|
@ -46,6 +51,7 @@ def find_comments(source):
|
|||
source=comment[1:-1],
|
||||
firstchar=idx - len(comment) - 1,
|
||||
lastchar=idx + 1,
|
||||
in_string=in_string,
|
||||
lineno=lineno)
|
||||
continue
|
||||
elif in_string:
|
||||
|
@ -53,7 +59,6 @@ def find_comments(source):
|
|||
in_string = False
|
||||
elif source[idx] == '\n' and in_string != '`' and not follows_escape:
|
||||
in_string = False
|
||||
continue
|
||||
|
||||
if in_m_comment or in_s_comment:
|
||||
comment += source[idx]
|
||||
|
|
|
@ -25,9 +25,10 @@ The following should not be expanded:
|
|||
*/*{ first }*/
|
||||
//*{ first }*/
|
||||
// /*{ first }*/
|
||||
"/*{ first }*/"
|
||||
'/*{ first }*/'
|
||||
Quote characters: " ' `
|
||||
"Quote characters: ' ' `"
|
||||
'Quote characters: " " `'
|
||||
`
|
||||
/*{ first }*/`
|
||||
Quote characters: " ' '`
|
||||
|
||||
'This is "teardown" code.';
|
||||
|
|
|
@ -23,5 +23,7 @@ First value
|
|||
Second value
|
||||
//- third
|
||||
Third value
|
||||
//- fourth
|
||||
Quote characters: " ' `
|
||||
//- teardown
|
||||
'This is "teardown" code.';
|
||||
|
|
|
@ -21,7 +21,8 @@ The following should not be expanded:
|
|||
*/*{ first }*/
|
||||
//*{ first }*/
|
||||
// /*{ first }*/
|
||||
"/*{ first }*/"
|
||||
'/*{ first }*/'
|
||||
/*{ fourth }*/
|
||||
"/*{ fourth }*/"
|
||||
'/*{ fourth }*/'
|
||||
`
|
||||
/*{ first }*/`
|
||||
/*{ fourth }*/`
|
||||
|
|
Loading…
Reference in New Issue