aboutsummaryrefslogtreecommitdiff
path: root/gson/src/test/java/com/google/gson/JsonArrayAsListTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'gson/src/test/java/com/google/gson/JsonArrayAsListTest.java')
-rw-r--r--gson/src/test/java/com/google/gson/JsonArrayAsListTest.java285
1 files changed, 285 insertions, 0 deletions
diff --git a/gson/src/test/java/com/google/gson/JsonArrayAsListTest.java b/gson/src/test/java/com/google/gson/JsonArrayAsListTest.java
new file mode 100644
index 00000000..a1786ce6
--- /dev/null
+++ b/gson/src/test/java/com/google/gson/JsonArrayAsListTest.java
@@ -0,0 +1,285 @@
+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));
+ }
+}