// Copyright 2012 Google Inc. All Rights Reserved. // // 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.collide.json.client; import com.google.collide.shared.util.JsonCollections; import com.google.gwt.junit.client.GWTTestCase; import java.util.Comparator; /** * Tests for JsoArray. * */ public class JsoArrayTest extends GWTTestCase { @Override public String getModuleName() { return "com.google.collide.json.client.JsonClientTestModule"; } public void testAddAllMissingDisjoint() { JsoArray<String> a = JsoArray.create(); a.add("a1"); a.add("a2"); JsoArray<String> b = JsoArray.create(); b.add("b1"); b.add("b2"); JsonCollections.addAllMissing(a, b); assertEquals(4, a.size()); assertEquals(2, b.size()); assertEquals("a1,a2,b1,b2", a.join(",")); } public void testAddAllMissingIntersecting() { JsoArray<String> a = JsoArray.create(); a.add("a1"); a.add("a2"); JsoArray<String> b = JsoArray.create(); b.add("a1"); b.add("b2"); JsonCollections.addAllMissing(a, b); assertEquals(3, a.size()); assertEquals("a1,a2,b2", a.join(",")); } public void testAddAllMissingDuplicates() { JsoArray<String> a = JsoArray.create(); a.add("a1"); a.add("a2"); a.add("a1"); JsoArray<String> b = JsoArray.create(); b.add("b1"); b.add("b2"); b.add("b1"); JsonCollections.addAllMissing(a, b); assertEquals(6, a.size()); assertEquals("a1,a2,a1,b1,b2,b1", a.join(",")); } public void testAddAllMissingEmpty() { JsoArray<String> a = JsoArray.create(); a.add("a1"); JsonCollections.addAllMissing(a, JsoArray.<String>create()); assertEquals(1, a.size()); assertEquals("a1", a.get(0)); } public void testAddAllMissingNull() { JsoArray<String> a = JsoArray.create(); a.add("a1"); JsonCollections.addAllMissing(a, null); assertEquals(1, a.size()); assertEquals("a1", a.get(0)); } public void testAddAllMissingSelfToSelf() { JsoArray<String> a = JsoArray.create(); a.add("a1"); a.add("a2"); JsonCollections.addAllMissing(a, a); assertEquals(2, a.size()); assertEquals("a1,a2", a.join(",")); } public void testEqualsBothNull() { assertTrue(JsonCollections.equals((JsoArray<?>)null, null)); } public void testEqualsOneNull() { JsoArray<String> a = JsoArray.create(); a.add("a0"); a.add("a1"); assertFalse(JsonCollections.equals(a, null)); assertFalse(JsonCollections.equals(null, a)); } public void testEqualsDifferentSize() { JsoArray<String> aSmall = JsoArray.create(); aSmall.add("a0"); aSmall.add("a1"); JsoArray<String> aLarge = JsoArray.create(); aLarge.add("a0"); assertFalse(JsonCollections.equals(aSmall, aLarge)); } public void testEquals() { JsoArray<String> a0 = JsoArray.create(); a0.add("a0"); a0.add("a1"); JsoArray<String> a1 = JsoArray.create(); a1.add("a0"); a1.add("a1"); assertTrue(JsonCollections.equals(a0, a0)); assertTrue(JsonCollections.equals(a0, a1)); } public void testNotEquals() { JsoArray<String> a = JsoArray.create(); a.add("a0"); a.add("a1"); JsoArray<String> b = JsoArray.create(); b.add("a0"); b.add("b1"); assertFalse(JsonCollections.equals(a, b)); } public void testSortWithComparator() { JsoArray<String> a = JsoArray.create(); a.add("b"); a.add("a"); a.add("c"); assertArray(a, "b", "a", "c"); a.sort(new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); assertArray(a, "a", "b", "c"); a.sort(new Comparator<String>() { @Override public int compare(String o1, String o2) { return o2.compareTo(o1); } }); assertArray(a, "c", "b", "a"); } public void testReverse() { JsoArray<String> a = JsoArray.from("a", "b", "c"); a.reverse(); assertArray(a, "c", "b", "a"); } public void testOutOfBounds() { JsoArray<Integer> numbers = JsoArray.from(0); try { numbers.set(2, 2); } catch (IndexOutOfBoundsException ex) { // We expect this. return; } fail("IndexOutOfBoundsException didn't occur"); } /** * Assert that an array contains exactly the expected values, in order. * * @param <T> the data type of the array * @param actual the actual array to check * @param expected the expected values, in order */ private <T> void assertArray(JsoArray<T> actual, T... expected) { // Check the size. int size = expected.length; assertEquals("Size mismatch", size, actual.size()); // Check the values. for (int i = 0; i < size; i++) { assertEquals(expected[i], actual.get(i)); } } }