From f421f7801823cb76866e6d3f52f302395e3ab81c Mon Sep 17 00:00:00 2001 From: Jeff Walden Date: Mon, 24 Jan 2011 16:49:26 -0800 Subject: [PATCH] Add tests for behavior of function statements inside with. r=tests --HG-- extra : rebase_source : c8088e21fb5aeca0b8f62dd8364435ac67e6aa6e --- .../extensions/function-definition-with.js | 52 +++++++++++++++++++ js/src/tests/ecma_5/extensions/jstests.list | 1 + 2 files changed, 53 insertions(+) create mode 100644 js/src/tests/ecma_5/extensions/function-definition-with.js diff --git a/js/src/tests/ecma_5/extensions/function-definition-with.js b/js/src/tests/ecma_5/extensions/function-definition-with.js new file mode 100644 index 000000000000..cd63ead2c4a2 --- /dev/null +++ b/js/src/tests/ecma_5/extensions/function-definition-with.js @@ -0,0 +1,52 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 577325; +var summary = 'Implement the ES5 algorithm for processing function statements'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var called, obj; + +function inFile1() { return "in file"; } +called = false; +obj = { set inFile1(v) { called = true; } }; +with (obj) + function inFile1() { return "in file in with"; }; +assertEq(inFile1(), "in file in with"); +assertEq("set" in Object.getOwnPropertyDescriptor(obj, "inFile1"), true); +assertEq(called, false); + +evaluate("function notInFile1() { return 'not in file'; }"); +called = false; +obj = { set notInFile1(v) { called = true; return "not in file 2"; } }; +with (obj) + function notInFile1() { return "not in file in with"; }; +assertEq(notInFile1(), "not in file in with"); +assertEq("set" in Object.getOwnPropertyDescriptor(obj, "notInFile1"), true); +assertEq(called, false); + +function inFile2() { return "in file 1"; } +called = false; +obj = + Object.defineProperty({}, "inFile2", + { value: 42, configurable: false, enumerable: false }); +with (obj) + function inFile2() { return "in file 2"; }; +assertEq(inFile2(), "in file 2"); +assertEq(obj.inFile2, 42); + + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/js/src/tests/ecma_5/extensions/jstests.list b/js/src/tests/ecma_5/extensions/jstests.list index ee07c695bfa4..a2f3966a0999 100644 --- a/js/src/tests/ecma_5/extensions/jstests.list +++ b/js/src/tests/ecma_5/extensions/jstests.list @@ -23,3 +23,4 @@ script bug496985.js script bug566661.js script iterator-in-catch.js script strict-function-statements.js +script function-definition-with.js