JsonArrayAsListSuiteTest.java
package com.google.gson;
import com.google.common.collect.testing.ListTestSuiteBuilder;
import com.google.common.collect.testing.SampleElements;
import com.google.common.collect.testing.TestListGenerator;
import com.google.common.collect.testing.features.CollectionFeature;
import com.google.common.collect.testing.features.CollectionSize;
import com.google.common.collect.testing.features.ListFeature;
import java.util.List;
import junit.framework.Test;
import org.junit.runner.RunWith;
import org.junit.runners.AllTests;
/**
* Dynamic {@link ListTestSuiteBuilder List test suite} for {@link JsonArray#asList()}. This
* complements {@link JsonArrayAsListTest}, which can cover some cases which are not covered here,
* e.g. making sure changes in the {@code List} view are visible in the {@code JsonArray}.
*/
@RunWith(AllTests.class)
public class JsonArrayAsListSuiteTest {
private static class ListGenerator implements TestListGenerator<JsonElement> {
@Override
public SampleElements<JsonElement> samples() {
return new SampleElements<JsonElement>(
JsonNull.INSTANCE,
new JsonPrimitive(true),
new JsonPrimitive("test"),
new JsonArray(),
new JsonObject());
}
@Override
public JsonElement[] createArray(int length) {
return new JsonElement[length];
}
@Override
public Iterable<JsonElement> order(List<JsonElement> insertionOrder) {
return insertionOrder;
}
@Override
public List<JsonElement> create(Object... elements) {
JsonArray array = new JsonArray();
// This is not completely accurate: Because there is no way to directly construct JsonArray or
// its List view with existing elements, this has to add the elements individually with
// `List#add`
var list = array.asList();
for (Object element : elements) {
list.add((JsonElement) element);
}
return list;
}
}
// Special method recognized by JUnit's `AllTests` runner
public static Test suite() {
return ListTestSuiteBuilder.using(new ListGenerator())
.withFeatures(
CollectionSize.ANY,
CollectionFeature.ALLOWS_NULL_QUERIES,
CollectionFeature.RESTRICTS_ELEMENTS, // List only allows JsonElement
CollectionFeature.SUPPORTS_ADD,
ListFeature.REMOVE_OPERATIONS,
ListFeature.SUPPORTS_ADD_WITH_INDEX,
ListFeature.SUPPORTS_SET)
.named("JsonArray#asList")
.createTestSuite();
}
}