|
| 1 | +package jdk.sandbox.internal.util.json; |
| 2 | + |
| 3 | +import jdk.sandbox.java.util.json.JsonArray; |
| 4 | +import jdk.sandbox.java.util.json.JsonBoolean; |
| 5 | +import jdk.sandbox.java.util.json.JsonNull; |
| 6 | +import jdk.sandbox.java.util.json.JsonNumber; |
| 7 | +import jdk.sandbox.java.util.json.JsonObject; |
| 8 | +import jdk.sandbox.java.util.json.JsonString; |
| 9 | +import jdk.sandbox.java.util.json.JsonValue; |
| 10 | +import org.junit.jupiter.api.Test; |
| 11 | + |
| 12 | +import static org.assertj.core.api.Assertions.assertThat; |
| 13 | + |
| 14 | +public class JsonPatternMatchingTests { |
| 15 | + |
| 16 | + private String identifyJsonValue(JsonValue jsonValue) { |
| 17 | + return switch (jsonValue) { |
| 18 | + case JsonObject o -> "Object with " + o.members().size() + " members"; |
| 19 | + case JsonArray a -> "Array with " + a.values().size() + " elements"; |
| 20 | + case JsonString s -> "String with value: " + s.value(); |
| 21 | + case JsonNumber n -> "Number with value: " + n.toNumber(); |
| 22 | + case JsonBoolean b -> "Boolean with value: " + b.value(); |
| 23 | + case JsonNull ignored -> "Null"; |
| 24 | + }; |
| 25 | + } |
| 26 | + |
| 27 | + @Test |
| 28 | + void testPatternMatchingOnJsonTypes() { |
| 29 | + String json = """ |
| 30 | + { |
| 31 | + "myObject": {}, |
| 32 | + "myArray": [1, 2], |
| 33 | + "myString": "hello", |
| 34 | + "myNumber": 123.45, |
| 35 | + "myBoolean": true, |
| 36 | + "myNull": null |
| 37 | + } |
| 38 | + """; |
| 39 | + |
| 40 | + JsonParser parser = new JsonParser(json.toCharArray()); |
| 41 | + JsonObject jsonObject = (JsonObject) parser.parseRoot(); |
| 42 | + |
| 43 | + assertThat(identifyJsonValue(jsonObject.members().get("myObject"))).isEqualTo("Object with 0 members"); |
| 44 | + assertThat(identifyJsonValue(jsonObject.members().get("myArray"))).isEqualTo("Array with 2 elements"); |
| 45 | + assertThat(identifyJsonValue(jsonObject.members().get("myString"))).isEqualTo("String with value: hello"); |
| 46 | + assertThat(identifyJsonValue(jsonObject.members().get("myNumber"))).isEqualTo("Number with value: 123.45"); |
| 47 | + assertThat(identifyJsonValue(jsonObject.members().get("myBoolean"))).isEqualTo("Boolean with value: true"); |
| 48 | + assertThat(identifyJsonValue(jsonObject.members().get("myNull"))).isEqualTo("Null"); |
| 49 | + } |
| 50 | +} |
0 commit comments