Index: test/cctest/test-parsing.cc |
diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc |
index 0ae46c33cad17f43e0bf2bb5176e83501eb09b7e..49892ca122582326b71136903b5a52b0ba85110e 100644 |
--- a/test/cctest/test-parsing.cc |
+++ b/test/cctest/test-parsing.cc |
@@ -1344,7 +1344,8 @@ enum ParserFlag { |
kAllowHarmonyNumericLiterals, |
kAllowArrowFunctions, |
kAllowClasses, |
- kAllowHarmonyObjectLiterals |
+ kAllowHarmonyObjectLiterals, |
+ kAllowHarmonyTemplates |
}; |
@@ -1367,6 +1368,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)); |
} |
@@ -1666,6 +1668,7 @@ void RunParserSyncTest(const char* context_data[][2], |
kAllowLazy, |
kAllowModules, |
kAllowNativesSyntax, |
+ kAllowHarmonyTemplates |
}; |
ParserFlag* generated_flags = NULL; |
if (flags == NULL) { |
@@ -4318,3 +4321,77 @@ TEST(InvalidUnicodeEscapes) { |
NULL}; |
RunParserSyncTest(context_data, data, kError); |
} |
+ |
+ |
+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}`", |
+ "`${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)); |
+} |
rossberg
2014/11/14 12:28:07
Add tests for some of the different InputElementTe
|
+ |
+ |
+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 ``", |
+ "tag `no-subst-template`", |
+ "tag`template-head${a}`", |
+ "tag `${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)); |
+} |
rossberg
2014/11/14 12:28:07
We should also have sync test cases where the scri
|