forked from External/mage
145 lines
6 KiB
Java
145 lines
6 KiB
Java
package com.anygo.ws.json;
|
|
|
|
import com.xmage.ws.util.json.JSONParser;
|
|
import com.xmage.ws.util.json.JSONValidationException;
|
|
import junit.framework.Assert;
|
|
import net.minidev.json.JSONArray;
|
|
import net.minidev.json.JSONObject;
|
|
import org.junit.Test;
|
|
|
|
/**
|
|
*
|
|
* @author noxx
|
|
*/
|
|
public class TestJSONParser {
|
|
|
|
@Test
|
|
public void testParse() throws Exception {
|
|
JSONParser parser = new JSONParser();
|
|
parser.parseJSON("{}");
|
|
parser.parseJSON("{\"test\" : 1}");
|
|
parser.parseJSON("{\"test\" : \"test\"}");
|
|
parser.parseJSON("{\"list\" : [\"1\", \"2\", \"3\"]}");
|
|
parser.parseJSON("{test:test}");
|
|
|
|
testError(parser, "{");
|
|
testError(parser, "}");
|
|
testError(parser, "{{}");
|
|
testError(parser, "{\"test\" : [}}");
|
|
}
|
|
|
|
@Test
|
|
public void testQueryForInt() throws Exception {
|
|
JSONParser parser = new JSONParser();
|
|
parser.parseJSON("{\"test\" : 1}");
|
|
Assert.assertEquals(1, parser.getInt("test"));
|
|
|
|
parser = new JSONParser();
|
|
parser.parseJSON("{test : { internal : {level : 2}}}");
|
|
Assert.assertEquals(2, parser.getInt("test.internal.level"));
|
|
Assert.assertFalse("No cache should have been used", parser.isHitCache());
|
|
|
|
Assert.assertEquals(2, parser.getInt("test.internal.level"));
|
|
Assert.assertTrue("Cache should have been used this time!", parser.isHitCache());
|
|
}
|
|
|
|
@Test
|
|
public void testQueryForJSONArray() throws Exception {
|
|
JSONParser parser = new JSONParser();
|
|
parser.parseJSON("{\"test\" : [\"1\", \"2\", \"3\"]}");
|
|
Assert.assertTrue(parser.getJSONArray("test") instanceof JSONArray);
|
|
Assert.assertEquals("1", parser.getJSONArray("test").get(0));
|
|
|
|
parser = new JSONParser();
|
|
parser.parseJSON("{\"test\" : [1,2,3]}");
|
|
Assert.assertTrue(parser.getJSONArray("test") instanceof JSONArray);
|
|
Assert.assertFalse(parser.isHitCache());
|
|
Assert.assertEquals(2, parser.getJSONArray("test").get(1));
|
|
Assert.assertTrue(parser.isHitCache());
|
|
|
|
Assert.assertTrue(parser.getJSONArray("test") instanceof JSONArray);
|
|
Assert.assertEquals(2, parser.getJSONArray("test").get(1));
|
|
Assert.assertTrue(parser.isHitCache());
|
|
|
|
parser = new JSONParser();
|
|
parser.parseJSON("{\"test\" : [{second_level: \"3\"}, {\"third_level\" : 2}]}");
|
|
Assert.assertTrue(parser.getJSONArray("test") instanceof JSONArray);
|
|
Assert.assertTrue(parser.getJSONArray("test").get(0) instanceof JSONObject);
|
|
Assert.assertEquals(2, parser.getInt("test[1].third_level"));
|
|
Assert.assertEquals("3", parser.getString("test[0].second_level"));
|
|
|
|
parser = new JSONParser();
|
|
parser.parseJSON("{\"test\" : [{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},{1:1},{2:3},{4:5}]}");
|
|
Assert.assertTrue(parser.getJSONArray("test") instanceof JSONArray);
|
|
Assert.assertEquals(5, parser.getInt("test[10].4"));
|
|
}
|
|
|
|
@Test
|
|
//TODO: implement
|
|
public void testErrors() throws Exception {
|
|
//JSONParser parser = new JSONParser();
|
|
//parser.parseJSON("{test : { internal : {level : \"2\"}}}");
|
|
//parser.getInt("test.internal.level");
|
|
}
|
|
|
|
@Test
|
|
public void testExtendedCache() throws Exception {
|
|
JSONParser parser = new JSONParser();
|
|
parser.parseJSON("{test : { internal : {level : 2}}}");
|
|
Assert.assertEquals(2, parser.getInt("test.internal.level"));
|
|
Assert.assertFalse("No cache should have been used", parser.isHitCache());
|
|
|
|
Assert.assertTrue(parser.getJSON("test") instanceof JSONObject);
|
|
Assert.assertFalse("No cache should have been used", parser.isHitCache());
|
|
Assert.assertTrue(parser.getJSON("test.internal") instanceof JSONObject);
|
|
Assert.assertFalse("No cache should have been used", parser.isHitCache());
|
|
|
|
parser = new JSONParser();
|
|
parser.parseJSON("{test : { internal : {level : 2}}}");
|
|
parser.setCachePolicy(JSONParser.CachePolicy.CACHE_ALL_LEVELS);
|
|
Assert.assertEquals(2, parser.getInt("test.internal.level"));
|
|
Assert.assertFalse("No cache should have been used", parser.isHitCache());
|
|
|
|
Assert.assertTrue(parser.getJSON("test") instanceof JSONObject);
|
|
Assert.assertTrue("Cache should have been used this time!", parser.isHitCache());
|
|
Assert.assertTrue(parser.getJSON("test.internal") instanceof JSONObject);
|
|
Assert.assertTrue("Cache should have been used this time!", parser.isHitCache());
|
|
}
|
|
|
|
@Test
|
|
public void testExtendedIndexes() throws Exception {
|
|
JSONParser parser = new JSONParser();
|
|
parser.parseJSON("{\"test\" : [1,2,3,4,5]}");
|
|
Assert.assertEquals(1, parser.getInt("test[].$first"));
|
|
Assert.assertEquals(2, parser.getInt("test[].$second"));
|
|
Assert.assertEquals(3, parser.getInt("test[].$third"));
|
|
Assert.assertEquals(4, parser.getInt("test[].$fourth"));
|
|
Assert.assertEquals(5, parser.getInt("test[].$fifth"));
|
|
|
|
parser = new JSONParser();
|
|
parser.parseJSON("{\"test\" : [{1:1},{2:2},{3:3},{4:4},{5:5}]}");
|
|
Assert.assertEquals(1, parser.getInt("test[].$first.1"));
|
|
Assert.assertEquals(2, parser.getInt("test[].$second.2"));
|
|
Assert.assertEquals(3, parser.getInt("test[].$third.3"));
|
|
Assert.assertEquals(4, parser.getInt("test[].$fourth.4"));
|
|
Assert.assertEquals(5, parser.getInt("test[].$fifth.5"));
|
|
|
|
parser = new JSONParser();
|
|
parser.parseJSON("{\"contacts\": {\"phones\": [\n" +
|
|
" {\"phone\": \"100000\"},\n" +
|
|
" {\"phone\": \"+7 999 1234567\"}\n" +
|
|
" ]}}");
|
|
|
|
Assert.assertEquals("100000", parser.getString("contacts.phones[].$first.phone"));
|
|
|
|
}
|
|
|
|
private void testError(JSONParser parser, String jsonToTest) throws Exception {
|
|
try {
|
|
parser.parseJSON(jsonToTest);
|
|
Assert.assertTrue("Should have thrown an exception", false);
|
|
} catch (JSONValidationException j) {
|
|
// ok
|
|
}
|
|
}
|
|
}
|