//
// Copyright (C) 2006 United States Government as represented by the
// Administrator of the National Aeronautics and Space Administration
// (NASA). All Rights Reserved.
//
// This software is distributed under the NASA Open Source Agreement
// (NOSA), version 1.3. The NOSA has been approved by the Open Source
// Initiative. See the file NOSA-1.3-JPF at the top of the distribution
// directory tree for the complete NOSA document.
//
// THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY
// KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
// LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO
// SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT
// THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT
// DOCUMENTATION, IF PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE.
//
package gov.nasa.jpf.util.json;
import org.junit.Test;
import gov.nasa.jpf.util.test.TestJPF;
/**
*
* @author Ivan Mushketik
*/
public class JSONParserTest extends TestJPF {
@Test
public void testOneLevelJSON() {
String json = "{"
+ "\"key1\" : \"str\","
+ "\"key2\" : 123"
+ "}";
JSONObject o = parseJSON(json);
Value key1 = o.getValue("key1");
assert key1.getString().equals("str");
Value key2 = o.getValue("key2");
assert key2.getDouble() == 123;
}
@Test
public void testEmptyObject() {
String json = "{}";
JSONObject o = parseJSON(json);
assert o.getValue("noValue") == null;
}
@Test
public void testArrayParse() {
String json = "{"
+ "\"key\" : ["
+ "{ \"key1\" : 123 },"
+ "{ \"key2\" : \"str\" } ]"
+ "}";
JSONObject o = parseJSON(json);
Value objects[] = o.getValue("key").getArray();
assert objects[0].getObject().getValue("key1").getDouble() == 123;
assert objects[1].getObject().getValue("key2").getString().equals("str") == true;
}
@Test
public void testEmptyArray() {
String json = "{ \"emptyArr\" : [] }";
JSONObject o = parseJSON(json);
assert o.getValue("noArray") == null;
}
@Test
public void testIdentifacatorsParsing() {
String json = "{ "
+ "\"Null\" : null,"
+ "\"True\" : true,"
+ "\"False\": false"
+ "}";
JSONObject o = parseJSON(json);
assert o.getValue("Null").getString() == null;
assert o.getValue("True").getBoolean() == true;
assert o.getValue("False").getBoolean() == false;
}
@Test
public void testCGCallParsing() {
String json = "{"
+ "\"id\" : CGName(1, \"str\", true, false, null)"
+ "}";
JSONObject o = parseJSON(json);
CGCall cgCall = o.getCGCall("id");
assert cgCall.getName().equals("CGName") == true;
Value params[] = cgCall.getValues();
assertEquals(1d, params[0].getDouble(), 0.0001);
assert params[1].getString().equals("str") == true;
assert params[2].getBoolean() == true;
assert params[3].getBoolean() == false;
assert params[4].getDouble() == null;
}
private JSONObject parseJSON(String json) {
JSONLexer lexer = new JSONLexer(json);
JSONParser parser = new JSONParser(lexer);
JSONObject o = parser.parse();
return o;
}
}