1 using System.Collections.Generic;
\r
3 using Microsoft.CSharp.RuntimeBinder;
\r
4 using Microsoft.VisualStudio.TestTools.UnitTesting;
\r
6 namespace KancolleSniffer.Test
\r
9 public class JsonTest
\r
12 [ExpectedException(typeof(JsonParserException))]
\r
13 public void InvalidChar()
\r
15 JsonParser.Parse("aaaa");
\r
19 [ExpectedException(typeof(JsonParserException))]
\r
20 public void InvalidToken()
\r
22 JsonParser.Parse("nula");
\r
26 [ExpectedException(typeof(JsonParserException))]
\r
27 public void ShortToken()
\r
29 JsonParser.Parse("tru");
\r
33 [ExpectedException(typeof(JsonParserException))]
\r
34 public void ShortTokenStartWithT()
\r
36 JsonParser.Parse("taa");
\r
40 [ExpectedException(typeof(JsonParserException))]
\r
41 public void InvalidEscape()
\r
43 JsonParser.Parse("\"\\aaaa\"");
\r
47 [ExpectedException(typeof(JsonParserException))]
\r
48 public void UnexpectedEos()
\r
50 JsonParser.Parse("\"aaaa");
\r
54 [ExpectedException(typeof(JsonParserException))]
\r
55 public void ObjectColonRequired()
\r
57 JsonParser.Parse("{\"api_result\",1}");
\r
61 [ExpectedException(typeof(JsonParserException))]
\r
62 public void ObjectStringRequired()
\r
64 JsonParser.Parse("{api_result\":1}");
\r
68 [ExpectedException(typeof(JsonParserException))]
\r
69 public void ObjectTerminatorRequired()
\r
71 JsonParser.Parse("{\"api_result\":1");
\r
75 [ExpectedException(typeof(JsonParserException))]
\r
76 public void ArrayTerminatorRequired()
\r
78 JsonParser.Parse("[1,2,3");
\r
84 Assert.AreEqual(JsonParser.Parse("null"), null);
\r
90 Assert.IsTrue((bool)(dynamic)JsonParser.Parse("true"));
\r
91 Assert.IsFalse((bool)(dynamic)JsonParser.Parse("false"));
\r
95 public void Number()
\r
97 Assert.AreEqual(123d, (double)(dynamic)JsonParser.Parse("123"));
\r
98 Assert.AreEqual(-123d, (double)(dynamic)JsonParser.Parse("-123"));
\r
99 Assert.AreEqual(123.456d, (double)(dynamic)JsonParser.Parse("123.456"));
\r
100 Assert.AreEqual(123, (int)(dynamic)JsonParser.Parse("123.456"));
\r
104 public void String()
\r
106 // ReSharper disable SuspiciousTypeConversion.Global
\r
107 Assert.AreEqual("api_result", (string)(dynamic)JsonParser.Parse(@"""api_result"""));
\r
108 Assert.AreEqual("/\"\\\b\f\n\r\t", (string)(dynamic)JsonParser.Parse(@"""\/\""\\\b\f\n\r\t"""));
\r
109 Assert.AreEqual("大和改二", (string)(dynamic)JsonParser.Parse(@"""\u5927\u548c\u6539\u4e8c"""));
\r
110 Assert.AreEqual(@"\", (string)(dynamic)JsonParser.Parse(@"""\\"""));
\r
111 // ReSharper restore SuspiciousTypeConversion.Global
\r
115 public void ObjectEmpty()
\r
117 var obj = (dynamic)JsonParser.Parse("{}");
\r
118 Assert.IsTrue(obj.IsObject);
\r
122 public void CheckProperty()
\r
124 Assert.IsFalse(((dynamic)JsonParser.Parse("{}")).api_result());
\r
128 public void CheckPropertyOfBool()
\r
130 Assert.IsFalse(((dynamic)JsonParser.Parse("true")).api_result());
\r
134 [ExpectedException(typeof(RuntimeBinderException))]
\r
135 public void GetIndexOfBool()
\r
137 Assert.IsFalse(((dynamic)JsonParser.Parse("true"))[0]);
\r
141 [ExpectedException(typeof(RuntimeBinderException))]
\r
142 public void PropertyNotExists()
\r
144 Assert.IsTrue(((dynamic)JsonParser.Parse("{}")).api_result);
\r
148 public void ObjectWithNull()
\r
150 var obj = (dynamic)JsonParser.Parse("{\"api_result\":null}");
\r
151 Assert.AreEqual(null, obj.api_result);
\r
152 Assert.AreEqual(null, obj["api_result"]);
\r
156 public void QueryAttribute()
\r
158 var obj = (dynamic)JsonParser.Parse("{\"api_result\":null}");
\r
159 Assert.IsTrue(obj.api_result());
\r
160 Assert.IsTrue(obj.IsDefined("api_result"));
\r
164 public void ObjectWithNumber()
\r
166 var obj = (dynamic)JsonParser.Parse("{\"api_result\":1}");
\r
167 Assert.AreEqual(1d, obj.api_result);
\r
168 Assert.AreEqual(1d, obj["api_result"]);
\r
172 public void ObjectWithString()
\r
174 var obj = (dynamic)JsonParser.Parse("{\"api_result\":1,\"api_result_msg\":\"\u6210\u529f\"}");
\r
175 Assert.AreEqual("成功", obj.api_result_msg);
\r
176 Assert.AreEqual("成功", obj["api_result_msg"]);
\r
180 public void ArrayEmpty()
\r
182 var obj = (dynamic)JsonParser.Parse("[]");
\r
183 Assert.IsTrue(obj.IsArray);
\r
187 public void ArrayWithPrimitives()
\r
189 var bary = (dynamic)JsonParser.Parse("[true,false,true]");
\r
190 Assert.IsTrue(bary[0]);
\r
191 var dary = (dynamic)JsonParser.Parse("[1,2,3]");
\r
192 Assert.AreEqual(dary[0], 1d);
\r
193 var sary = (dynamic)JsonParser.Parse("[\"1\", \"2\", \"3\"]");
\r
194 Assert.AreEqual(sary[0], "1");
\r
198 public void WithWhiteSpace()
\r
200 var obj = (dynamic)JsonParser.Parse("{\"api_result\":1, \"api_result_msg\" :\"\u6210\u529f\"}");
\r
201 Assert.AreEqual("成功", obj.api_result_msg);
\r
202 var ary = (double[])(dynamic)JsonParser.Parse("[1, 2, 3]");
\r
203 Assert.IsTrue(ary.SequenceEqual(new[] {1d, 2d, 3d}));
\r
207 public void EnumerateArray()
\r
209 var ary = (dynamic)JsonParser.Parse("[{\"a\":1},{\"a\":2}]");
\r
210 var list = new List<double>();
\r
211 foreach (var entry in ary)
\r
213 Assert.IsTrue(list.SequenceEqual(new[] {1d, 2d}));
\r
217 public void ObjectWithArray()
\r
219 var obj = (dynamic)JsonParser.Parse("{\"ary\":[]}");
\r
220 Assert.IsTrue(obj.ary.IsArray);
\r
224 public void EnumerateProperty()
\r
226 var obj = (dynamic)JsonParser.Parse("{\"a\":{\"a\":1},\"b\":{\"a\":2}}");
\r
227 var list = new List<double>();
\r
228 foreach (KeyValuePair<string, dynamic> entry in obj)
\r
229 list.Add(entry.Value.a);
\r
230 Assert.IsTrue(list.SequenceEqual(new[] {1d, 2d}));
\r
234 public void CastArrayToPrimitivetArray()
\r
236 var bary = (bool[])(dynamic)JsonParser.Parse("[true,false,true]");
\r
237 Assert.IsTrue(bary.SequenceEqual(new[] {true, false, true}));
\r
238 var dary = (double[])(dynamic)JsonParser.Parse("[1,2,3]");
\r
239 Assert.IsTrue(dary.SequenceEqual(new[] {1d, 2d, 3d}));
\r
240 var sary = (string[])(dynamic)JsonParser.Parse("[\"1\", \"2\", \"3\"]");
\r
241 Assert.IsTrue(sary.SequenceEqual(new[] {"1", "2", "3"}));
\r
245 public void CastArrayToIntArray()
\r
247 var iary = (int[])(dynamic)JsonParser.Parse("[1,2,3]");
\r
248 Assert.IsTrue(iary.SequenceEqual(new[] {1, 2, 3}));
\r
252 public void CastArrayToObjectArray()
\r
254 var ary = (object[])(dynamic)JsonParser.Parse("[1,2,3]");
\r
255 Assert.IsTrue(ary.Cast<double>().SequenceEqual(new[] {1d, 2d, 3d}));
\r
259 public void CastArrayOfArrayToArrayOfIntArray()
\r
261 var iary = (double[][])(dynamic)JsonParser.Parse("[[1,2],[3,4],[5,6]]");
\r
262 // ReSharper disable once PossibleNullReferenceException
\r
263 Assert.IsTrue(iary.GetType().GetElementType().IsArray);
\r
267 [ExpectedException(typeof(RuntimeBinderException))]
\r
268 public void CastArrayToArrayOfIntArray()
\r
270 Assert.IsTrue(((double[][])(dynamic)JsonParser.Parse("[1,2,3]")).GetType().IsArray);
\r
273 // ReSharper disable UnusedVariable
\r
275 [ExpectedException(typeof(RuntimeBinderException))]
\r
276 public void CastArrayToArrayOfFloat()
\r
278 var dummy = (float[])(dynamic)JsonParser.Parse("[1,2,3]");
\r
282 [ExpectedException(typeof(RuntimeBinderException))]
\r
283 public void CastObjectToArray()
\r
285 var dummy = (double[])(dynamic)JsonParser.Parse("{}");
\r
289 [ExpectedException(typeof(RuntimeBinderException))]
\r
290 public void CastArrayToDouble()
\r
292 var dummy = (double)(dynamic)JsonParser.Parse("[1,2,3]");
\r
296 [ExpectedException(typeof(RuntimeBinderException))]
\r
297 public void CastBoolToEnumerable()
\r
299 var dummy = (dynamic)JsonParser.Parse("false");
\r
300 foreach (var entry in dummy)
\r
305 // ReSharper restore UnusedVariable
\r