Index: test/cctest/test-parsing.cc |
diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc |
index 40281678d9442c7096f3ff0ee27feaf1f3b09986..e12540db15531f59b4d46d1098d65312984d06bd 100644 |
--- a/test/cctest/test-parsing.cc |
+++ b/test/cctest/test-parsing.cc |
@@ -1334,7 +1334,8 @@ enum ParserFlag { |
kAllowHarmonyNumericLiterals, |
kAllowArrowFunctions, |
kAllowClasses, |
- kAllowHarmonyObjectLiterals |
+ kAllowHarmonyObjectLiterals, |
+ kAllowHarmonyTemplates |
}; |
@@ -1357,6 +1358,7 @@ void SetParserFlags(i::ParserBase<Traits>* parser, |
flags.Contains(kAllowHarmonyObjectLiterals)); |
parser->set_allow_arrow_functions(flags.Contains(kAllowArrowFunctions)); |
parser->set_allow_classes(flags.Contains(kAllowClasses)); |
+ parser->set_allow_harmony_templates(flags.Contains(kAllowHarmonyTemplates)); |
} |
@@ -1656,6 +1658,7 @@ void RunParserSyncTest(const char* context_data[][2], |
kAllowLazy, |
kAllowModules, |
kAllowNativesSyntax, |
+ kAllowHarmonyTemplates |
}; |
ParserFlag* generated_flags = NULL; |
if (flags == NULL) { |
@@ -4258,3 +4261,73 @@ TEST(ConstParsingInForInError) { |
RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, |
arraysize(always_flags)); |
} |
+ |
+ |
+TEST(ScanTemplateLiterals) { |
+ const char* context_data[][2] = {{"'use strict';", ""}, |
+ {"function foo(){ 'use strict';" |
+ " var a, b, c; return ", "}"}, |
+ {NULL, NULL}}; |
+ |
+ const char* data[] = { |
+ "`no-subst-template`", |
+ "`template-head${a}`", |
+ "`${a}template-tail`", |
+ "`template-head${a}template-tail`", |
+ "`${a}${b}${c}`", |
+ "`a${a}b${b}c${c}`", |
+ "`${a}a${b}b${c}c`", |
+ "`foo\n\nbar\r\nbaz`", |
+ "`foo\n\n${ bar }\r\nbaz`", |
+ NULL}; |
+ static const ParserFlag always_flags[] = {kAllowHarmonyTemplates}; |
+ RunParserSyncTest(context_data, data, kSuccess, NULL, 0, always_flags, |
+ arraysize(always_flags)); |
+} |
+ |
+ |
+TEST(ScanTaggedTemplateLiterals) { |
+ const char* context_data[][2] = {{"'use strict';", ""}, |
+ {"function foo(){ 'use strict';" |
+ " function tag() {}" |
+ " var a, b, c; return ", "}"}, |
+ {NULL, NULL}}; |
+ |
+ const char* data[] = { |
+ "tag `no-subst-template`", |
+ "tag`template-head${a}`", |
+ "tag `${a}template-tail`", |
+ "tag `template-head${a}template-tail`", |
+ "tag\n`${a}${b}${c}`", |
+ "tag\r\n`a${a}b${b}c${c}`", |
+ "tag `${a}a${b}b${c}c`", |
+ "tag\t`foo\n\nbar\r\nbaz`", |
+ "tag\r`foo\n\n${ bar }\r\nbaz`", |
+ NULL}; |
+ static const ParserFlag always_flags[] = {kAllowHarmonyTemplates}; |
+ RunParserSyncTest(context_data, data, kSuccess, NULL, 0, always_flags, |
+ arraysize(always_flags)); |
+} |
+ |
+ |
+TEST(ScanUnterminatedTemplateLiterals) { |
+ const char* context_data[][2] = {{"'use strict';", ""}, |
+ {"function foo(){ 'use strict';" |
+ " var a, b, c; return ", "}"}, |
+ {NULL, NULL}}; |
+ |
+ const char* data[] = { |
+ "`no-subst-template", |
+ "`template-head${a}", |
+ "`${a}template-tail", |
+ "`template-head${a}template-tail", |
+ "`${a}${b}${c}", |
+ "`a${a}b${b}c${c}", |
+ "`${a}a${b}b${c}c", |
+ "`foo\n\nbar\r\nbaz", |
+ "`foo\n\n${ bar }\r\nbaz", |
+ NULL}; |
+ static const ParserFlag always_flags[] = {kAllowHarmonyTemplates}; |
+ RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, |
+ arraysize(always_flags)); |
+} |