Initial import
[jpf-core.git] / src / tests / gov / nasa / jpf / util / json / JSONLexerTest.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
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
9  * 
10  *        http://www.apache.org/licenses/LICENSE-2.0. 
11  *
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.
17  */
18 package gov.nasa.jpf.util.json;
19
20 import gov.nasa.jpf.util.test.TestJPF;
21
22 import java.io.StringReader;
23
24 import org.junit.Test;
25
26
27 /**
28  *
29  * @author Ivan Mushketik
30  */
31 public class JSONLexerTest extends TestJPF {
32   @Test
33   public void testEmptyObject() {
34     String json = "{}";
35     JSONLexer lexer = new JSONLexer(new StringReader(json));
36
37     Token expectedTokens[] = {
38       new Token(Token.Type.ObjectStart, "{"),
39       new Token(Token.Type.ObjectEnd, "}"),
40       new Token(Token.Type.DocumentEnd, null)};
41
42     assertTokenSequence(expectedTokens, lexer);
43   }
44
45   private void assertTokenSequence(Token[] expectedTokens, JSONLexer lexer) {
46     int i = 0;
47     for (; i < expectedTokens.length; i++) {
48       Token t = lexer.getNextToken();
49       assert t.equals(expectedTokens[i]);
50     }
51
52     assert i == expectedTokens.length;
53     assert lexer.hasMore() == false;
54   }
55
56   @Test
57   public void testKeyIdObject() {
58     String json = "{ "
59             + "\"key1\" : true"
60             + "\"key2\" : false"
61             + "}";
62     JSONLexer lexer = new JSONLexer(new StringReader(json));
63
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)};
74
75     assertTokenSequence(expectedTokens, lexer);
76   }
77
78   @Test
79   public void testKeyIdObjectWithEscapes() {
80     String json = "{ "
81             + "\"key\\t\\n\\\\ \" : true"
82             + "\"key\\u1234\" : false"
83             + "}";
84     JSONLexer lexer = new JSONLexer(new StringReader(json));
85
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)};
96
97     assertTokenSequence(expectedTokens, lexer);
98   }
99
100   @Test
101   public void testKeyIdObjectWithNumbers() {
102     String json = "{ "
103             + "\"key1\" : -123.234e3"
104             + "\"key2\" : 1.4"
105             + "\"key3\" : 132"
106             + "}";
107     JSONLexer lexer = new JSONLexer(new StringReader(json));
108
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)};
122
123     assertTokenSequence(expectedTokens, lexer);
124   }
125
126   @Test
127   public void testArrayTokens() {
128     String json = "{ "
129             + "[ ]"
130             + "}";
131     JSONLexer lexer = new JSONLexer(new StringReader(json));
132
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)
139     };
140
141     assertTokenSequence(expectedTokens, lexer);
142   }
143
144   @Test
145   public void testCGCallTokens() {
146     String json = "{ "
147             + "\"i\" : MyCG(1, \"str\")"
148             + "}";
149     JSONLexer lexer = new JSONLexer(new StringReader(json));
150
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)
163     };
164
165     assertTokenSequence(expectedTokens, lexer);
166   }
167 }