blob: f1c40573e64f389391522fdef7a5c18bdd573516 [file] [log] [blame]
package org.apache.johnzon.core;
import static org.junit.Assert.*;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonException;
import javax.json.JsonNumber;
import javax.json.JsonObject;
import javax.json.JsonPointer;
import javax.json.JsonReader;
import javax.json.JsonString;
import javax.json.JsonValue;
import javax.json.JsonValue.ValueType;
import javax.json.spi.JsonProvider;
import org.junit.Test;
public class JsonPointerTest {
@Test
public void testEmptyJsonPointer() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
assertEquals(obj, new JsonPointer("").getValue(obj));
}
@Test
public void testSimpleJsonPointer() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
JsonValue result = new JsonPointer("/a").getValue(obj);
assertNotNull(result);
assertEquals("b", ((JsonString) result).getString());
}
@Test
public void testJsonPointer1() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
JsonValue result = new JsonPointer("/c/d/0").getValue(obj);
assertNotNull(result);
assertEquals(1, ((JsonNumber) result).intValueExact());
}
@Test(expected=JsonException.class)
public void testNonExistentJsonPointer() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
new JsonPointer("/c/d/11").getValue(obj);
}
@Test(expected=JsonException.class)
public void testNonExistentJsonPointer2() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
new JsonPointer("/c/q/0").getValue(obj);
}
@Test(expected=JsonException.class)
public void testInvalidPointerNoSlash() {
new JsonPointer("a/c/g");
}
@Test(expected=JsonException.class)
public void testInvalidPointerBadEscape() {
new JsonPointer("/~2");
}
@Test(expected=JsonException.class)
public void testInvalidPointerBadEscape2() {
new JsonPointer("/~v");
}
@Test
public void testTrailingSlash() {
new JsonPointer("/a/c/g/");
}
@Test
public void testaddJsonPointerPairToRoot() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
JsonObject result = new JsonPointer("/new").add(obj, Json.createValue("newval"));
JsonValue newVal = new JsonPointer("/new").getValue(result);
assertNotNull(newVal);
assertEquals("newval", ((JsonString) newVal).getString());
assertEquals(3, result.size());
}
@Test
public void testaddJsonPointerArrayToRoot() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
JsonObject result = new JsonPointer("/new").add(obj, Json.createArrayBuilder().add(true).build());
System.out.println(result);
JsonValue newVal = new JsonPointer("/new").getValue(result);
assertNotNull(newVal);
assertEquals("[true]", newVal.toString());
assertEquals(3, result.size());
}
@Test
public void testaddJsonPointerPairToNested() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/deepnested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
JsonObject result = new JsonPointer("/c/d/2/e/r/2/new").add(obj, Json.createValue("newval"));
System.out.println(result);
JsonValue newVal = new JsonPointer("/c/d/2/e/r/2/new").getValue(result);
assertNotNull(newVal);
assertEquals("newval", ((JsonString) newVal).getString());
assertEquals(2, result.size());
}
@Test(expected=JsonException.class)
public void testaddJsonPointerDoubleNonExist() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/deepnested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
JsonObject result = new JsonPointer("/x/y").add(obj, Json.createValue("newval"));
System.out.println(result);
}
@Test
public void testaddJsonPointerPairToArrayNested() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/deepnested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
JsonObject result = new JsonPointer("/c/d/2/e/r/3").add(obj, Json.createValue("newval"));
JsonValue newVal = new JsonPointer("/c/d/2/e/r/3").getValue(result);
assertNotNull(newVal);
assertEquals("newval", ((JsonString) newVal).getString());
assertEquals(2, result.size());
}
@Test
public void testaddJsonPointerPairToObjectNestedDash() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/deepnested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
JsonObject result = new JsonPointer("/c/d/2/e/-").add(obj, Json.createValue("newval"));
System.out.println(result);
JsonValue newVal = new JsonPointer("/c/d/2/e/-").getValue(result);
assertNotNull(newVal);
assertEquals("newval", ((JsonString) newVal).getString());
assertEquals(2, result.size());
}
@Test
public void testaddJsonPointerPairToArrayNestedDash() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/deepnested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
JsonObject result = new JsonPointer("/c/d/2/e/r/-").add(obj, Json.createValue("newval"));
System.out.println(result);
JsonValue newVal = new JsonPointer("/c/d/2/e/r/3").getValue(result);
assertNotNull(newVal);
assertEquals("newval", ((JsonString) newVal).getString());
assertEquals(2, result.size());
}
@Test
public void testaddJsonPointerSet() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/deepnested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
JsonObject result = new JsonPointer("/c/d/2/e").add(obj, Json.createValue("newval"));
JsonValue newVal = new JsonPointer("/c/d/2/e").getValue(result);
assertNotNull(newVal);
assertEquals("newval", ((JsonString) newVal).getString());
assertEquals(2, result.size());
}
@Test
public void testaddJsonPointerPairToArrayNestedReplace() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/deepnested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
JsonObject result = new JsonPointer("/c/d/2/e/0").add(obj, Json.createValue("newval"));
JsonValue newVal = new JsonPointer("/c/d/2/e/0").getValue(result);
assertNotNull(newVal);
assertEquals("newval", ((JsonString) newVal).getString());
assertEquals(2, result.size());
}
@Test
public void testReplace() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/deepnested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
JsonObject result = new JsonPointer("/c/d/2/e").replace(obj, Json.createValue("newval"));
JsonValue newVal = new JsonPointer("/c/d/2/e").getValue(result);
assertNotNull(newVal);
assertEquals("newval", ((JsonString) newVal).getString());
assertEquals(2, result.size());
}
@Test
public void testRemove() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/deepnested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
System.out.println(obj);
JsonValue newVal = new JsonPointer("/c/d/2").getValue(obj);
assertNotNull(newVal);
assertEquals(2, ((JsonObject) newVal).size());
JsonObject result = new JsonPointer("/c/d/2/e").remove(obj);
System.out.println(result);
newVal = new JsonPointer("/c/d/2").getValue(result);
assertNotNull(newVal);
assertEquals(1, ((JsonObject) newVal).size());
assertEquals(2, result.size());
}
@Test
public void testRemoveAll() {
final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/deepnested.json"));
assertNotNull(loadInMemReader);
JsonObject obj = loadInMemReader.readObject();
JsonObject result = new JsonPointer("").remove(obj);
System.out.println(result);
assertEquals(JsonValue.EMPTY_JSON_OBJECT, result);
}
}