| Index: test/cctest/test-parsing.cc
|
| diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc
|
| index 0ae46c33cad17f43e0bf2bb5176e83501eb09b7e..49c79a1feab104688167a1e3bae7069d9d9714bc 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,112 @@ 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`",
|
| + "`foo${a /* comment */}`",
|
| + "`foo${a // comment\n}`",
|
| + "`foo${a \n}`",
|
| + "`foo${a \r\n}`",
|
| + "`foo${a \r}`",
|
| + "`foo${/* comment */ a}`",
|
| + "`foo${// comment\na}`",
|
| + "`foo${\n a}`",
|
| + "`foo${\r\n a}`",
|
| + "`foo${\r a}`",
|
| + "`foo${'a' in a}`",
|
| + 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 ``",
|
| + "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`",
|
| + "tag`foo${a /* comment */}`",
|
| + "tag`foo${a // comment\n}`",
|
| + "tag`foo${a \n}`",
|
| + "tag`foo${a \r\n}`",
|
| + "tag`foo${a \r}`",
|
| + "tag`foo${/* comment */ a}`",
|
| + "tag`foo${// comment\na}`",
|
| + "tag`foo${\n a}`",
|
| + "tag`foo${\r\n a}`",
|
| + "tag`foo${\r a}`",
|
| + "tag`foo${'a' in a}`",
|
| + 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",
|
| + "`foo${a /* comment } */`",
|
| + "`foo${a /* comment } `*/",
|
| + "`foo${a // comment}`",
|
| + "`foo${a \n`",
|
| + "`foo${a \r\n`",
|
| + "`foo${a \r`",
|
| + "`foo${/* comment */ a`",
|
| + "`foo${// commenta}`",
|
| + "`foo${\n a`",
|
| + "`foo${\r\n a`",
|
| + "`foo${\r a`",
|
| + "`foo${fn(}`",
|
| + "`foo${1 if}`",
|
| + NULL};
|
| + static const ParserFlag always_flags[] = {kAllowHarmonyTemplates};
|
| + RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags,
|
| + arraysize(always_flags));
|
| +}
|
|
|