jsr/sret should be removed
[WebKit-https.git] / LayoutTests / java / lc3 / forin / object-001.js
1 /* ***** BEGIN LICENSE BLOCK *****
2  *
3  * Copyright (C) 1998 Netscape Communications Corporation.
4  * Copyright (C) 2010 Apple Inc.
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public License
17  * along with this library; see the file COPYING.LIB.  If not, write to
18  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  *
21  * ***** END LICENSE BLOCK ***** */
22
23 gTestfile = 'object-001.js';
24
25 /**
26  *  Verify that for-in loops can be used with java objects.
27  *
28  *  Java array members of object instances should be enumerated in
29  *  for... in loops.
30  *
31  */
32 var SECTION = "for...in";
33 var VERSION = "1_4";
34 var TITLE   = "LiveConnect 3.0";
35 SECTION;
36 startTest();
37
38 // we just need to know the names of all the expected enumerated
39 // properties.  we will get the values to the original objects.
40
41 var dt = applet.createQAObject("com.netscape.javascript.qa.liveconnect.DataTypeClass");
42 var a = new Array();
43
44 try {
45     a[a.length] = new TestObject(
46       dt.PUB_STRING,
47       "dt.getString()",
48       0,
49       "java.lang.String");
50 } catch (ex) {
51     testFailed("java.lang.String: " + ex.toString());
52 }
53
54 try {
55     a[a.length] = new TestObject(
56       dt.getLongObject(),
57       "dt.getLongObject()",
58       0,
59       "java.lang.Long");
60 } catch (ex) {
61     testFailed("java.lang.Long: " + ex.toString());
62 }
63
64 try {
65     a[a.length] = new TestObject(
66       new java.awt.Rectangle(5,6,7,8),
67       "new java.awt.Rectangle(5,6,7,8)",
68       0,
69       "java.awt.Rectangle");
70 } catch (ex) {
71     testFailed("java.awt.Rectangle: " + ex.toString());
72 }
73
74 for ( var i = 0; i < a.length; i++ ) {
75   // check the value of each indexed array item
76
77   for ( var arrayItem = 0; arrayItem < a[i].items; arrayItem++ )
78     shouldBeWithErrorCheck("a[" + i + "].enumedObject['" + arrayItem + "']", "a[i].javaObject[arrayItem]");
79
80   // verify that all non-static  properties are enumerated
81
82
83   var fieldArray = [];
84   try {
85     fieldArray = getFields( a[i].javaClass );
86   } catch (ex) {
87     testFailed("getFields( a[" + i + "].javaClass ): " + ex);
88   }
89
90   for ( var fieldIndex = 0; fieldIndex < fieldArray.length; fieldIndex++ ) {
91     try {
92         var f = fieldArray[fieldIndex] +"";
93     } catch (ex) {
94         testFailed(fieldArray[fieldIndex] + " " + ex.toString());
95     }
96
97     if ( ! isStatic( f ) ) {
98       var currentField = getFieldName( f );
99
100       shouldBeWithErrorCheck( 'a[' + i + '].enumedObject["' + currentField + '"]+""', 'a[' + i + '].javaObject["' + currentField + '"] +""');
101     }
102   }
103
104   // verify that all non-static methods are enumerated
105
106   var methodArray = [];
107   try {
108     methodArray = getMethods(a[i].javaClass);
109   } catch (ex) {
110     testFailed("getMethods( a[" + i + "].javaClass ): " + ex);
111   }
112
113   for ( var methodIndex = 0; methodIndex < methodArray.length; methodIndex++ ) {
114     try {
115         var m = methodArray[methodIndex] +"";
116     } catch (ex) {
117         testFailed(methodArray[methodIndex] + " " + ex.toString());
118     }
119
120     if ( ! isStatic(m)  && inClass( a[i].javaClass, m)) {
121       var currentMethod = getMethodName(m);
122
123       shouldBeWithErrorCheck('a[' + i + '].enumedObject["' + currentMethod + '"] +""', 'a[' + i + '].javaObject["' + currentMethod + '"] +""');
124     }
125   }
126 }
127
128
129 function TestObject( ob, descr, len, jc) {
130   this.javaObject= ob;
131   this.description = descr;
132   this.items    = len;
133   this.javaClass = jc;
134   this.enumedObject = new enumObject(ob);
135 }
136
137 function enumObject( o ) {
138   this.pCount = 0;
139   for ( var p in o ) {
140     this.pCount++;
141     this[p] = o[p];
142   }
143 }
144
145 // only return if the method is a method of the class, not an inherited
146 // method
147
148 function inClass( javaClass, m ) {
149   var argIndex = m.lastIndexOf( "(", m.length );
150   var methodIndex = m.lastIndexOf( ".", argIndex );
151   var classIndex = m.lastIndexOf( " ", methodIndex );
152   var className =   m.substr(classIndex +1, methodIndex - classIndex -1 );
153
154   if ( className == javaClass ) {
155     return true;
156   }
157   return false;
158 }
159 function isStatic( m ) {
160   if ( m.lastIndexOf ( "static" ) > 0 ) {
161     return true;
162   }
163   return false;
164 }
165 function getMethods( javaString ) {
166   return java.lang.Class.forName( javaString ).getMethods();
167 }
168 function getArguments( m ) {
169   var argIndex = m.lastIndexOf("(", m.length());
170   var argString = m.substr(argIndex+1, m.length() - argIndex -2);
171   return argString.split( "," );
172 }
173 function getMethodName( m ) {
174   var argIndex = m.lastIndexOf( "(", m.length);
175   var nameIndex = m.lastIndexOf( ".", argIndex);
176   return m.substr( nameIndex +1, argIndex - nameIndex -1 );
177 }
178 function getFields( javaClassName ) {
179   return java.lang.Class.forName( javaClassName ).getFields();
180 }
181 function getFieldName( f ) {
182   return f.substr( f.lastIndexOf(".", f.length)+1, f.length );
183 }
184 function getFieldNames( javaClassName ) {
185   var javaFieldArray = getFields( javaClassName );
186
187   for ( var i = 0, jsFieldArray = new Array(); i < javaFieldArray.length; i++ ) {
188     var f = javaFieldArray[i] +"";
189     jsFieldArray[i] = f.substr( f.lastIndexOf(".", f.length)+1, f.length );
190   }
191   return jsFieldArray;
192 }
193 function hasMethod( m, noArgs ) {
194   for ( var i = 0; i < methods.length; i++ ) {
195     if ( (m == methods[i][0]) && (noArgs == methods[i][1].length)) {
196       return true;
197     }
198   }
199   return false;
200 }