Skip to content

Commit

Permalink
[collector] add JsonPathParser test unit case (#589)
Browse files Browse the repository at this point in the history
  add test unit case by zhouyoulin

  add test unit case
  • Loading branch information
zhouyoulin12 authored Jan 17, 2023
1 parent ebee1a7 commit 1ffede3
Showing 1 changed file with 100 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,21 +1,120 @@
package com.usthe.collector.util;

import com.usthe.collector.collect.common.cache.CommonCache;
import com.jayway.jsonpath.TypeRef;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertEquals;

/**
* Test case for {@link JsonPathParser}
*/
class JsonPathParserTest {

private static final String JSON_ARRAY = "[{'name': 'tom', 'speed': '433'},{'name': 'lili', 'speed': '543'}]";
public final static String JSON_OBJECT =
"{ \"store\": {\n" +
" \"book\": [ \n" +
" { \"category\": \"reference\",\n" +
" \"author\": \"Nigel Rees\",\n" +
" \"title\": \"Sayings of the Century\",\n" +
" \"price\": 8.95\n" +
" },\n" +
" { \"category\": \"fiction\",\n" +
" \"author\": \"Evelyn Waugh\",\n" +
" \"title\": \"Sword of Honour\",\n" +
" \"price\": 12.99\n" +
" },\n" +
" { \"category\": \"fiction\",\n" +
" \"author\": \"Herman Melville\",\n" +
" \"title\": \"Moby Dick\",\n" +
" \"isbn\": \"0-553-21311-3\",\n" +
" \"price\": 8.99\n" +
" },\n" +
" { \"category\": \"fiction\",\n" +
" \"author\": \"J. R. R. Tolkien\",\n" +
" \"title\": \"The Lord of the Rings\",\n" +
" \"isbn\": \"0-395-19395-8\",\n" +
" \"price\": 22.99\n" +
" }\n" +
" ],\n" +
" \"bicycle\": {\n" +
" \"color\": \"red\",\n" +
" \"price\": 19.95\n," +
" \"gears\": [23, 50]\n," +
" \"extra\": {\"x\": 0}\n," +
" \"escape\" : \"Esc\\b\\f\\n\\r\\t\\u002A\",\n" +
" \"nullValue\": null\n" +
" }\n" +
" }\n" +
"}";
@BeforeEach
void setUp() {
}

@Test
void parseContentWithJsonPath() {
// process array
List<Object> tom = JsonPathParser.parseContentWithJsonPath(JSON_ARRAY,"$[0].name");
assertNotNull(tom);
assertEquals("tom",tom.get(0));
// get json array map
List<Object> entry = JsonPathParser.parseContentWithJsonPath(JSON_ARRAY,"$[1]");
assertNotNull(entry);
entry.forEach(e -> {
assertInstanceOf(Map.class, e);
assertEquals("543",((Map)e).get("speed"));
});
// process object
List<Object> author = JsonPathParser.parseContentWithJsonPath(JSON_OBJECT,"$.store.book[0].author");
assertNotNull(author);
assertEquals("Nigel Rees",author.get(0));
// get json object map
List<Object> book = JsonPathParser.parseContentWithJsonPath(JSON_OBJECT,"$.store.book[1]");
assertNotNull(book);
book.forEach(e -> {
assertInstanceOf(Map.class, e);
assertEquals("Sword of Honour",((Map)e).get("title"));
});
}

/**
* @throws java.lang.UnsupportedOperationException: Json-smart provider does not support TypeRef! Use a Jackson or Gson based provider
* need provid an provider to support TypeRef,like this:
* final Configuration configuration = Configuration.builder()//
* .jsonProvider(new JacksonJsonProvider(Json.mapper()))//
* .mappingProvider(new JacksonMappingProvider(Json.mapper()))//
* .build();
*/
// @Test
void parseContentWithJsonPath2() {
TypeRef<List<String>> typeStringRef = new TypeRef<List<String>>() {};
// process array
List<String> tom = JsonPathParser.parseContentWithJsonPath(JSON_ARRAY,"$[0].name",typeStringRef);
assertNotNull(tom);
assertEquals("tom",tom.get(0));
TypeRef<List<Map>> typeMapRef = new TypeRef<List<Map>>() {};
// get json array map
List<Map> entry = JsonPathParser.parseContentWithJsonPath(JSON_ARRAY,"$[1]",typeMapRef);
assertNotNull(entry);
entry.forEach(e -> {
assertEquals("543",e.get("speed"));
});
TypeRef<List<String>> typeStrRef = new TypeRef<List<String>>() {};
// process object
List<String> author = JsonPathParser.parseContentWithJsonPath(JSON_OBJECT,"$.store.book[0].author",typeStrRef);
assertNotNull(author);
assertEquals("Nigel Rees",author.get(0));
TypeRef<List<Map>> typeObjMapRef = new TypeRef<List<Map>>() {};
// get json object map
List<Map> book = JsonPathParser.parseContentWithJsonPath(JSON_OBJECT,"$.store.book[1]",typeObjMapRef);
assertNotNull(book);
book.forEach(e -> {
assertEquals("Sword of Honour",e.get("title"));
});
}
}

0 comments on commit 1ffede3

Please sign in to comment.