Reviewed by Darin Adler.
[WebKit-https.git] / LayoutTests / java / lc3 / forin / array-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 = 'array-001.js';
24
25 /**
26  *  Verify that for-in loops can be used with java objects.
27  *
28  *  Java array members should be enumerated in for... in loops.
29  *
30  *
31  */
32 var SECTION = "array-001";
33 var VERSION = "1_4";
34 var TITLE   = "LiveConnect 3.0:  for ... in java objects";
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 // for arrays, we just need to know the length, since java arrays
42 // don't have any extra properties
43
44
45 var dt = applet.createQAObject("com.netscape.javascript.qa.liveconnect.DataTypeClass");
46 var a = new Array();
47
48 a[a.length] = new TestObject(
49   wkTestStringToJavaByteArray("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"),
50   36 );
51
52 try {
53     a[a.length] = new TestObject(
54       dt.PUB_ARRAY_SHORT,
55       dt.PUB_ARRAY_SHORT.length );
56 } catch (ex) {
57     testFailed(ex.toString());
58 }
59
60 try {
61     a[a.length] = new TestObject(
62       dt.PUB_ARRAY_LONG,
63       dt.PUB_ARRAY_LONG.length );
64 } catch (ex) {
65     testFailed(ex.toString());
66 }
67
68 try {
69     a[a.length] = new TestObject(
70       dt.PUB_ARRAY_DOUBLE,
71       dt.PUB_ARRAY_DOUBLE.length );
72 } catch (ex) {
73     testFailed(ex.toString());
74 }
75
76 try {
77     a[a.length] = new TestObject(
78       dt.PUB_ARRAY_BYTE,
79       dt.PUB_ARRAY_BYTE.length );
80 } catch (ex) {
81     testFailed(ex.toString());
82 }
83
84 try {
85     a[a.length] = new TestObject(
86       dt.PUB_ARRAY_CHAR,
87       dt.PUB_ARRAY_CHAR.length );
88 } catch (ex) {
89     testFailed(ex.toString());
90 }
91
92 try {
93     a[a.length] = new TestObject(
94       dt.PUB_ARRAY_OBJECT,
95       dt.PUB_ARRAY_OBJECT.length );
96 } catch (ex) {
97     testFailed(ex.toString());
98 }
99
100 for ( var i = 0; i < a.length; i++ ) {
101   // check the number of properties of the enumerated object
102   shouldBeWithErrorCheck("a[" + i + "].items", "a[" + i + "].enumedArray.pCount");
103
104   for ( var arrayItem = 0; arrayItem < a[i].items; arrayItem++ )
105     shouldBeWithErrorCheck("a[" + i + "].javaArray[" + arrayItem + "]", "a[" + i + "].enumedArray[" + arrayItem + "]");
106 }
107
108 function TestObject( arr, len ) {
109   this.javaArray = arr;
110   this.items    = len;
111   this.enumedArray = new enumObject(arr);
112 }
113
114 function enumObject( o ) {
115   this.pCount = 0;
116   for ( var p in o ) {
117     this.pCount++;
118     if ( !isNaN(p) ) {
119       eval( "this["+p+"] = o["+p+"]" );
120     } else {
121       eval( "this." + p + " = o["+ p+"]" );
122     }
123   }
124 }
125