gson-comments/gson/src/test/java/com/google/gson/JsonArrayAsListTest.java

286 lines
7.3 KiB
Java

package com.google.gson;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import com.google.gson.common.MoreAsserts;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
/**
* Tests for {@link JsonArray#asList()}.
*/
public class JsonArrayAsListTest {
@Test
public void testGet() {
JsonArray a = new JsonArray();
a.add(1);
List<JsonElement> list = a.asList();
assertEquals(new JsonPrimitive(1), list.get(0));
try {
list.get(-1);
fail();
} catch (IndexOutOfBoundsException e) {
}
try {
list.get(2);
fail();
} catch (IndexOutOfBoundsException e) {
}
a.add((JsonElement) null);
assertEquals(JsonNull.INSTANCE, list.get(1));
}
@Test
public void testSize() {
JsonArray a = new JsonArray();
a.add(1);
List<JsonElement> list = a.asList();
assertEquals(1, list.size());
list.add(new JsonPrimitive(2));
assertEquals(2, list.size());
}
@Test
public void testSet() {
JsonArray a = new JsonArray();
a.add(1);
List<JsonElement> list = a.asList();
JsonElement old = list.set(0, new JsonPrimitive(2));
assertEquals(new JsonPrimitive(1), old);
assertEquals(new JsonPrimitive(2), list.get(0));
assertEquals(new JsonPrimitive(2), a.get(0));
try {
list.set(-1, new JsonPrimitive(1));
fail();
} catch (IndexOutOfBoundsException e) {
}
try {
list.set(2, new JsonPrimitive(1));
fail();
} catch (IndexOutOfBoundsException e) {
}
try {
list.set(0, null);
fail();
} catch (NullPointerException e) {
assertEquals("Element must be non-null", e.getMessage());
}
}
@Test
public void testAdd() {
JsonArray a = new JsonArray();
a.add(1);
List<JsonElement> list = a.asList();
list.add(0, new JsonPrimitive(2));
list.add(1, new JsonPrimitive(3));
assertTrue(list.add(new JsonPrimitive(4)));
assertTrue(list.add(JsonNull.INSTANCE));
List<JsonElement> expectedList = Arrays.<JsonElement>asList(
new JsonPrimitive(2),
new JsonPrimitive(3),
new JsonPrimitive(1),
new JsonPrimitive(4),
JsonNull.INSTANCE
);
assertEquals(expectedList, list);
try {
list.set(-1, new JsonPrimitive(1));
fail();
} catch (IndexOutOfBoundsException e) {
}
try {
list.set(list.size(), new JsonPrimitive(1));
fail();
} catch (IndexOutOfBoundsException e) {
}
try {
list.add(0, null);
fail();
} catch (NullPointerException e) {
assertEquals("Element must be non-null", e.getMessage());
}
try {
list.add(null);
fail();
} catch (NullPointerException e) {
assertEquals("Element must be non-null", e.getMessage());
}
}
@Test
public void testAddAll() {
JsonArray a = new JsonArray();
a.add(1);
List<JsonElement> list = a.asList();
list.addAll(Arrays.asList(new JsonPrimitive(2), new JsonPrimitive(3)));
List<JsonElement> expectedList = Arrays.<JsonElement>asList(
new JsonPrimitive(1),
new JsonPrimitive(2),
new JsonPrimitive(3)
);
assertEquals(expectedList, list);
try {
list.addAll(0, Collections.<JsonElement>singletonList(null));
fail();
} catch (NullPointerException e) {
assertEquals("Element must be non-null", e.getMessage());
}
try {
list.addAll(Collections.<JsonElement>singletonList(null));
fail();
} catch (NullPointerException e) {
assertEquals("Element must be non-null", e.getMessage());
}
}
@Test
public void testRemoveIndex() {
JsonArray a = new JsonArray();
a.add(1);
List<JsonElement> list = a.asList();
assertEquals(new JsonPrimitive(1), list.remove(0));
assertEquals(0, list.size());
assertEquals(0, a.size());
try {
list.remove(0);
fail();
} catch (IndexOutOfBoundsException e) {
}
}
@Test
public void testRemoveElement() {
JsonArray a = new JsonArray();
a.add(1);
List<JsonElement> list = a.asList();
assertTrue(list.remove(new JsonPrimitive(1)));
assertEquals(0, list.size());
assertEquals(0, a.size());
assertFalse(list.remove(new JsonPrimitive(1)));
assertFalse(list.remove(null));
}
@Test
public void testClear() {
JsonArray a = new JsonArray();
a.add(1);
List<JsonElement> list = a.asList();
list.clear();
assertEquals(0, list.size());
assertEquals(0, a.size());
}
@Test
public void testContains() {
JsonArray a = new JsonArray();
a.add(1);
List<JsonElement> list = a.asList();
assertTrue(list.contains(new JsonPrimitive(1)));
assertFalse(list.contains(new JsonPrimitive(2)));
assertFalse(list.contains(null));
@SuppressWarnings({"unlikely-arg-type", "CollectionIncompatibleType"})
boolean containsInt = list.contains(1); // should only contain JsonPrimitive(1)
assertFalse(containsInt);
}
@Test
public void testIndexOf() {
JsonArray a = new JsonArray();
// Add the same value twice to test indexOf vs. lastIndexOf
a.add(1);
a.add(1);
List<JsonElement> list = a.asList();
assertEquals(0, list.indexOf(new JsonPrimitive(1)));
assertEquals(-1, list.indexOf(new JsonPrimitive(2)));
assertEquals(-1, list.indexOf(null));
@SuppressWarnings({"unlikely-arg-type", "CollectionIncompatibleType"})
int indexOfInt = list.indexOf(1); // should only contain JsonPrimitive(1)
assertEquals(-1, indexOfInt);
assertEquals(1, list.lastIndexOf(new JsonPrimitive(1)));
assertEquals(-1, list.lastIndexOf(new JsonPrimitive(2)));
assertEquals(-1, list.lastIndexOf(null));
}
@Test
public void testToArray() {
JsonArray a = new JsonArray();
a.add(1);
List<JsonElement> list = a.asList();
assertArrayEquals(new Object[] {new JsonPrimitive(1)}, list.toArray());
JsonElement[] array = list.toArray(new JsonElement[0]);
assertArrayEquals(new Object[] {new JsonPrimitive(1)}, array);
array = new JsonElement[1];
assertSame(array, list.toArray(array));
assertArrayEquals(new Object[] {new JsonPrimitive(1)}, array);
array = new JsonElement[] {null, new JsonPrimitive(2)};
assertSame(array, list.toArray(array));
// Should have set existing array element to null
assertArrayEquals(new Object[] {new JsonPrimitive(1), null}, array);
}
@Test
public void testEqualsHashCode() {
JsonArray a = new JsonArray();
a.add(1);
List<JsonElement> list = a.asList();
MoreAsserts.assertEqualsAndHashCode(list, Collections.singletonList(new JsonPrimitive(1)));
assertFalse(list.equals(Collections.emptyList()));
assertFalse(list.equals(Collections.singletonList(new JsonPrimitive(2))));
}
/** Verify that {@code JsonArray} updates are visible to view and vice versa */
@Test
public void testViewUpdates() {
JsonArray a = new JsonArray();
List<JsonElement> list = a.asList();
a.add(1);
assertEquals(1, list.size());
assertEquals(new JsonPrimitive(1), list.get(0));
list.add(new JsonPrimitive(2));
assertEquals(2, a.size());
assertEquals(new JsonPrimitive(2), a.get(1));
}
}