1/*
2* The contents of this file are subject to the Netscape Public
3* License Version 1.1 (the "License"); you may not use this file
4* except in compliance with the License. You may obtain a copy of
5* the License at http://www.mozilla.org/NPL/
6*
7* Software distributed under the License is distributed on an "AS
8* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
9* implied. See the License for the specific language governing
10* rights and limitations under the License.
11*
12* The Original Code is mozilla.org code.
13*
14* The Initial Developer of the Original Code is Netscape
15* Communications Corporation.  Portions created by Netscape are
16* Copyright (C) 1998 Netscape Communications Corporation. All
17* Rights Reserved.
18*
19* Contributor(s): pschwartau@netscape.com
20*                            26 November 2000
21*
22*
23*SUMMARY: Testing numeric literals that begin with 0.
24*This test arose from Bugzilla bug 49233.
25*The best explanation is from jsscan.c:
26*
27*     "We permit 08 and 09 as decimal numbers, which makes
28*     our behaviour a superset of the ECMA numeric grammar.
29*     We might not always be so permissive, so we warn about it."
30*
31*Thus an expression 010 will evaluate, as always, as an octal (to 8).
32*However, 018 will evaluate as a decimal, to 18. Even though the
33*user began the expression as an octal, he later used a non-octal
34*digit. We forgive this and assume he intended a decimal. If the
35*JavaScript "strict" option is set though, we will give a warning.
36*/
37//-------------------------------------------------------------------------------------------------
38var bug = '49233';
39var summary = 'Testing numeric literals that begin with 0';
40var statprefix = 'Testing ';
41var quote = "'";
42var status = new Array();
43var actual = new Array();
44var expect = new Array();
45
46
47status[0]=showStatus('01')
48actual[0]=01
49expect[0]=1
50
51status[1]=showStatus('07')
52actual[1]=07
53expect[1]=7
54
55status[2]=showStatus('08')
56actual[2]=08
57expect[2]=8
58
59status[3]=showStatus('09')
60actual[3]=09
61expect[3]=9
62
63status[4]=showStatus('010')
64actual[4]=010
65expect[4]=8
66
67status[5]=showStatus('017')
68actual[5]=017
69expect[5]=15
70
71status[6]=showStatus('018')
72actual[6]=018
73expect[6]=18
74
75status[7]=showStatus('019')
76actual[7]=019
77expect[7]=19
78
79status[8]=showStatus('079')
80actual[8]=079
81expect[8]=79
82
83status[9]=showStatus('0079')
84actual[9]=0079
85expect[9]=79
86
87status[10]=showStatus('099')
88actual[10]=099
89expect[10]=99
90
91status[11]=showStatus('0099')
92actual[11]=0099
93expect[11]=99
94
95status[12]=showStatus('000000000077')
96actual[12]=000000000077
97expect[12]=63
98
99status[13]=showStatus('000000000078')
100actual[13]=000000000078
101expect[13]=78
102
103status[14]=showStatus('0000000000770000')
104actual[14]=0000000000770000
105expect[14]=258048
106
107status[15]=showStatus('0000000000780000')
108actual[15]=0000000000780000
109expect[15]=780000
110
111status[16]=showStatus('0765432198')
112actual[16]=0765432198
113expect[16]=765432198
114
115status[17]=showStatus('00076543219800')
116actual[17]=00076543219800
117expect[17]=76543219800
118
119status[18]=showStatus('0000001001007')
120actual[18]=0000001001007
121expect[18]=262663
122
123status[19]=showStatus('0000001001009')
124actual[19]=0000001001009
125expect[19]=1001009
126
127status[20]=showStatus('070')
128actual[20]=070
129expect[20]=56
130
131status[21]=showStatus('080')
132actual[21]=080
133expect[21]=80
134
135
136
137//-------------------------------------------------------------------------------------------------
138test();
139//-------------------------------------------------------------------------------------------------
140
141
142function showStatus(msg)
143{
144  return (statprefix  + quote  +  msg  + quote);
145}
146
147
148function test()
149{
150  enterFunc ('test');
151  printBugNumber (bug);
152  printStatus (summary);
153
154
155  for (i=0; i !=status.length; i++)
156  {
157    reportCompare (expect[i], actual[i], status[i]);
158  }
159
160  exitFunc ('test');
161}