Skip to content

Commit e33cdd7

Browse files
committed
PAYARA-1943 Add JSON-P Pointer example
1 parent f6a4efa commit e33cdd7

File tree

2 files changed

+170
-0
lines changed

2 files changed

+170
-0
lines changed

json-p/pointer/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@
99
<groupId>org.javaee8.jsonp</groupId>
1010
<artifactId>pointer</artifactId>
1111
<packaging>jar</packaging>
12+
<name>Java EE 8 Samples: JSON-P - Pointer</name>
1213
</project>
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
package org.javaee8.jsonp.pointer;
2+
3+
import java.math.BigDecimal;
4+
import javax.json.Json;
5+
import javax.json.JsonMergePatch;
6+
import javax.json.JsonObject;
7+
import javax.json.JsonPointer;
8+
import javax.json.JsonValue;
9+
import org.jboss.arquillian.container.test.api.Deployment;
10+
import org.jboss.arquillian.junit.Arquillian;
11+
import org.jboss.shrinkwrap.api.ShrinkWrap;
12+
import org.jboss.shrinkwrap.api.spec.JavaArchive;
13+
import static org.junit.Assert.assertTrue;
14+
import org.junit.Test;
15+
import org.junit.runner.RunWith;
16+
17+
/**
18+
* Class that tests and demonstrates the JSON-P 1.1 Pointer Operations.
19+
* @author Andrew Pielage
20+
*/
21+
@RunWith(Arquillian.class)
22+
public class JsonpPointerTest {
23+
24+
// Create a JsonObject with some values to be used in each test
25+
private static final JsonObject json = Json.createObjectBuilder()
26+
.add("Wibbly", "Wobbly")
27+
.add("Replaced", false)
28+
.add("Lexicon", Json.createArrayBuilder()
29+
.add("Wibbles")
30+
.add("Wobbles")
31+
.build())
32+
.add("Nested", Json.createObjectBuilder()
33+
.add("Birdie", "Wordie")
34+
.add("Bestiary", Json.createArrayBuilder()
35+
.add("Drowner")
36+
.add("Werewolf")
37+
.add("Chimera")
38+
.build())
39+
.build())
40+
.build();
41+
42+
@Deployment
43+
public static JavaArchive createDeployment() {
44+
// Create a JavaArchive to deploy
45+
JavaArchive jar = ShrinkWrap.create(JavaArchive.class);
46+
47+
// Print out directory contents
48+
System.out.println(jar.toString(true));
49+
50+
// Return Arquillian Test Archive for application server
51+
return jar;
52+
}
53+
54+
/**
55+
* Test that the JSON Pointers resolve to the correct values as.
56+
*/
57+
@Test
58+
public void resolveTest() {
59+
// Create pointers
60+
JsonPointer objectPointer = Json.createPointer("");
61+
JsonPointer objectMemberPointer = Json.createPointer("/Wibbly");
62+
JsonPointer arrayPointer = Json.createPointer("/Lexicon");
63+
JsonPointer arrayElementPointer = Json.createPointer("/Lexicon/0");
64+
JsonPointer nestedObjectPointer = Json.createPointer("/Nested");
65+
JsonPointer nestedObjectMemberPointer = Json.createPointer("/Nested/Birdie");
66+
JsonPointer nestedArrayPointer = Json.createPointer("/Nested/Bestiary");
67+
JsonPointer nestedArrayElementPointer = Json.createPointer("/Nested/Bestiary/1");
68+
69+
// Check pointers return the correct values
70+
assertTrue("objectPointer doesn't resolve correctly!", objectPointer.getValue(json).equals(json));
71+
assertTrue("objectMemberPointer doesn't resolve correctly!",
72+
objectMemberPointer.getValue(json).toString().equals("\"Wobbly\""));
73+
assertTrue("arrayPointer doesn't resolve correctly!",
74+
arrayPointer.getValue(json).equals(json.getJsonArray("Lexicon")));
75+
assertTrue("arrayElementPointer doesn't resolve correctly!",
76+
arrayElementPointer.getValue(json).toString().equals("\"Wibbles\""));
77+
assertTrue("nestedObjectPointer doesn't resolve correctly!",
78+
nestedObjectPointer.getValue(json).equals(json.getJsonObject("Nested")));
79+
assertTrue("nestedObjectMemberPointer doesn't resolve correctly!",
80+
nestedObjectMemberPointer.getValue(json).toString().equals("\"Wordie\""));
81+
assertTrue("nestedArrayPointer doesn't resolve correctly!",
82+
nestedArrayPointer.getValue(json).equals(json.getJsonObject("Nested").getJsonArray("Bestiary")));
83+
assertTrue("nestedArrayElementPointer doesn't resolve correctly!",
84+
nestedArrayElementPointer.getValue(json).toString().equals("\"Werewolf\""));
85+
86+
// Check alternative notation
87+
assertTrue("objectMemberPointer doesn't resolve correctly!", json.getValue("/Wibbly").toString().equals("\"Wobbly\""));
88+
assertTrue("objectMemberPointer doesn't resolve correctly!",
89+
json.getValue("/Nested/Bestiary/2").toString().equals("\"Chimera\""));
90+
}
91+
92+
/**
93+
* Test that the JSON Pointer add operation works as expected.
94+
*/
95+
@Test
96+
public void addTest() {
97+
// Create pointers
98+
JsonPointer objectMemberPointer = Json.createPointer("/Giggly");
99+
JsonPointer arrayElementPointer = Json.createPointer("/Lexicon/0");
100+
JsonPointer nestedObjectMemberPointer = Json.createPointer("/Nested/Purdie");
101+
JsonPointer nestedArrayElementPointer = Json.createPointer("/Nested/Bestiary/1");
102+
103+
// Perform an add operation on each pointer
104+
JsonObject modifiedJson = objectMemberPointer.add(json, Json.createValue("Goggly"));
105+
modifiedJson = arrayElementPointer.add(modifiedJson, Json.createValue("Giggles"));
106+
modifiedJson = nestedObjectMemberPointer.add(modifiedJson, Json.createValue("Furdie"));
107+
modifiedJson = nestedArrayElementPointer.add(modifiedJson, Json.createValue("Wraith"));
108+
109+
// Check that they've been added
110+
assertTrue("Object member not added!", modifiedJson.containsKey("Giggly")
111+
&& modifiedJson.getString("Giggly").equals("Goggly"));
112+
assertTrue("Array element not added!", modifiedJson.getJsonArray("Lexicon").size() == 3
113+
&& modifiedJson.getJsonArray("Lexicon").getString(0).equals("Giggles"));
114+
assertTrue("Nested object member not added!", modifiedJson.getJsonObject("Nested").containsKey("Purdie")
115+
&& modifiedJson.getJsonObject("Nested").getString("Purdie").equals("Furdie"));
116+
assertTrue("Nested array element not added!",
117+
modifiedJson.getJsonObject("Nested").getJsonArray("Bestiary").size() == 4
118+
&& modifiedJson.getJsonObject("Nested").getJsonArray("Bestiary").getString(1).equals("Wraith"));
119+
}
120+
121+
/**
122+
* Test that the JSON Pointer remove operation works as expected.
123+
*/
124+
@Test
125+
public void removeTest() {
126+
// Create pointers
127+
JsonPointer objectMemberPointer = Json.createPointer("/Wibbly");
128+
JsonPointer arrayElementPointer = Json.createPointer("/Lexicon/0");
129+
JsonPointer nestedObjectMemberPointer = Json.createPointer("/Nested/Birdie");
130+
JsonPointer nestedArrayPointer = Json.createPointer("/Nested/Bestiary");
131+
132+
// Perform a remove operation using each pointer
133+
JsonObject modifiedJson = objectMemberPointer.remove(json);
134+
modifiedJson = arrayElementPointer.remove(modifiedJson);
135+
modifiedJson = nestedObjectMemberPointer.remove(modifiedJson);
136+
modifiedJson = nestedArrayPointer.remove(modifiedJson);
137+
138+
// Check that they've been removed
139+
assertTrue("Object member not removed!", !modifiedJson.containsKey("Wibbly"));
140+
assertTrue("Array element not removed!", modifiedJson.getJsonArray("Lexicon").size() == 1
141+
&& !modifiedJson.getJsonArray("Lexicon").getString(0).equals("Drowner"));
142+
assertTrue("Nested object member not removed!", !modifiedJson.getJsonObject("Nested").containsKey("Birdie"));
143+
assertTrue("Nested array not removed!", !modifiedJson.getJsonObject("Nested").containsKey("Bestiary"));
144+
}
145+
146+
/**
147+
* Test that the JSON Pointer replace operation works as expected.
148+
*/
149+
@Test
150+
public void replaceTest() {
151+
// Create pointers
152+
JsonPointer objectMemberPointer = Json.createPointer("/Wibbly");
153+
JsonPointer arrayElementPointer = Json.createPointer("/Lexicon/0");
154+
JsonPointer nestedObjectMemberPointer = Json.createPointer("/Nested/Birdie");
155+
156+
// Perform a replace operation using each pointer
157+
JsonObject modifiedJson = objectMemberPointer.replace(json, Json.createValue("Bobbly"));
158+
modifiedJson = arrayElementPointer.replace(modifiedJson, Json.createValue("Tiddles"));
159+
modifiedJson = nestedObjectMemberPointer.replace(modifiedJson, Json.createValue("Bubbly"));
160+
161+
// Check that they've been replaced
162+
assertTrue("Object member not added!", modifiedJson.containsKey("Wibbly")
163+
&& modifiedJson.getString("Wibbly").equals("Bobbly"));
164+
assertTrue("Array element not added!", modifiedJson.getJsonArray("Lexicon").size() == 2
165+
&& modifiedJson.getJsonArray("Lexicon").getString(0).equals("Tiddles"));
166+
assertTrue("Nested object member not added!", modifiedJson.getJsonObject("Nested").containsKey("Birdie")
167+
&& modifiedJson.getJsonObject("Nested").getString("Birdie").equals("Bubbly"));
168+
}
169+
}

0 commit comments

Comments
 (0)