diff options
Diffstat (limited to 'src/3rdparty/v8/test/mjsunit/harmony/block-for.js')
-rw-r--r-- | src/3rdparty/v8/test/mjsunit/harmony/block-for.js | 146 |
1 files changed, 0 insertions, 146 deletions
diff --git a/src/3rdparty/v8/test/mjsunit/harmony/block-for.js b/src/3rdparty/v8/test/mjsunit/harmony/block-for.js deleted file mode 100644 index e84f0d2..0000000 --- a/src/3rdparty/v8/test/mjsunit/harmony/block-for.js +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2011 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Flags: --harmony-scoping - -// TODO(ES6): properly activate extended mode -"use strict"; - -function props(x) { - var array = []; - for (let p in x) array.push(p); - return array.sort(); -} - -assertEquals(0, props({}).length); -assertEquals(1, props({x:1}).length); -assertEquals(2, props({x:1, y:2}).length); - -assertArrayEquals(["x"], props({x:1})); -assertArrayEquals(["x", "y"], props({x:1, y:2})); -assertArrayEquals(["x", "y", "zoom"], props({x:1, y:2, zoom:3})); - -assertEquals(0, props([]).length); -assertEquals(1, props([1]).length); -assertEquals(2, props([1,2]).length); - -assertArrayEquals(["0"], props([1])); -assertArrayEquals(["0", "1"], props([1,2])); -assertArrayEquals(["0", "1", "2"], props([1,2,3])); - -var o = {}; -var a = []; -let i = "outer_i"; -let s = "outer_s"; -for (let i = 0x0020; i < 0x01ff; i+=2) { - let s = 'char:' + String.fromCharCode(i); - a.push(s); - o[s] = i; -} -assertArrayEquals(a, props(o)); -assertEquals(i, "outer_i"); -assertEquals(s, "outer_s"); - -var a = []; -assertEquals(0, props(a).length); -a[Math.pow(2,30)-1] = 0; -assertEquals(1, props(a).length); -a[Math.pow(2,31)-1] = 0; -assertEquals(2, props(a).length); -a[1] = 0; -assertEquals(3, props(a).length); - -var result = ''; -for (let p in {a : [0], b : 1}) { result += p; } -assertEquals('ab', result); - -var result = ''; -for (let p in {a : {v:1}, b : 1}) { result += p; } -assertEquals('ab', result); - -var result = ''; -for (let p in { get a() {}, b : 1}) { result += p; } -assertEquals('ab', result); - -var result = ''; -for (let p in { get a() {}, set a(x) {}, b : 1}) { result += p; } -assertEquals('ab', result); - - -// Check that there is exactly one variable without initializer -// in a for-in statement with let variables. -// TODO(ES6): properly activate extended mode -assertThrows("function foo() { 'use strict'; for (let in {}) { } }", SyntaxError); -assertThrows("function foo() { 'use strict'; for (let x = 3 in {}) { } }", SyntaxError); -assertThrows("function foo() { 'use strict'; for (let x, y in {}) { } }", SyntaxError); -assertThrows("function foo() { 'use strict'; for (let x = 3, y in {}) { } }", SyntaxError); -assertThrows("function foo() { 'use strict'; for (let x, y = 4 in {}) { } }", SyntaxError); -assertThrows("function foo() { 'use strict'; for (let x = 3, y = 4 in {}) { } }", SyntaxError); - - -// In a normal for statement the iteration variable is not -// freshly allocated for each iteration. -function closures1() { - let a = []; - for (let i = 0; i < 5; ++i) { - a.push(function () { return i; }); - } - for (let j = 0; j < 5; ++j) { - assertEquals(5, a[j]()); - } -} -closures1(); - - -function closures2() { - let a = [], b = []; - for (let i = 0, j = 10; i < 5; ++i, ++j) { - a.push(function () { return i; }); - b.push(function () { return j; }); - } - for (let k = 0; k < 5; ++k) { - assertEquals(5, a[k]()); - assertEquals(15, b[k]()); - } -} -closures2(); - - -// In a for-in statement the iteration variable is fresh -// for earch iteration. -function closures3(x) { - let a = []; - for (let p in x) { - a.push(function () { return p; }); - } - let k = 0; - for (let q in x) { - assertEquals(q, a[k]()); - ++k; - } -} -closures3({a : [0], b : 1, c : {v : 1}, get d() {}, set e(x) {}}); |