rhino1.7.7.testsrc.tests.ecma_3.Function.regress-97921.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of rhino Show documentation
Show all versions of rhino Show documentation
Rhino is an open-source implementation of JavaScript written entirely in Java. It is typically
embedded into Java applications to provide scripting to end users.
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
* Date: 10 September 2001
*
* SUMMARY: Testing with() statement with nested functions
* See http://bugzilla.mozilla.org/show_bug.cgi?id=97921
*
* Brendan: "The bug is peculiar to functions that have formal parameters,
* but that are called with fewer actual arguments than the declared number
* of formal parameters."
*/
//-----------------------------------------------------------------------------
var gTestfile = 'regress-97921.js';
var UBound = 0;
var BUGNUMBER = 97921;
var summary = 'Testing with() statement with nested functions';
var cnYES = 'Inner value === outer value';
var cnNO = "Inner value !== outer value!";
var status = '';
var statusitems = [];
var actual = '';
var actualvalues = [];
var expect= '';
var expectedvalues = [];
var outerValue = '';
var innerValue = '';
var useWith = '';
function F(i)
{
i = 0;
if(useWith) with(1){i;}
i++;
outerValue = i; // capture value of i in outer function
F1 = function() {innerValue = i;}; // capture value of i in inner function
F1();
}
status = inSection(1);
useWith=false;
F(); // call F without supplying the argument
actual = innerValue === outerValue;
expect = true;
addThis();
status = inSection(2);
useWith=true;
F(); // call F without supplying the argument
actual = innerValue === outerValue;
expect = true;
addThis();
function G(i)
{
i = 0;
with (new Object()) {i=100};
i++;
outerValue = i; // capture value of i in outer function
G1 = function() {innerValue = i;}; // capture value of i in inner function
G1();
}
status = inSection(3);
G(); // call G without supplying the argument
actual = innerValue === 101;
expect = true;
addThis();
status = inSection(4);
G(); // call G without supplying the argument
actual = innerValue === outerValue;
expect = true;
addThis();
//-----------------------------------------------------------------------------
test();
//-----------------------------------------------------------------------------
function addThis()
{
statusitems[UBound] = status;
actualvalues[UBound] = areTheseEqual(actual);
expectedvalues[UBound] = areTheseEqual(expect);
UBound++;
}
function test()
{
enterFunc ('test');
printBugNumber(BUGNUMBER);
printStatus (summary);
for (var i = 0; i < UBound; i++)
{
reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
}
exitFunc ('test');
}
function areTheseEqual(yes)
{
return yes? cnYES : cnNO
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy