/* * Copyright 2010 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.core.client; import com.google.gwt.junit.client.GWTTestCase; /** * Tests JsArrayMixed methods. */ public class JsArrayMixedTest extends GWTTestCase { private static class JsTestFruit extends JavaScriptObject { @SuppressWarnings("unused") protected JsTestFruit() { } } JsArrayMixed mixedArray; @Override public String getModuleName() { return "com.google.gwt.core.Core"; } @Override protected void gwtSetUp() throws Exception { super.gwtSetUp(); mixedArray = makeArray(); } public void testGetBoolean() { assertTrue(mixedArray.getBoolean(0)); // Test automatic type casting mixedArray.set(0, 0); assertFalse(mixedArray.getBoolean(0)); } public void testGetNumber() { assertEquals(2.5, mixedArray.getNumber(1)); assertEquals(1.0, mixedArray.getNumber(2)); // Cast from boolean assertEquals(1.0, mixedArray.getNumber(0)); } public void testGetObject() { assertTrue(compareObjects(makeObject("pear"), mixedArray.<JsTestFruit> getObject(3))); } public void testGetString() { assertEquals("orange", mixedArray.getString(4)); assertEquals("true", mixedArray.getString(0)); assertEquals("2.5", mixedArray.getString(1)); assertEquals("1", mixedArray.getString(2)); } public void testJoin() { assertEquals("true,2.5,1,[object Object],orange", mixedArray.join()); } public void testJoinString() { assertEquals("true<br/>2.5<br/>1<br/>[object Object]<br/>orange", mixedArray.join("<br/>")); } public void testLength() { assertEquals(5, mixedArray.length()); } public void testPushBoolean() { mixedArray.push(false); assertEquals(6, mixedArray.length()); assertFalse(mixedArray.getBoolean(5)); } public void testPushDouble() { mixedArray.push(1.5); assertEquals(6, mixedArray.length()); assertEquals(1.5, mixedArray.getNumber(5)); } public void testPushJavaScriptObject() { JsTestFruit fruit = makeObject("strawberry"); mixedArray.push(fruit); assertEquals(6, mixedArray.length()); assertEquals(fruit, mixedArray.<JsTestFruit> getObject(5)); } public void testPushString() { mixedArray.push("kiwi"); assertEquals(6, mixedArray.length()); assertEquals("kiwi", mixedArray.getString(5)); } public void testSetIntBoolean() { mixedArray.set(1, false); assertFalse(mixedArray.getBoolean(1)); } public void testSetIntDouble() { mixedArray.set(0, 4.1); assertEquals(4.1, mixedArray.getNumber(0)); } public void testSetIntJavaScriptObject() { JsTestFruit fruit = makeObject("kiwi"); mixedArray.set(0, fruit); assertEquals(fruit, mixedArray.<JsTestFruit> getObject(0)); } public void testSetIntString() { mixedArray.set(0, "apple"); assertEquals("apple", mixedArray.getString(0)); } public void testSetLength() { mixedArray.setLength(10); assertEquals(10, mixedArray.length()); } public void testShiftBoolean() { assertEquals(5, mixedArray.length()); assertTrue(mixedArray.shiftBoolean()); assertEquals(4, mixedArray.length()); assertTrue(mixedArray.shiftBoolean()); assertTrue(mixedArray.shiftBoolean()); assertTrue(mixedArray.shiftBoolean()); assertTrue(mixedArray.shiftBoolean()); assertEquals(0, mixedArray.length()); } public void testShiftNumber() { assertEquals(5, mixedArray.length()); assertEquals(1.0, mixedArray.shiftNumber()); assertEquals(4, mixedArray.length()); assertEquals(2.5, mixedArray.shiftNumber()); assertEquals(1.0, mixedArray.shiftNumber()); assertTrue(Double.isNaN(mixedArray.shiftNumber())); assertTrue(Double.isNaN(mixedArray.shiftNumber())); assertEquals(0, mixedArray.length()); } public void testShiftObject() { assertEquals(5, mixedArray.length()); assertEquals("true", mixedArray.<JavaScriptObject>shiftObject().toString()); assertEquals(4, mixedArray.length()); assertEquals("2.5", mixedArray.<JavaScriptObject>shiftObject().toString()); assertEquals("1", mixedArray.<JavaScriptObject>shiftObject().toString()); assertTrue(compareObjects(makeObject("pear"), mixedArray.<JsTestFruit> shiftObject())); assertEquals(1, mixedArray.length()); } public void testShiftString() { assertEquals(5, mixedArray.length()); assertEquals("true", mixedArray.shiftString()); assertEquals(4, mixedArray.length()); assertEquals("2.5", mixedArray.shiftString()); assertEquals("1", mixedArray.shiftString()); assertEquals("[object Object]", mixedArray.shiftString()); assertEquals("orange", mixedArray.shiftString()); assertEquals(0, mixedArray.length()); } public void testUnshiftBoolean() { assertEquals(5, mixedArray.length()); mixedArray.unshift(false); assertEquals(6, mixedArray.length()); assertFalse(mixedArray.getBoolean(0)); } public void testUnshiftDouble() { assertEquals(5, mixedArray.length()); mixedArray.unshift(0.5); assertEquals(6, mixedArray.length()); assertEquals(0.5, mixedArray.getNumber(0)); } public void testUnshiftJavaScriptObject() { JsTestFruit fruit = makeObject("kiwi"); assertEquals(5, mixedArray.length()); mixedArray.unshift(fruit); assertEquals(6, mixedArray.length()); assertEquals(fruit, mixedArray.<JsTestFruit> getObject(0)); } public void testUnshiftString() { assertEquals(5, mixedArray.length()); mixedArray.unshift("kiwi"); assertEquals(6, mixedArray.length()); assertEquals("kiwi", mixedArray.getString(0)); } public void testEdgeCases() { JsArrayMixed weirdArray = makeEdgeCaseArray(); // boolean values assertFalse(weirdArray.getBoolean(0)); assertTrue(weirdArray.getBoolean(1)); assertTrue(weirdArray.getBoolean(2)); assertTrue(weirdArray.getBoolean(3)); assertFalse(weirdArray.getBoolean(4)); assertTrue(weirdArray.getBoolean(5)); assertFalse(weirdArray.getBoolean(6)); assertTrue(weirdArray.getBoolean(7)); assertTrue(weirdArray.getBoolean(8)); assertTrue(weirdArray.getBoolean(9)); assertTrue(weirdArray.getBoolean(10)); // number values assertEquals(0.0, weirdArray.getNumber(0)); assertEquals(0.0, weirdArray.getNumber(1)); assertEquals(1.0, weirdArray.getNumber(2)); assertTrue(Double.isNaN(weirdArray.getNumber(3))); assertEquals(0.0, weirdArray.getNumber(4)); assertEquals(1.0, weirdArray.getNumber(5)); assertTrue(Double.isNaN(weirdArray.getNumber(6))); assertEquals(Double.POSITIVE_INFINITY, weirdArray.getNumber(7)); assertEquals(0.0, weirdArray.getNumber(8)); assertEquals(0.0, weirdArray.getNumber(9)); assertEquals(1.0, weirdArray.getNumber(10)); // String values assertEquals("", weirdArray.getString(0)); assertEquals("0", weirdArray.getString(1)); assertEquals("1", weirdArray.getString(2)); assertEquals("NaN", weirdArray.getString(3)); assertEquals("0", weirdArray.getString(4)); assertEquals("1", weirdArray.getString(5)); assertEquals("NaN", weirdArray.getString(6)); assertEquals("Infinity", weirdArray.getString(7)); assertEquals("", weirdArray.getString(8)); assertEquals("0", weirdArray.getString(9)); assertEquals("1", weirdArray.getString(10)); } private native boolean compareObjects(JavaScriptObject expected, JavaScriptObject actual) /*-{ for (key in expected) { if (expected[key] != actual[key]) { return false; } } return true; }-*/; private native JsArrayMixed makeArray() /*-{ return [true, 2.5, 1, {kind: "pear"}, "orange"]; }-*/; private native JsArrayMixed makeEdgeCaseArray() /*-{ return ['', '0', '1', 'NaN', 0, 1, NaN, Infinity, [], [0], [1]]; }-*/; private native JsTestFruit makeObject(String theKind) /*-{ return {kind: theKind}; }-*/; }