summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorMike Pennisi <mike@mikepennisi.com>2016-03-08 16:24:07 -0500
committerMike Pennisi <mike@mikepennisi.com>2016-04-18 15:46:06 -0400
commitb0b41775e57f68eaf9f8e84576d0367f3de91cd4 (patch)
tree7649514a47bb1ff801a1c473a6092520105d5dda /tools
parent3723e7caebecf3c4701d70b0445bf1f0c795a6a5 (diff)
downloadqtdeclarative-testsuites-b0b41775e57f68eaf9f8e84576d0367f3de91cd4.tar.gz
[generation] Expand "comments" in string literals
Extend test generation tool to recognize and expand interpolation patterns within string literals.
Diffstat (limited to 'tools')
-rw-r--r--tools/generation/lib/template.py7
-rw-r--r--tools/generation/lib/util/find_comments.py7
-rw-r--r--tools/generation/test/expected/normal/path1-normal.js7
-rw-r--r--tools/generation/test/fixtures/normal.case2
-rw-r--r--tools/generation/test/fixtures/normal/normal.template7
5 files changed, 23 insertions, 7 deletions
diff --git a/tools/generation/lib/template.py b/tools/generation/lib/template.py
index fa891f00b..66ef84071 100644
--- a/tools/generation/lib/template.py
+++ b/tools/generation/lib/template.py
@@ -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']:]
diff --git a/tools/generation/lib/util/find_comments.py b/tools/generation/lib/util/find_comments.py
index 81ad0ab55..bf4b0ffd7 100644
--- a/tools/generation/lib/util/find_comments.py
+++ b/tools/generation/lib/util/find_comments.py
@@ -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]
diff --git a/tools/generation/test/expected/normal/path1-normal.js b/tools/generation/test/expected/normal/path1-normal.js
index 3bc10d0e9..467f95472 100644
--- a/tools/generation/test/expected/normal/path1-normal.js
+++ b/tools/generation/test/expected/normal/path1-normal.js
@@ -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.';
diff --git a/tools/generation/test/fixtures/normal.case b/tools/generation/test/fixtures/normal.case
index 276b58ccd..c97a6e7b7 100644
--- a/tools/generation/test/fixtures/normal.case
+++ b/tools/generation/test/fixtures/normal.case
@@ -23,5 +23,7 @@ First value
Second value
//- third
Third value
+//- fourth
+Quote characters: " ' `
//- teardown
'This is "teardown" code.';
diff --git a/tools/generation/test/fixtures/normal/normal.template b/tools/generation/test/fixtures/normal/normal.template
index ac0bea1e1..32bc9cff1 100644
--- a/tools/generation/test/fixtures/normal/normal.template
+++ b/tools/generation/test/fixtures/normal/normal.template
@@ -21,7 +21,8 @@ The following should not be expanded:
*/*{ first }*/
//*{ first }*/
// /*{ first }*/
-"/*{ first }*/"
-'/*{ first }*/'
+/*{ fourth }*/
+"/*{ fourth }*/"
+'/*{ fourth }*/'
`
-/*{ first }*/`
+/*{ fourth }*/`