//
// 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 java.io.StringReader;
import org.junit.Test;
import gov.nasa.jpf.util.test.TestJPF;
/**
*
* @author Ivan Mushketik
*/
public class JSONLexerTest extends TestJPF {
@Test
public void testEmptyObject() {
String json = "{}";
JSONLexer lexer = new JSONLexer(new StringReader(json));
Token expectedTokens[] = {
new Token(Token.Type.ObjectStart, "{"),
new Token(Token.Type.ObjectEnd, "}"),
new Token(Token.Type.DocumentEnd, null)};
assertTokenSequence(expectedTokens, lexer);
}
private void assertTokenSequence(Token[] expectedTokens, JSONLexer lexer) {
int i = 0;
for (; i < expectedTokens.length; i++) {
Token t = lexer.getNextToken();
assert t.equals(expectedTokens[i]);
}
assert i == expectedTokens.length;
assert lexer.hasMore() == false;
}
@Test
public void testKeyIdObject() {
String json = "{ "
+ "\"key1\" : true"
+ "\"key2\" : false"
+ "}";
JSONLexer lexer = new JSONLexer(new StringReader(json));
Token expectedTokens[] = {
new Token(Token.Type.ObjectStart, "{"),
new Token(Token.Type.String, "key1"),
new Token(Token.Type.KeyValueSeparator, ":"),
new Token(Token.Type.Identificator, "true"),
new Token(Token.Type.String, "key2"),
new Token(Token.Type.KeyValueSeparator, ":"),
new Token(Token.Type.Identificator, "false"),
new Token(Token.Type.ObjectEnd, "}"),
new Token(Token.Type.DocumentEnd, null)};
assertTokenSequence(expectedTokens, lexer);
}
@Test
public void testKeyIdObjectWithEscapes() {
String json = "{ "
+ "\"key\\t\\n\\\\ \" : true"
+ "\"key\\u1234\" : false"
+ "}";
JSONLexer lexer = new JSONLexer(new StringReader(json));
Token expectedTokens[] = {
new Token(Token.Type.ObjectStart, "{"),
new Token(Token.Type.String, "key\t\n\\ "),
new Token(Token.Type.KeyValueSeparator, ":"),
new Token(Token.Type.Identificator, "true"),
new Token(Token.Type.String, "key\u1234"),
new Token(Token.Type.KeyValueSeparator, ":"),
new Token(Token.Type.Identificator, "false"),
new Token(Token.Type.ObjectEnd, "}"),
new Token(Token.Type.DocumentEnd, null)};
assertTokenSequence(expectedTokens, lexer);
}
@Test
public void testKeyIdObjectWithNumbers() {
String json = "{ "
+ "\"key1\" : -123.234e3"
+ "\"key2\" : 1.4"
+ "\"key3\" : 132"
+ "}";
JSONLexer lexer = new JSONLexer(new StringReader(json));
Token expectedTokens[] = {
new Token(Token.Type.ObjectStart, "{"),
new Token(Token.Type.String, "key1"),
new Token(Token.Type.KeyValueSeparator, ":"),
new Token(Token.Type.Number, "-123.234e3"),
new Token(Token.Type.String, "key2"),
new Token(Token.Type.KeyValueSeparator, ":"),
new Token(Token.Type.Number, "1.4"),
new Token(Token.Type.String, "key3"),
new Token(Token.Type.KeyValueSeparator, ":"),
new Token(Token.Type.Number, "132"),
new Token(Token.Type.ObjectEnd, "}"),
new Token(Token.Type.DocumentEnd, null)};
assertTokenSequence(expectedTokens, lexer);
}
@Test
public void testArrayTokens() {
String json = "{ "
+ "[ ]"
+ "}";
JSONLexer lexer = new JSONLexer(new StringReader(json));
Token expectedTokens[] = {
new Token(Token.Type.ObjectStart, "{"),
new Token(Token.Type.ArrayStart, "["),
new Token(Token.Type.ArrayEnd, "]"),
new Token(Token.Type.ObjectEnd, "}"),
new Token(Token.Type.DocumentEnd, null)
};
assertTokenSequence(expectedTokens, lexer);
}
@Test
public void testCGCallTokens() {
String json = "{ "
+ "\"i\" : MyCG(1, \"str\")"
+ "}";
JSONLexer lexer = new JSONLexer(new StringReader(json));
Token expectedTokens[] = {
new Token(Token.Type.ObjectStart, "{"),
new Token(Token.Type.String, "i"),
new Token(Token.Type.KeyValueSeparator, ":"),
new Token(Token.Type.Identificator, "MyCG"),
new Token(Token.Type.CGCallParamsStart, "("),
new Token(Token.Type.Number, "1"),
new Token(Token.Type.Comma, ","),
new Token(Token.Type.String, "str"),
new Token(Token.Type.CGCallParamsEnd, ")"),
new Token(Token.Type.ObjectEnd, "}"),
new Token(Token.Type.DocumentEnd, null)
};
assertTokenSequence(expectedTokens, lexer);
}
}