1/*
2 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/**
25 * Test to check [[Class]] internal property for various standard objects.
26 *
27 * @test
28 * @run
29 */
30
31function checkClass(obj, expected) {
32    var str = Object.prototype.toString.call(obj);
33    if (str != expected) {
34        fail("expected " + expected + ", got " + str);
35    }
36}
37
38// objects
39checkClass([2, 23], "[object Array]");
40checkClass(new Boolean(true), "[object Boolean]");
41checkClass(new Date(0), "[object Date]");
42checkClass(new Error(), "[object Error]");
43checkClass(new EvalError(), "[object Error]");
44if (typeof JSAdapter != 'undefined') {
45    checkClass(new JSAdapter({}), "[object JSAdapter]");
46}
47if (typeof JavaImporter != 'undefined') {
48    checkClass(new JavaImporter(java.io), "[object JavaImporter]");
49}
50checkClass(function() {}, "[object Function]");
51checkClass(new Number(42), "[object Number]");
52checkClass(new Object(), "[object Object]");
53checkClass(new RangeError(), "[object Error]");
54checkClass(new ReferenceError(), "[object Error]");
55checkClass(/nashorn/, "[object RegExp]");
56checkClass(new String('hello'), "[object String]");
57checkClass(new SyntaxError(), "[object Error]");
58checkClass(new TypeError(), "[object Error]");
59checkClass(new URIError(), "[object Error]");
60
61// constructors and prototypes
62checkClass(Array, "[object Function]");
63checkClass(Array.prototype, "[object Array]");
64checkClass(Boolean, "[object Function]");
65checkClass(Boolean.prototype, "[object Boolean]");
66checkClass(Date, "[object Function]");
67checkClass(Date.prototype, "[object Date]");
68checkClass(Error, "[object Function]");
69checkClass(Error.prototype, "[object Error]");
70checkClass(EvalError, "[object Function]");
71checkClass(EvalError.prototype, "[object Error]");
72checkClass(Function, "[object Function]");
73checkClass(Function.prototype, "[object Function]");
74if (typeof JSAdapter != 'undefined') {
75    checkClass(JSAdapter, "[object Function]");
76    checkClass(JSAdapter.prototype, "[object JSAdapter]");
77}
78if (typeof JavaImporter != 'undefined') {
79    checkClass(JavaImporter, "[object Function]");
80    checkClass(JavaImporter.prototype, "[object JavaImporter]");
81}
82checkClass(Number, "[object Function]");
83checkClass(Number.prototype, "[object Number]");
84checkClass(Object, "[object Function]");
85checkClass(Object.prototype, "[object Object]");
86checkClass(RangeError, "[object Function]");
87checkClass(RangeError.prototype, "[object Error]");
88checkClass(ReferenceError, "[object Function]");
89checkClass(ReferenceError.prototype, "[object Error]");
90checkClass(RegExp, "[object Function]");
91checkClass(RegExp.prototype, "[object RegExp]");
92checkClass(String, "[object Function]");
93checkClass(String.prototype, "[object String]");
94checkClass(SyntaxError, "[object Function]");
95checkClass(SyntaxError.prototype, "[object Error]");
96checkClass(TypeError, "[object Function]");
97checkClass(TypeError.prototype, "[object Error]");
98checkClass(URIError, "[object Function]");
99checkClass(URIError.prototype, "[object Error]");
100
101// misc. objects
102checkClass(this, "[object global]");
103checkClass(this.prototype, "[object Undefined]");
104
105if (typeof Packages != 'undefined') {
106    checkClass(Packages, "[object JavaPackage]");
107    checkClass(java, "[object JavaPackage]");
108    checkClass(javax, "[object JavaPackage]");
109}
110
111if (typeof Java != 'undefined') {
112    checkClass(Java, "[object Java]");
113    checkClass(Java.prototype, "[object Undefined]");
114}
115
116if (typeof Debug != 'undefined') {
117    checkClass(Debug, "[object Debug]");
118}
119
120checkClass((function() { return arguments; })(), "[object Arguments]");
121// strict arguments implementation is different.
122checkClass((function() { 'use strict'; return arguments; })(), "[object Arguments]");
123checkClass(JSON, "[object JSON]");
124checkClass(JSON.prototype, "[object Undefined]");
125checkClass(Math, "[object Math]");
126checkClass(Math.prototype, "[object Undefined]");
127