Skip to content
Snippets Groups Projects
Commit b0b41775 authored by Mike Pennisi's avatar Mike Pennisi
Browse files

[generation] Expand "comments" in string literals

Extend test generation tool to recognize and expand interpolation
patterns within string literals.
parent 3723e7ca
No related branches found
No related tags found
No related merge requests found
......@@ -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 }*/`
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment