1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
|
/*
* The contents of this file are subject to the Netscape 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/NPL/
*
* 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 mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation.
* All Rights Reserved.
*
* Contributor(s): brendan@mozilla.org, pschwartau@netscape.com
* Date: 09 October 2001
*
* SUMMARY: Regression test for Bugzilla bug 99663
* See http://bugzilla.mozilla.org/show_bug.cgi?id=99663
*
*******************************************************************************
*******************************************************************************
* ESSENTIAL!: this test should contain, or be loaded after, a call to
*
* version(120);
*
* Only JS version 1.2 or less has the behavior we're expecting here -
*
* Brendan: "The JS_SetVersion stickiness is necessary for tests such as
* this one to work properly. I think the existing js/tests have been lucky
* in dodging the buggy way that JS_SetVersion's effect can be undone by
* function return."
*
* Note: it is the function statements for f1(), etc. that MUST be compiled
* in JS version 1.2 or less for the test to pass -
*
*******************************************************************************
*******************************************************************************
*
*
* NOTE: the test uses the |it| object of SpiderMonkey; don't run it in Rhino -
*
*/
//-----------------------------------------------------------------------------
var UBound = 0;
var bug = 99663;
var summary = 'Regression test for Bugzilla bug 99663';
/*
* This testcase expects error messages containing
* the phrase 'read-only' or something similar -
*/
var READONLY = /read\s*-?\s*only/;
var READONLY_TRUE = 'a "read-only" error';
var READONLY_FALSE = 'Error: ';
var FAILURE = 'NO ERROR WAS GENERATED!';
var status = '';
var actual = '';
var expect= '';
var statusitems = [];
var expectedvalues = [];
var actualvalues = [];
/*
* These MUST be compiled in JS1.2 or less for the test to work - see above
*/
function f1()
{
with (it)
{
for (rdonly in this);
}
}
function f2()
{
for (it.rdonly in this);
}
function f3(s)
{
for (it[s] in this);
}
/*
* Begin testing by capturing actual vs. expected values.
* Initialize to FAILURE; this will get reset if all goes well -
*/
actual = FAILURE;
try
{
f1();
}
catch(e)
{
actual = readOnly(e.message);
}
expect= READONLY_TRUE;
status = 'Section 1 of test - got ' + actual;
addThis();
actual = FAILURE;
try
{
f2();
}
catch(e)
{
actual = readOnly(e.message);
}
expect= READONLY_TRUE;
status = 'Section 2 of test - got ' + actual;
addThis();
actual = FAILURE;
try
{
f3('rdonly');
}
catch(e)
{
actual = readOnly(e.message);
}
expect= READONLY_TRUE;
status = 'Section 3 of test - got ' + actual;
addThis();
//-----------------------------------------------------------------------------
test();
//-----------------------------------------------------------------------------
function readOnly(msg)
{
if (msg.match(READONLY))
return READONLY_TRUE;
return READONLY_FALSE + msg;
}
function addThis()
{
statusitems[UBound] = status;
actualvalues[UBound] = actual;
expectedvalues[UBound] = expect;
UBound++;
}
function test()
{
writeLineToLog ('Bug Number ' + bug);
writeLineToLog ('STATUS: ' + summary);
for (var i=0; i<UBound; i++)
{
writeTestCaseResult(expectedvalues[i], actualvalues[i], statusitems[i]);
}
}
|