Home | History | Annotate | Download | only in harmony
      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 // Arrow functions are like functions, except they throw when using the
      8 // "new" operator on them.
      9 assertEquals("function", typeof (() => {}));
     10 assertEquals(Function.prototype, Object.getPrototypeOf(() => {}));
     11 assertThrows(function() { new (() => {}); }, TypeError);
     12 assertFalse("prototype" in (() => {}));
     13 
     14 // Check the different syntax variations
     15 assertEquals(1, (() => 1)());
     16 assertEquals(2, (a => a + 1)(1));
     17 assertEquals(3, (() => { return 3; })());
     18 assertEquals(4, (a => { return a + 3; })(1));
     19 assertEquals(5, ((a, b) => a + b)(1, 4));
     20 assertEquals(6, ((a, b) => { return a + b; })(1, 5));
     21 
     22 // The following are tests from:
     23 // http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax
     24 
     25 // Empty arrow function returns undefined
     26 var empty = () => {};
     27 assertEquals(undefined, empty());
     28 
     29 // Single parameter case needs no parentheses around parameter list
     30 var identity = x => x;
     31 assertEquals(empty, identity(empty));
     32 
     33 // No need for parentheses even for lower-precedence expression body
     34 var square = x => x * x;
     35 assertEquals(9, square(3));
     36 
     37 // Parenthesize the body to return an object literal expression
     38 var key_maker = val => ({key: val});
     39 assertEquals(empty, key_maker(empty).key);
     40 
     41 // Statement body needs braces, must use 'return' explicitly if not void
     42 var evens = [0, 2, 4, 6, 8];
     43 assertEquals([1, 3, 5, 7, 9], evens.map(v => v + 1));
     44 
     45 var fives = [];
     46 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].forEach(v => {
     47   if (v % 5 === 0) fives.push(v);
     48 });
     49 assertEquals([5, 10], fives);
     50