From 600ed206e2edc8f94ca51a3dcabab367c05517ae Mon Sep 17 00:00:00 2001 From: "bclary%bclary.com" Date: Thu, 14 Sep 2006 06:12:08 +0000 Subject: [PATCH] JavaScript Test - regression tests for bug 351070, by Jesse Ruderman, Brendan Eich git-svn-id: svn://10.0.0.236/trunk@211632 18797224-902f-48f8-a5cc-f745e15eee43 --- .../js/tests/js1_7/block/regress-351070-01.js | 73 +++++++++++++++ .../js/tests/js1_7/block/regress-351070-02.js | 89 ++++++++++++++++++ .../js/tests/js1_7/block/regress-351070-03.js | 92 +++++++++++++++++++ 3 files changed, 254 insertions(+) create mode 100755 mozilla/js/tests/js1_7/block/regress-351070-01.js create mode 100755 mozilla/js/tests/js1_7/block/regress-351070-02.js create mode 100755 mozilla/js/tests/js1_7/block/regress-351070-03.js diff --git a/mozilla/js/tests/js1_7/block/regress-351070-01.js b/mozilla/js/tests/js1_7/block/regress-351070-01.js new file mode 100755 index 00000000000..238e92a8f8a --- /dev/null +++ b/mozilla/js/tests/js1_7/block/regress-351070-01.js @@ -0,0 +1,73 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is JavaScript Engine testing utilities. + * + * The Initial Developer of the Original Code is + * Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): Jesse Ruderman + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +//----------------------------------------------------------------------------- +var bug = 351070; +var summary = 'decompilation of let declaration should not change scope'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber (bug); + printStatus (summary); + + var f = function () { var a = 2; if (!!true) let a = 3; return a; } + expect = 'function () { var a = 2; if (!!true) let a = 3; return a; }'; + actual = f + ''; + compareSource(expect, actual, summary); + + expect = 3; + actual = f(); + reportCompare(expect, actual, summary); + + f = function () { var a = 2; if (!!true) {let a = 3;} return a; } + expect = 'function () { var a = 2; if (!!true) { let a = 3;} return a; }'; + actual = f + ''; + compareSource(expect, actual, summary); + + expect = 2; + actual = f(); + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/mozilla/js/tests/js1_7/block/regress-351070-02.js b/mozilla/js/tests/js1_7/block/regress-351070-02.js new file mode 100755 index 00000000000..b046f611d3b --- /dev/null +++ b/mozilla/js/tests/js1_7/block/regress-351070-02.js @@ -0,0 +1,89 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is JavaScript Engine testing utilities. + * + * The Initial Developer of the Original Code is + * Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): Brendan Eich + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +//----------------------------------------------------------------------------- +var bug = 351070; +var summary = 'decompilation of let declaration should not change scope'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber (bug); + printStatus (summary); + + var pfx = "(function f() { var n = 2, a = 2; ", + decl = " let a = 3;", + end = " return a; })"; + + var table = [ + ["if (!!true)", ""], + ["if (!!true)", " else foopy();"], + ["if (!true); else", ""], + ["do ", " while (false);"], + ["while (--n)", ""], + ["for (--n;n;--n)", ""], + ["for (a in this)", ""], + ["with (this)", ""], + ]; + + expect = 3; + + for (i = 0; i < table.length; i++) { + var src = pfx + table[i][0] + decl + table[i][1] + end; + writeLineToLog('src: ' + src); + var fun = eval(src); + var testval = fun(); + reportCompare(expect, testval, summary + ': ' + src); + if (testval != expect) { + break; + } + writeLineToLog('uneval: ' + uneval(fun)); + var declsrc = '(' + + src.slice(1, -1).replace('function f', 'function f' + i) + ')'; + writeLineToLog('declsrc: ' + declsrc); + this['f' + i] = eval(declsrc); + writeLineToLog('f' + i + ': ' + this['f' + i]); + } + + exitFunc ('test'); +} diff --git a/mozilla/js/tests/js1_7/block/regress-351070-03.js b/mozilla/js/tests/js1_7/block/regress-351070-03.js new file mode 100755 index 00000000000..a8afa9102fb --- /dev/null +++ b/mozilla/js/tests/js1_7/block/regress-351070-03.js @@ -0,0 +1,92 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is JavaScript Engine testing utilities. + * + * The Initial Developer of the Original Code is + * Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): Brendan Eich + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +//----------------------------------------------------------------------------- +var bug = 351070; +var summary = 'decompilation of let declaration should not change scope'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber (bug); + printStatus (summary); + + var f; + + f = function (x){if (x) if (y) z; else let w } + expect = 'function (x){if (x) {if (y) { z; } else let w; }}'; + actual = f + ''; + compareSource(expect, actual, summary); + + f = function (x){if (x){ if (y) z;} else let w } + expect = 'function (x){if (x){ if (y) {z;}} else let w; }'; + actual = f + ''; + compareSource(expect, actual, summary); + + f = function (x){if (x){ if (y) let z;} else let w } + expect = 'function (x){if (x){ if (y) let z;} else let w; }'; + actual = f + ''; + compareSource(expect, actual, summary); + + f = function f(){var a = 2; if (x) {let a = 3; print(a)} return a} + expect = 'function f(){var a = 2; if (x) {let a = 3; print(a);} return a;}'; + actual = f + ''; + compareSource(expect, actual, summary); + + f = function f(){var a = 2; if (x) {print(a);let a = 3} return a} + expect = 'function f(){var a = 2; if (x) {print(a);let a = 3;} return a;}'; + actual = f + ''; + compareSource(expect, actual, summary); + + f = function f(){var a = 2; if (x) {let a = 3} return a} + expect = 'function f(){var a = 2; if (x) {let a = 3;} return a;}'; + actual = f + ''; + compareSource(expect, actual, summary); + + f = function f(){var a = 2; if (x) let a = 3; return a} + expect = 'function f(){var a = 2; if (x) let a = 3; return a;}'; + actual = f + ''; + compareSource(expect, actual, summary); + + exitFunc ('test'); +}