1/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2*
3* The contents of this file are subject to the Netscape Public
4* License Version 1.1 (the "License"); you may not use this file
5* except in compliance with the License. You may obtain a copy of
6* the License at http://www.mozilla.org/NPL/
7*
8* Software distributed under the License is distributed on an "AS
9* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
10* implied. See the License for the specific language governing
11* rights and limitations under the License.
12*
13* The Original Code is Mozilla Communicator client code, released March
14* 31, 1998.
15*
16* The Initial Developer of the Original Code is Netscape Communications
17* Corporation. Portions created by Netscape are
18* Copyright (C) 1998 Netscape Communications Corporation. All
19* Rights Reserved.
20*
21* Contributor(s): Rob Ginda rginda@netscape.com
22*
23* SUMMARY: New properties fileName, lineNumber have been added to Error objects
24* in SpiderMonkey. These are non-ECMA extensions and do not exist in Rhino.
25*
26* See http://bugzilla.mozilla.org/show_bug.cgi?id=50447
27*/
28//-----------------------------------------------------------------------------
29var bug = 50447;
30var summary = 'Test (non-ECMA) Error object properties fileName, lineNumber';
31
32
33//-----------------------------------------------------------------------------
34test();
35//-----------------------------------------------------------------------------
36
37
38function test()
39{
40  enterFunc ('test');
41  printBugNumber (bug);
42  printStatus (summary);
43
44  testRealError();
45  test1();
46  test2();
47  test3();
48  test4();
49
50  exitFunc('test');
51}
52
53
54function testRealError()
55{
56    /* throw a real error, and see what it looks like */
57    enterFunc ("testRealError");
58
59    try
60    {
61        blabla;
62    }
63    catch (e)
64    {
65        if (e.fileName.search (/-50447\.js$/i) == -1)
66            reportFailure ("expected fileName to end with '-50447.js'");
67
68        reportCompare (61, e.lineNumber,
69                       "lineNumber property returned unexpected value.");
70    }
71
72    exitFunc ("testRealError");
73}
74
75
76function test1()
77{
78    /* generate an error with msg, file, and lineno properties */
79    enterFunc ("test1");
80
81    var e = new InternalError ("msg", "file", 2);
82    reportCompare ("(new InternalError(\"msg\", \"file\", 2))",
83                   e.toSource(),
84                   "toSource() returned unexpected result.");
85    reportCompare ("file", e.fileName,
86                   "fileName property returned unexpected value.");
87    reportCompare (2, e.lineNumber,
88                   "lineNumber property returned unexpected value.");
89
90    exitFunc ("test1");
91}
92
93
94function test2()
95{
96    /* generate an error with only msg property */
97    enterFunc ("test2");
98
99    var e = new InternalError ("msg");
100    reportCompare ("(new InternalError(\"msg\", \"\"))",
101                   e.toSource(),
102                   "toSource() returned unexpected result.");
103    reportCompare ("", e.fileName,
104                   "fileName property returned unexpected value.");
105    reportCompare (0, e.lineNumber,
106                   "lineNumber property returned unexpected value.");
107
108    exitFunc ("test2");
109}
110
111
112function test3()
113{
114    /* generate an error with only msg and lineNo properties */
115    enterFunc ("test3");
116
117    var e = new InternalError ("msg");
118    e.lineNumber = 10;
119    reportCompare ("(new InternalError(\"msg\", \"\", 10))",
120                   e.toSource(),
121                   "toSource() returned unexpected result.");
122    reportCompare ("", e.fileName,
123                   "fileName property returned unexpected value.");
124    reportCompare (10, e.lineNumber,
125                   "lineNumber property returned unexpected value.");
126
127    exitFunc ("test3");
128}
129
130
131function test4()
132{
133    /* generate an error with only msg and filename properties */
134    enterFunc ("test4");
135
136    var e = new InternalError ("msg", "file");
137    reportCompare ("(new InternalError(\"msg\", \"file\"))",
138                   e.toSource(),
139                   "toSource() returned unexpected result.");
140    reportCompare ("file", e.fileName,
141                   "fileName property returned unexpected value.");
142    reportCompare (0, e.lineNumber,
143                   "lineNumber property returned unexpected value.");
144
145    exitFunc ("test4");
146}
147