package org.mafagafogigante.dungeon.util;
import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.JsonValue;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
public class JsonElementSearchUtilTest {
private static final String DEFAULT_ELEMENT_NAME_PREFIX = "element_";
private static final String DEFAULT_CHILD_OBJECT_NAME_PREFIX = "child_";
private static final String DEFAULT_CHILD_OF_CHILD_OBJECT_NAME_PREFIX = "child_child_";
private static final int DEFAULT_NUMBER_OF_ELEMENTS = 5;
private JsonObject parentJsonObject;
/**
* Initialize test JSON object.
*/
@Before
public void setUp() {
parentJsonObject = buildJsonObjectWithNElements(DEFAULT_NUMBER_OF_ELEMENTS);
JsonObject childObject = buildJsonObjectWithNElements(DEFAULT_NUMBER_OF_ELEMENTS);
parentJsonObject.add(DEFAULT_CHILD_OBJECT_NAME_PREFIX + 1, childObject);
parentJsonObject.add(DEFAULT_CHILD_OBJECT_NAME_PREFIX + 2, childObject);
JsonObject parentOfChildObject = buildJsonObjectWithNElements(DEFAULT_NUMBER_OF_ELEMENTS);
JsonObject childOfParentChildObject = buildJsonObjectWithNElements(DEFAULT_NUMBER_OF_ELEMENTS);
parentOfChildObject.add(DEFAULT_CHILD_OF_CHILD_OBJECT_NAME_PREFIX + 1, childOfParentChildObject);
parentOfChildObject.add(DEFAULT_CHILD_OF_CHILD_OBJECT_NAME_PREFIX + 2, childOfParentChildObject);
parentJsonObject.add(DEFAULT_CHILD_OBJECT_NAME_PREFIX + 3, parentOfChildObject);
JsonArray childArray = new JsonArray();
childArray.add(buildJsonObjectWithNElements(DEFAULT_NUMBER_OF_ELEMENTS));
parentJsonObject.add(DEFAULT_CHILD_OBJECT_NAME_PREFIX + 4, childArray);
}
@Test
public void testJsonElementUtilFindsAllElementsInJsonObjectByAttributeName() {
final int suffixValue = 2;
List<JsonValue> jsonValueSearchResult = JsonElementSearchUtil
.searchJsonValueByAttributeName(parentJsonObject, DEFAULT_ELEMENT_NAME_PREFIX + suffixValue);
for (JsonValue jsonValue : jsonValueSearchResult) {
Assert.assertEquals(suffixValue, jsonValue.asInt());
}
Assert.assertEquals(7, jsonValueSearchResult.size());
}
@Test
public void testJsonElementUtilFindsChildElementInJsonObjectByAttributeName() {
List<JsonValue> jsonValueSearchResult =
JsonElementSearchUtil.searchJsonValueByAttributeName(parentJsonObject, DEFAULT_CHILD_OBJECT_NAME_PREFIX + 1);
Assert.assertEquals(1, jsonValueSearchResult.size());
}
@Test
public void testJsonElementUtilReturnsEmptyListIfAttributeNameDoesntExist() {
List<JsonValue> jsonValueSearchResult =
JsonElementSearchUtil.searchJsonValueByAttributeName(parentJsonObject, DEFAULT_CHILD_OBJECT_NAME_PREFIX);
Assert.assertEquals(0, jsonValueSearchResult.size());
}
private JsonObject buildJsonObjectWithNElements(int nElements) {
final JsonObject emptyJsonObject = new JsonObject();
for (int i = 0; i <= nElements; i++) {
emptyJsonObject.add(DEFAULT_ELEMENT_NAME_PREFIX + i, i);
}
return emptyJsonObject;
}
}