2 * Copyright (C) 2014, United States Government, as represented by the
3 * Administrator of the National Aeronautics and Space Administration.
6 * The Java Pathfinder core (jpf-core) platform is licensed under the
7 * Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0.
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 package gov.nasa.jpf.util.json;
20 import gov.nasa.jpf.util.test.TestJPF;
22 import java.io.StringReader;
24 import org.junit.Test;
29 * @author Ivan Mushketik
31 public class JSONLexerTest extends TestJPF {
33 public void testEmptyObject() {
35 JSONLexer lexer = new JSONLexer(new StringReader(json));
37 Token expectedTokens[] = {
38 new Token(Token.Type.ObjectStart, "{"),
39 new Token(Token.Type.ObjectEnd, "}"),
40 new Token(Token.Type.DocumentEnd, null)};
42 assertTokenSequence(expectedTokens, lexer);
45 private void assertTokenSequence(Token[] expectedTokens, JSONLexer lexer) {
47 for (; i < expectedTokens.length; i++) {
48 Token t = lexer.getNextToken();
49 assert t.equals(expectedTokens[i]);
52 assert i == expectedTokens.length;
53 assert lexer.hasMore() == false;
57 public void testKeyIdObject() {
62 JSONLexer lexer = new JSONLexer(new StringReader(json));
64 Token expectedTokens[] = {
65 new Token(Token.Type.ObjectStart, "{"),
66 new Token(Token.Type.String, "key1"),
67 new Token(Token.Type.KeyValueSeparator, ":"),
68 new Token(Token.Type.Identificator, "true"),
69 new Token(Token.Type.String, "key2"),
70 new Token(Token.Type.KeyValueSeparator, ":"),
71 new Token(Token.Type.Identificator, "false"),
72 new Token(Token.Type.ObjectEnd, "}"),
73 new Token(Token.Type.DocumentEnd, null)};
75 assertTokenSequence(expectedTokens, lexer);
79 public void testKeyIdObjectWithEscapes() {
81 + "\"key\\t\\n\\\\ \" : true"
82 + "\"key\\u1234\" : false"
84 JSONLexer lexer = new JSONLexer(new StringReader(json));
86 Token expectedTokens[] = {
87 new Token(Token.Type.ObjectStart, "{"),
88 new Token(Token.Type.String, "key\t\n\\ "),
89 new Token(Token.Type.KeyValueSeparator, ":"),
90 new Token(Token.Type.Identificator, "true"),
91 new Token(Token.Type.String, "key\u1234"),
92 new Token(Token.Type.KeyValueSeparator, ":"),
93 new Token(Token.Type.Identificator, "false"),
94 new Token(Token.Type.ObjectEnd, "}"),
95 new Token(Token.Type.DocumentEnd, null)};
97 assertTokenSequence(expectedTokens, lexer);
101 public void testKeyIdObjectWithNumbers() {
103 + "\"key1\" : -123.234e3"
107 JSONLexer lexer = new JSONLexer(new StringReader(json));
109 Token expectedTokens[] = {
110 new Token(Token.Type.ObjectStart, "{"),
111 new Token(Token.Type.String, "key1"),
112 new Token(Token.Type.KeyValueSeparator, ":"),
113 new Token(Token.Type.Number, "-123.234e3"),
114 new Token(Token.Type.String, "key2"),
115 new Token(Token.Type.KeyValueSeparator, ":"),
116 new Token(Token.Type.Number, "1.4"),
117 new Token(Token.Type.String, "key3"),
118 new Token(Token.Type.KeyValueSeparator, ":"),
119 new Token(Token.Type.Number, "132"),
120 new Token(Token.Type.ObjectEnd, "}"),
121 new Token(Token.Type.DocumentEnd, null)};
123 assertTokenSequence(expectedTokens, lexer);
127 public void testArrayTokens() {
131 JSONLexer lexer = new JSONLexer(new StringReader(json));
133 Token expectedTokens[] = {
134 new Token(Token.Type.ObjectStart, "{"),
135 new Token(Token.Type.ArrayStart, "["),
136 new Token(Token.Type.ArrayEnd, "]"),
137 new Token(Token.Type.ObjectEnd, "}"),
138 new Token(Token.Type.DocumentEnd, null)
141 assertTokenSequence(expectedTokens, lexer);
145 public void testCGCallTokens() {
147 + "\"i\" : MyCG(1, \"str\")"
149 JSONLexer lexer = new JSONLexer(new StringReader(json));
151 Token expectedTokens[] = {
152 new Token(Token.Type.ObjectStart, "{"),
153 new Token(Token.Type.String, "i"),
154 new Token(Token.Type.KeyValueSeparator, ":"),
155 new Token(Token.Type.Identificator, "MyCG"),
156 new Token(Token.Type.CGCallParamsStart, "("),
157 new Token(Token.Type.Number, "1"),
158 new Token(Token.Type.Comma, ","),
159 new Token(Token.Type.String, "str"),
160 new Token(Token.Type.CGCallParamsEnd, ")"),
161 new Token(Token.Type.ObjectEnd, "}"),
162 new Token(Token.Type.DocumentEnd, null)
165 assertTokenSequence(expectedTokens, lexer);