[generation] Expand "comments" in string literals

Extend test generation tool to recognize and expand interpolation
patterns within string literals.
This commit is contained in:
Mike Pennisi 2016-03-08 16:24:07 -05:00
parent 3723e7caeb
commit b0b41775e5
5 changed files with 23 additions and 7 deletions

View File

@ -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']:]

View File

@ -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]

View File

@ -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.';

View File

@ -23,5 +23,7 @@ First value
Second value
//- third
Third value
//- fourth
Quote characters: " ' `
//- teardown
'This is "teardown" code.';

View File

@ -21,7 +21,8 @@ The following should not be expanded:
*/*{ first }*/
//*{ first }*/
// /*{ first }*/
"/*{ first }*/"
'/*{ first }*/'
/*{ fourth }*/
"/*{ fourth }*/"
'/*{ fourth }*/'
`
/*{ first }*/`
/*{ fourth }*/`