| /* | |
| * Copyright 2009 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.collections; | |
| import static com.google.gwt.collections.CollectionFactory.createMutableArray; | |
| import com.google.gwt.junit.client.GWTTestCase; | |
| /** | |
| * Tests mutable arrays. | |
| */ | |
| public class ObjectArrayTest extends GWTTestCase { | |
| boolean assertionsEnabled; | |
| @Override | |
| public String getModuleName() { | |
| return null; | |
| } | |
| public void gwtSetUp() { | |
| assertionsEnabled = this.getClass().desiredAssertionStatus(); | |
| } | |
| public void testClear() { | |
| { | |
| // Clear an empty array | |
| MutableArray<Object> b = createMutableArray(); | |
| b.clear(); | |
| assertEquals(0, b.size()); | |
| } | |
| { | |
| // Clear a non-empty array | |
| MutableArray<Object> b = createMutableArray(); | |
| b.add("string"); | |
| b.add(false); | |
| b.add(3); | |
| b.clear(); | |
| assertEquals(0, b.size()); | |
| } | |
| } | |
| public void testCreateNonEmptyArray() { | |
| MutableArray<String> b = createMutableArray(2, "apples"); | |
| assertEquals(2, b.size()); | |
| assertEquals("apples", b.get(0)); | |
| assertEquals("apples", b.get(1)); | |
| } | |
| public void testInsertAtBeginning() { | |
| final int n = 10; | |
| MutableArray<Integer> b = createMutableArray(); | |
| for (int i = 0; i < n; ++i) { | |
| b.insert(0, i); | |
| } | |
| for (int i = 0; i < n; ++i) { | |
| assertEquals(n - i - 1, b.get(i).intValue()); | |
| } | |
| } | |
| public void testInsertAtEnd() { | |
| final int n = 10; | |
| MutableArray<Integer> b = createMutableArray(); | |
| for (int i = 0; i < n; ++i) { | |
| b.insert(b.size(), i); | |
| } | |
| for (int i = 0; i < n; ++i) { | |
| assertEquals(i, b.get(i).intValue()); | |
| } | |
| } | |
| public void testInsertInMiddle() { | |
| final int n = 10; | |
| MutableArray<Integer> b = createMutableArray(); | |
| // Fill the array with 0..(N-1) | |
| for (int i = 0; i < n; ++i) { | |
| b.insert(b.size(), i); | |
| } | |
| // Double each number by inserting. | |
| for (int i = 0; i < n; ++i) { | |
| b.insert(i * 2, i); | |
| } | |
| for (int i = 0, j = 0; i < 2 * n; i += 2, ++j) { | |
| assertEquals(j, b.get(i).intValue()); | |
| assertEquals(j, b.get(i + 1).intValue()); | |
| } | |
| } | |
| public void testMultiElementArrayManipulations() { | |
| MutableArray<String> b = createMutableArray(); | |
| b.add("apple"); | |
| b.add("banana"); | |
| b.add("coconut"); | |
| b.add(null); | |
| b.add("donut"); | |
| // On mutable array, get() in order | |
| assertEquals("apple", b.get(0)); | |
| assertEquals("banana", b.get(1)); | |
| assertEquals("coconut", b.get(2)); | |
| assertEquals(null, b.get(3)); | |
| assertEquals("donut", b.get(4)); | |
| // On mutable array, get() in non-sequential order | |
| assertEquals("coconut", b.get(2)); | |
| assertEquals("apple", b.get(0)); | |
| assertEquals("donut", b.get(4)); | |
| assertEquals("banana", b.get(1)); | |
| assertEquals(null, b.get(3)); | |
| // Try a set() call, too | |
| b.set(3, "eclair"); | |
| assertEquals("eclair", b.get(3)); | |
| } | |
| public void testRemove() { | |
| MutableArray<Integer> b = createMutableArray(); | |
| b.add(1); | |
| b.add(2); | |
| b.add(3); | |
| b.add(4); | |
| b.add(5); | |
| // Remove from the middle to make 1,2,4,5 | |
| b.remove(2); | |
| assertEquals(4, b.size()); | |
| assertEquals(1, b.get(0).intValue()); | |
| assertEquals(5, b.get(3).intValue()); | |
| // Remove from the beginning to make 2,4,5 | |
| b.remove(0); | |
| assertEquals(3, b.size()); | |
| assertEquals(2, b.get(0).intValue()); | |
| assertEquals(5, b.get(2).intValue()); | |
| // Remove from the end to make 2,4 | |
| b.remove(b.size() - 1); | |
| assertEquals(2, b.size()); | |
| assertEquals(2, b.get(0).intValue()); | |
| assertEquals(4, b.get(1).intValue()); | |
| } | |
| public void testSetSize() { | |
| MutableArray<String> b = createMutableArray(); | |
| b.setSize(1, "fillValue"); | |
| assertEquals(1, b.size()); | |
| assertEquals("fillValue", b.get(0)); | |
| b.setSize(2, "anotherValue"); | |
| assertEquals(2, b.size()); | |
| assertEquals("fillValue", b.get(0)); | |
| assertEquals("anotherValue", b.get(1)); | |
| b.setSize(1, null); | |
| assertEquals(1, b.size()); | |
| assertEquals("fillValue", b.get(0)); | |
| b.setSize(0, null); | |
| assertEquals(0, b.size()); | |
| assertEquals(null, b.elems); | |
| } | |
| public void testSingleElementAddAndRemove() { | |
| MutableArray<String> a = createMutableArray(); | |
| a.add("foo"); | |
| assertEquals(1, a.size()); | |
| assertEquals("foo", a.get(0)); | |
| a.remove(0); | |
| assertEquals(0, a.size()); | |
| a.add("bar"); | |
| assertEquals(1, a.size()); | |
| assertEquals("bar", a.get(0)); | |
| } | |
| public void testSingleElementNull() { | |
| MutableArray<String> b = createMutableArray(); | |
| b.add(null); | |
| assertEquals(null, b.get(0)); | |
| } | |
| public void testSingletonArrayCreationAndRetrieval() throws Exception { | |
| final int c = 2112; | |
| MutableArray<Integer> b = createMutableArray(); | |
| b.add(c); | |
| assertEquals(c, b.get(0).intValue()); | |
| Array<Integer> a = b; | |
| assertEquals(1, a.size()); | |
| assertEquals((Integer) 2112, a.get(0)); | |
| } | |
| public void testSingletonArrayInvalidIndex() throws Exception { | |
| MutableArray<Boolean> b = createMutableArray(); | |
| b.add(false); | |
| Array<Boolean> a = b; | |
| assertEquals((Boolean) false, a.get(0)); | |
| // Do not test undefined behavior without assertions | |
| if (!assertionsEnabled) { | |
| return; | |
| } | |
| try { | |
| a.get(1); | |
| fail("That should have failed"); | |
| } catch (AssertionError e) { | |
| assertEquals(("Index " + 1 + " was not in the acceptable range [" + 0 + ", " + 1 + ")"), | |
| e.getMessage()); | |
| } | |
| } | |
| public void testSingletonArrayManipulations() { | |
| MutableArray<String> b = createMutableArray(); | |
| b.add("diva"); | |
| b.set(0, "avid"); | |
| assertEquals(1, b.size()); | |
| assertEquals("avid", b.get(0)); | |
| } | |
| public void testThatEmptyArraysHaveHaveNoValidIndices() throws Exception { | |
| { | |
| // Do not test undefined behavior without assertions | |
| if (!assertionsEnabled) { | |
| return; | |
| } | |
| // Tests get(). | |
| MutableArray<String> b = createMutableArray(); | |
| Array<String> a = b; | |
| // Iterate i through the various likely errors states. | |
| for (int i = -1; i < 4; ++i) { | |
| try { | |
| a.get(i); | |
| fail("Should have triggered an assertion"); | |
| } catch (AssertionError e) { | |
| // Good | |
| assertEquals(("Index " + i + " was not in the acceptable range [" + 0 + ", " | |
| + 0 + ")"), e.getMessage()); | |
| } | |
| } | |
| } | |
| { | |
| // Tests set(). | |
| MutableArray<String> b = createMutableArray(); | |
| // Iterate i through the various likely errors states. | |
| for (int i = -1; i < 4; ++i) { | |
| try { | |
| b.set(i, "random string"); | |
| fail("Should have triggered an assertion"); | |
| } catch (AssertionError e) { | |
| // Good | |
| assertEquals(("Index " + i + " was not in the acceptable range [" + 0 + ", " | |
| + 0 + ")"), e.getMessage()); | |
| } | |
| } | |
| } | |
| } | |
| public void testThatEmptyArraysHaveSizeZero() { | |
| MutableArray<String> b = createMutableArray(); | |
| Array<String> a = b; | |
| assertEquals(0, a.size()); | |
| } | |
| } |