Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 // Flags: --harmony_arrow_functions | |
| 6 | |
| 7 | |
| 8 // Test basic arrow functions syntax. | |
| 9 | |
| 10 // Bracketed block body. | |
| 11 var bracketedEmptyBody = () => {}; | |
| 12 var bracketedNoArgs = () => { return 42; }; | |
| 13 var bracketedIdent = x => { return x; }; | |
| 14 var bracketedIdentParens = (x) => { return x; }; | |
| 15 var bracketedAddTwo = (x, y) => { return x + y; }; | |
| 16 var bracketedAddThree = (x, y, z) => { return x + y + z; }; | |
| 17 | |
| 18 // Single expression body. | |
| 19 var noArgs = () => 24; | |
| 20 var ident = x => x; | |
| 21 var square = x => x * x; | |
| 22 var addTwo = (x, y) => x + y; | |
| 23 var addThree = (x, y, z) => x + y + z; | |
| 24 var mutateObject = (x, y) => x.a = y; | |
| 25 var objectLiteral = () => ({"value": 42}); | |
| 26 var returnsArrowFun = x => y => x + y; | |
| 27 var returnsArrowFun2 = (x, y) => (u, v) => x*u + y*v; | |
| 28 var objectLiteralResult = ({ value: 42 }); | |
|
marja
2014/05/26 12:46:06
Pls test that these yield the expected results, to
| |
| 29 | |
| 30 var yIsUndefined = x => x, y; | |
| 31 assertEquals(y, undefined); | |
| 32 | |
| 33 // This is a valid arrow function literal which is invoked right away | |
| 34 assertEquals((x => x + 1)(1), 2); | |
| 35 | |
| 36 // Parsing arrow functions introduces a return in ParseAssignmentExpression | |
| 37 // when a closing parenthesis is found. This tests that errors are still | |
| 38 // raised when closing them incorrectly. | |
| 39 assertThrows(");", SyntaxError); | |
|
marja
2014/05/26 12:46:06
You can move these "parsing should fail" cases to
| |
| 40 assertThrows(") => 0;", SyntaxError); | |
| 41 | |
| 42 assertThrows("=> 0;", SyntaxError); // Empty param list n ot optional | |
| 43 assertThrows("var f = =>;", SyntaxError); // No arguments or bo dy | |
| 44 assertThrows("var f = () =>;", SyntaxError); // No body | |
| 45 assertThrows("var f = => {};", SyntaxError); // No argument list o r single argument | |
| 46 assertThrows("var f = ) => {};", SyntaxError); // No opening paren i n parameter list | |
| 47 assertThrows("var f = , => {};", SyntaxError); // Comma without open ing parens | |
| 48 assertThrows("var f = (,) => {};", SyntaxError); // Just one comma in parameter list | |
| 49 assertThrows("var f = x, y => {};", SyntaxError); // Multiple args with out parens | |
| 50 assertThrows("var f = return => {};", SyntaxError); // Argument name is r eserved | |
| 51 assertThrows("var f = (a,if) => {};", SyntaxError); // Argument name in l ist is reserved | |
| 52 assertThrows("var f = (a * b) => {};", SyntaxError); // Comma must be the binop in between parameters | |
| 53 assertThrows("var f = () => {'value': 42};", SyntaxError); // Object literal mus t be parenthesized | |
| 54 | |
| 55 // Parameter lists with extra parens should be recognized as errors. | |
| 56 assertThrows("(()) => 0;", SyntaxError); | |
| 57 assertThrows("((x)) => 0;", SyntaxError); | |
| 58 assertThrows("((x, y)) => 0;", SyntaxError); | |
| 59 assertThrows("(x, (y)) => 0;", SyntaxError); | |
|
marja
2014/05/26 12:46:06
You should add tests for different (legal and ille
| |
| OLD | NEW |