Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: test/cctest/test-parsing.cc

Issue 938443002: [es6] implement spread calls (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase + clang-format Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1362 matching lines...) Expand 10 before | Expand all | Expand 10 after
1373 kAllowLazy, 1373 kAllowLazy,
1374 kAllowNatives, 1374 kAllowNatives,
1375 kAllowHarmonyModules, 1375 kAllowHarmonyModules,
1376 kAllowHarmonyArrowFunctions, 1376 kAllowHarmonyArrowFunctions,
1377 kAllowHarmonyClasses, 1377 kAllowHarmonyClasses,
1378 kAllowHarmonyObjectLiterals, 1378 kAllowHarmonyObjectLiterals,
1379 kAllowHarmonyRestParameters, 1379 kAllowHarmonyRestParameters,
1380 kAllowHarmonySloppy, 1380 kAllowHarmonySloppy,
1381 kAllowHarmonyUnicode, 1381 kAllowHarmonyUnicode,
1382 kAllowHarmonyComputedPropertyNames, 1382 kAllowHarmonyComputedPropertyNames,
1383 kAllowStrongMode 1383 kAllowStrongMode,
1384 kAllowHarmonySpreadCalls
1384 }; 1385 };
1385 1386
1386 1387
1387 enum ParserSyncTestResult { 1388 enum ParserSyncTestResult {
1388 kSuccessOrError, 1389 kSuccessOrError,
1389 kSuccess, 1390 kSuccess,
1390 kError 1391 kError
1391 }; 1392 };
1392 1393
1393 template <typename Traits> 1394 template <typename Traits>
1394 void SetParserFlags(i::ParserBase<Traits>* parser, 1395 void SetParserFlags(i::ParserBase<Traits>* parser,
1395 i::EnumSet<ParserFlag> flags) { 1396 i::EnumSet<ParserFlag> flags) {
1396 parser->set_allow_lazy(flags.Contains(kAllowLazy)); 1397 parser->set_allow_lazy(flags.Contains(kAllowLazy));
1397 parser->set_allow_natives(flags.Contains(kAllowNatives)); 1398 parser->set_allow_natives(flags.Contains(kAllowNatives));
1398 parser->set_allow_harmony_modules(flags.Contains(kAllowHarmonyModules)); 1399 parser->set_allow_harmony_modules(flags.Contains(kAllowHarmonyModules));
1399 parser->set_allow_harmony_object_literals( 1400 parser->set_allow_harmony_object_literals(
1400 flags.Contains(kAllowHarmonyObjectLiterals)); 1401 flags.Contains(kAllowHarmonyObjectLiterals));
1401 parser->set_allow_harmony_arrow_functions( 1402 parser->set_allow_harmony_arrow_functions(
1402 flags.Contains(kAllowHarmonyArrowFunctions)); 1403 flags.Contains(kAllowHarmonyArrowFunctions));
1403 parser->set_allow_harmony_classes(flags.Contains(kAllowHarmonyClasses)); 1404 parser->set_allow_harmony_classes(flags.Contains(kAllowHarmonyClasses));
1404 parser->set_allow_harmony_rest_params( 1405 parser->set_allow_harmony_rest_params(
1405 flags.Contains(kAllowHarmonyRestParameters)); 1406 flags.Contains(kAllowHarmonyRestParameters));
1407 parser->set_allow_harmony_spreadcalls(
1408 flags.Contains(kAllowHarmonySpreadCalls));
1406 parser->set_allow_harmony_sloppy(flags.Contains(kAllowHarmonySloppy)); 1409 parser->set_allow_harmony_sloppy(flags.Contains(kAllowHarmonySloppy));
1407 parser->set_allow_harmony_unicode(flags.Contains(kAllowHarmonyUnicode)); 1410 parser->set_allow_harmony_unicode(flags.Contains(kAllowHarmonyUnicode));
1408 parser->set_allow_harmony_computed_property_names( 1411 parser->set_allow_harmony_computed_property_names(
1409 flags.Contains(kAllowHarmonyComputedPropertyNames)); 1412 flags.Contains(kAllowHarmonyComputedPropertyNames));
1410 parser->set_allow_strong_mode(flags.Contains(kAllowStrongMode)); 1413 parser->set_allow_strong_mode(flags.Contains(kAllowStrongMode));
1411 } 1414 }
1412 1415
1413 1416
1414 void TestParserSyncWithFlags(i::Handle<i::String> source, 1417 void TestParserSyncWithFlags(i::Handle<i::String> source,
1415 i::EnumSet<ParserFlag> flags, 1418 i::EnumSet<ParserFlag> flags,
(...skipping 3681 matching lines...) Expand 10 before | Expand all | Expand 10 after
5097 5100
5098 static const ParserFlag always_flags[] = {kAllowHarmonyRestParameters}; 5101 static const ParserFlag always_flags[] = {kAllowHarmonyRestParameters};
5099 5102
5100 // In strict mode, the error is using "eval" or "arguments" as parameter names 5103 // In strict mode, the error is using "eval" or "arguments" as parameter names
5101 // In sloppy mode, the error is that eval / arguments are duplicated 5104 // In sloppy mode, the error is that eval / arguments are duplicated
5102 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, 5105 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags,
5103 arraysize(always_flags)); 5106 arraysize(always_flags));
5104 } 5107 }
5105 5108
5106 5109
5110 TEST(SpreadCall) {
5111 const char* context_data[][2] = {{"function fn() { 'use strict';} fn(", ");"},
5112 {"function fn() {} fn(", ");"},
5113 {NULL, NULL}};
5114
5115 const char* data[] = {
5116 "...([1, 2, 3])", "...'123', ...'456'", "...new Set([1, 2, 3]), 4",
5117 "1, ...[2, 3], 4", "...Array(...[1,2,3,4])", "...NaN",
5118 "0, 1, ...[2, 3, 4], 5, 6, 7, ...'89'",
5119 "0, 1, ...[2, 3, 4], 5, 6, 7, ...'89', 10",
5120 "...[0, 1, 2], 3, 4, 5, 6, ...'7', 8, 9",
5121 "...[0, 1, 2], 3, 4, 5, 6, ...'7', 8, 9, ...[10]", NULL};
5122
5123 static const ParserFlag always_flags[] = {kAllowHarmonySpreadCalls};
5124
5125 RunParserSyncTest(context_data, data, kSuccess, NULL, 0, always_flags,
5126 arraysize(always_flags));
5127 }
5128
5129
5130 TEST(SpreadCallErrors) {
5131 const char* context_data[][2] = {{"function fn() { 'use strict';} fn(", ");"},
5132 {"function fn() {} fn(", ");"},
5133 {NULL, NULL}};
5134
5135 const char* data[] = {"(...[1, 2, 3])", "......[1,2,3]", NULL};
5136
5137 static const ParserFlag always_flags[] = {kAllowHarmonySpreadCalls};
5138
5139 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags,
5140 arraysize(always_flags));
5141 }
5142
5143
5144 TEST(BadRestSpread) {
5145 const char* context_data[][2] = {{"function fn() { 'use strict';", "} fn();"},
5146 {"function fn() { ", "} fn();"},
5147 {NULL, NULL}};
5148 const char* data[] = {"return ...[1,2,3];", "var ...x = [1,2,3];",
5149 "var [...x,] = [1,2,3];", "var [...x, y] = [1,2,3];",
5150 "var {...x} = [1,2,3];", "var { x } = {x: ...[1,2,3]}",
5151 NULL};
5152 RunParserSyncTest(context_data, data, kError, NULL, 0, NULL, 0);
5153 }
5154
5155
5107 TEST(LexicalScopingSloppyMode) { 5156 TEST(LexicalScopingSloppyMode) {
5108 const char* context_data[][2] = { 5157 const char* context_data[][2] = {
5109 {"", ""}, 5158 {"", ""},
5110 {"function f() {", "}"}, 5159 {"function f() {", "}"},
5111 {"{", "}"}, 5160 {"{", "}"},
5112 {NULL, NULL}}; 5161 {NULL, NULL}};
5113 const char* bad_data[] = { 5162 const char* bad_data[] = {
5114 "let x = 1;", 5163 "let x = 1;",
5115 "for(let x = 1;;){}", 5164 "for(let x = 1;;){}",
5116 "for(let x of []){}", 5165 "for(let x of []){}",
(...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after
5950 v8::Script::Compile(v8_str(script3)); 5999 v8::Script::Compile(v8_str(script3));
5951 CHECK(try_catch2.HasCaught()); 6000 CHECK(try_catch2.HasCaught());
5952 v8::String::Utf8Value exception(try_catch2.Exception()); 6001 v8::String::Utf8Value exception(try_catch2.Exception());
5953 CHECK_EQ(0, 6002 CHECK_EQ(0,
5954 strcmp( 6003 strcmp(
5955 "ReferenceError: In strong mode, using an undeclared global " 6004 "ReferenceError: In strong mode, using an undeclared global "
5956 "variable 'not_there3' is not allowed", 6005 "variable 'not_there3' is not allowed",
5957 *exception)); 6006 *exception));
5958 } 6007 }
5959 } 6008 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698