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 |