diff -r 4ebc2e2fb97c -r 71c04702a3d5 test/nashorn/script/basic/NASHORN-19.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/nashorn/script/basic/NASHORN-19.js Tue Sep 12 19:03:39 2017 +0200 @@ -0,0 +1,279 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * NASHORN-19: with blocks in various scopes and breaking from them if they are inloops + * (also continues) + * + * @test + * @run + */ + + +var myvalue = "hello"; + +var myscope = { + myvalue: 11 +}; + +do { + with(myscope) { + myvalue = 12; + break; + } +} while (false); + +if (myvalue != 'hello') { + throw "expecting to be hello"; +} else { + print("value is 'hello' as expected"); +} + +print("\n"); + +function ten() { + return 0xa; +} + +//make sure the scope works outside functions too +print("starting 0"); +var value = "hello"; +var scope = {value:10}; +var scope2 = {value:20}; +while (true) { + with (scope) { + print(value); + value = 11; + print(value); + with (scope2) { + print(value); + value = 21; + print(value); + break; + } + } +} + +print(value); +print("\n"); + +//two level scope +function test1() { + var value = "hello"; + var scope = {value:10}; + var scope2 = {value:20}; + while (true) { + with (scope) { + print(value); + value = 11; + print(value); + with (scope2) { + print(value); + value = 21; + print(value); + break; + } + } + } + + print(value); +} + +//one level scope +function test2() { + var value = "hello"; + var scope = {value:10}; + while (true) { + with (scope) { + print(value); + value = 11; + print(value); + if (value > ten()) { + break; + } + } + } + print(value); +} + +//continue two levels +function test3() { + var value = "hello"; + var scope = {value:10}; + var scope2 = {value:20}; + var outer = 0; + while (outer < 5) { + var i=0; + while (i < 10) { + with(scope) { + print("loop header "+i); + with (scope2) { + value = 11; + i++; + if ((i & 1) != 0) { + print("continue"); + continue; + } + } + } + print(value); + } + outer++; + } +} + +//continue one level +function test4() { + var value = "hello"; + var scope = {value:10}; + var i=0; + while (i < 10) { + print("loop header "+i); + with (scope) { + value = 11; + i++; + if ((i & 1) != 0) { + print("continue"); + continue; + } + } + } + print(value); +} + + +//labelled continue; +function test5() { + var value = "hello"; + var scope = {value:10}; + var scope2 = {value:20}; + var outer = 0; + outer_label: + while (outer < 5) { + var i=0; + while (i < 10) { + with(scope) { + print("loop header "+i); + with (scope2) { + value = 11; + i++; + if ((i & 1) != 0) { + print("continue"); + outer++; + continue outer_label; + } + } + } + print(value); + } + } +} + +//labelled break +function test6() { + var value = "hello"; + var scope = {value:10}; + var scope2 = {value:20}; + outer: + { + var i=0; + while (i < 10) { + with(scope) { + print("loop header "+i); + with (scope2) { + value = 11; + i++; + if ((i & 1) != 0) { + print("break"); + break outer; + } + } + } + print(value); + } + } +} + +//exceptions in one scope and then the other +function test7() { + var value = "hello"; + var scope = {value:10}; + var scope2 = {value:20}; + var global = false; + try { + with(scope) { + try { + print(value); + value = 4711; + print(value); + with(scope2) { + print(value); + value = 17; + print(value); + global = true; + throw "inner"; + } + } catch (ei) { + print(ei); + print(value); + if (global) { + throw "outer"; + } + } + } + } catch (eo) { + print(eo); + print(value); + } + print(value); +} + + +print("starting 1"); +test1(); +print("\n"); + +print("starting 2"); +test2(); +print("\n"); + +print("starting 3"); +test3(); +print("\n"); + +print("starting 4"); +test4(); +print("\n"); + +print("starting 5"); +test5(); +print("\n"); + +print("starting 6"); +test6(); +print("\n"); + +print("starting 7"); +test7(); +print("\n"); +