michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: /* michael@0: * michael@0: * Date: 06 Mar 2002 michael@0: * SUMMARY: Testing cloned function objects michael@0: * See http://bugzilla.mozilla.org/show_bug.cgi?id=127557 michael@0: * michael@0: * Before this bug was fixed, this testcase would error when run: michael@0: * michael@0: * ReferenceError: h_peer is not defined michael@0: * michael@0: * The line |g.prototype = new Object| below is essential: this is michael@0: * what was confusing the engine in its attempt to look up h_peer michael@0: */ michael@0: //----------------------------------------------------------------------------- michael@0: var UBound = 0; michael@0: var BUGNUMBER = 127557; michael@0: var summary = 'Testing cloned function objects'; michael@0: var cnCOMMA = ','; michael@0: var status = ''; michael@0: var statusitems = []; michael@0: var actual = ''; michael@0: var actualvalues = []; michael@0: var expect= ''; michael@0: var expectedvalues = []; michael@0: michael@0: if (typeof clone == 'function') michael@0: { michael@0: status = inSection(1); michael@0: var f = evaluate("(function(x, y) {\n" + michael@0: " function h() { return h_peer(); }\n" + michael@0: " function h_peer() { return (x + cnCOMMA + y); }\n" + michael@0: " return h;\n" + michael@0: "})", michael@0: {compileAndGo: false}); michael@0: var g = clone(f); michael@0: g.prototype = new Object; michael@0: var h = g(5,6); michael@0: actual = h(); michael@0: expect = '5,6'; michael@0: addThis(); michael@0: } michael@0: else michael@0: { michael@0: reportCompare('Test not run', 'Test not run', 'shell only test requires clone()'); michael@0: } michael@0: michael@0: michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: test(); michael@0: //----------------------------------------------------------------------------- michael@0: michael@0: michael@0: michael@0: function addThis() michael@0: { michael@0: statusitems[UBound] = status; michael@0: actualvalues[UBound] = actual; michael@0: expectedvalues[UBound] = expect; michael@0: UBound++; michael@0: } michael@0: michael@0: michael@0: function test() michael@0: { michael@0: enterFunc('test'); michael@0: printBugNumber(BUGNUMBER); michael@0: printStatus(summary); michael@0: michael@0: for (var i=0; i