OSDN Git Service

バージョン9.19の準備
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer.Test / JsonTest.cs
1 using System.Collections.Generic;\r
2 using System.Linq;\r
3 using Microsoft.CSharp.RuntimeBinder;\r
4 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
5 \r
6 namespace KancolleSniffer.Test\r
7 {\r
8     [TestClass]\r
9     public class JsonTest\r
10     {\r
11         [TestMethod]\r
12         [ExpectedException(typeof(JsonParserException))]\r
13         public void InvalidChar()\r
14         {\r
15             JsonParser.Parse("aaaa");\r
16         }\r
17 \r
18         [TestMethod]\r
19         [ExpectedException(typeof(JsonParserException))]\r
20         public void InvalidToken()\r
21         {\r
22             JsonParser.Parse("nula");\r
23         }\r
24 \r
25         [TestMethod]\r
26         [ExpectedException(typeof(JsonParserException))]\r
27         public void ShortToken()\r
28         {\r
29             JsonParser.Parse("tru");\r
30         }\r
31 \r
32         [TestMethod]\r
33         [ExpectedException(typeof(JsonParserException))]\r
34         public void ShortTokenStartWithT()\r
35         {\r
36             JsonParser.Parse("taa");\r
37         }\r
38 \r
39         [TestMethod]\r
40         [ExpectedException(typeof(JsonParserException))]\r
41         public void InvalidEscape()\r
42         {\r
43             JsonParser.Parse("\"\\aaaa\"");\r
44         }\r
45 \r
46         [TestMethod]\r
47         [ExpectedException(typeof(JsonParserException))]\r
48         public void UnexpectedEos()\r
49         {\r
50             JsonParser.Parse("\"aaaa");\r
51         }\r
52 \r
53         [TestMethod]\r
54         [ExpectedException(typeof(JsonParserException))]\r
55         public void ObjectColonRequired()\r
56         {\r
57             JsonParser.Parse("{\"api_result\",1}");\r
58         }\r
59 \r
60         [TestMethod]\r
61         [ExpectedException(typeof(JsonParserException))]\r
62         public void ObjectStringRequired()\r
63         {\r
64             JsonParser.Parse("{api_result\":1}");\r
65         }\r
66 \r
67         [TestMethod]\r
68         [ExpectedException(typeof(JsonParserException))]\r
69         public void ObjectTerminatorRequired()\r
70         {\r
71             JsonParser.Parse("{\"api_result\":1");\r
72         }\r
73 \r
74         [TestMethod]\r
75         [ExpectedException(typeof(JsonParserException))]\r
76         public void ArrayTerminatorRequired()\r
77         {\r
78             JsonParser.Parse("[1,2,3");\r
79         }\r
80 \r
81         [TestMethod]\r
82         public void Null()\r
83         {\r
84             Assert.AreEqual(JsonParser.Parse("null"), null);\r
85         }\r
86 \r
87         [TestMethod]\r
88         public void Bool()\r
89         {\r
90             Assert.IsTrue((bool)(dynamic)JsonParser.Parse("true"));\r
91             Assert.IsFalse((bool)(dynamic)JsonParser.Parse("false"));\r
92         }\r
93 \r
94         [TestMethod]\r
95         public void Number()\r
96         {\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
101         }\r
102 \r
103         [TestMethod]\r
104         public void String()\r
105         {\r
106             Assert.AreEqual("api_result", (string)(dynamic)JsonParser.Parse(@"""api_result"""));\r
107             Assert.AreEqual("/\"\\\b\f\n\r\t", (string)(dynamic)JsonParser.Parse(@"""\/\""\\\b\f\n\r\t"""));\r
108             Assert.AreEqual("大和改二", (string)(dynamic)JsonParser.Parse(@"""\u5927\u548c\u6539\u4e8c"""));\r
109             Assert.AreEqual(@"\", (string)(dynamic)JsonParser.Parse(@"""\\"""));\r
110         }\r
111 \r
112         [TestMethod]\r
113         public void ObjectEmpty()\r
114         {\r
115             var obj = (dynamic)JsonParser.Parse("{}");\r
116             Assert.IsTrue(obj.IsObject);\r
117         }\r
118 \r
119         [TestMethod]\r
120         public void CheckProperty()\r
121         {\r
122             Assert.IsFalse(((dynamic)JsonParser.Parse("{}")).api_result());\r
123         }\r
124 \r
125         [TestMethod]\r
126         public void CheckPropertyOfBool()\r
127         {\r
128             Assert.IsFalse(((dynamic)JsonParser.Parse("true")).api_result());\r
129         }\r
130 \r
131         [TestMethod]\r
132         [ExpectedException(typeof(RuntimeBinderException))]\r
133         public void GetIndexOfBool()\r
134         {\r
135             Assert.IsFalse(((dynamic)JsonParser.Parse("true"))[0]);\r
136         }\r
137 \r
138         [TestMethod]\r
139         [ExpectedException(typeof(RuntimeBinderException))]\r
140         public void PropertyNotExists()\r
141         {\r
142             Assert.IsTrue(((dynamic)JsonParser.Parse("{}")).api_result);\r
143         }\r
144 \r
145         [TestMethod]\r
146         public void ObjectWithNull()\r
147         {\r
148             var obj = (dynamic)JsonParser.Parse("{\"api_result\":null}");\r
149             Assert.AreEqual(null, obj.api_result);\r
150             Assert.AreEqual(null, obj["api_result"]);\r
151         }\r
152 \r
153         [TestMethod]\r
154         public void QueryAttribute()\r
155         {\r
156             var obj = (dynamic)JsonParser.Parse("{\"api_result\":null}");\r
157             Assert.IsTrue(obj.api_result());\r
158             Assert.IsTrue(obj.IsDefined("api_result"));\r
159         }\r
160 \r
161         [TestMethod]\r
162         public void ObjectWithNumber()\r
163         {\r
164             var obj = (dynamic)JsonParser.Parse("{\"api_result\":1}");\r
165             Assert.AreEqual(1d, obj.api_result);\r
166             Assert.AreEqual(1d, obj["api_result"]);\r
167         }\r
168 \r
169         [TestMethod]\r
170         public void ObjectWithString()\r
171         {\r
172             var obj = (dynamic)JsonParser.Parse("{\"api_result\":1,\"api_result_msg\":\"\u6210\u529f\"}");\r
173             Assert.AreEqual("成功", obj.api_result_msg);\r
174             Assert.AreEqual("成功", obj["api_result_msg"]);\r
175         }\r
176 \r
177         [TestMethod]\r
178         public void ArrayEmpty()\r
179         {\r
180             var obj = (dynamic)JsonParser.Parse("[]");\r
181             Assert.IsTrue(obj.IsArray);\r
182         }\r
183 \r
184         [TestMethod]\r
185         public void ArrayWithPrimitives()\r
186         {\r
187             var bary = (dynamic)JsonParser.Parse("[true,false,true]");\r
188             Assert.IsTrue(bary[0]);\r
189             var dary = (dynamic)JsonParser.Parse("[1,2,3]");\r
190             Assert.AreEqual(dary[0], 1d);\r
191             var sary = (dynamic)JsonParser.Parse("[\"1\", \"2\", \"3\"]");\r
192             Assert.AreEqual(sary[0], "1");\r
193         }\r
194 \r
195         [TestMethod]\r
196         public void WithWhiteSpace()\r
197         {\r
198             var obj = (dynamic)JsonParser.Parse("{\"api_result\":1, \"api_result_msg\" :\"\u6210\u529f\"}");\r
199             Assert.AreEqual("成功", obj.api_result_msg);\r
200             var ary = (double[])(dynamic)JsonParser.Parse("[1, 2, 3]");\r
201             Assert.IsTrue(ary.SequenceEqual(new[] {1d, 2d, 3d}));\r
202         }\r
203 \r
204         [TestMethod]\r
205         public void EnumerateArray()\r
206         {\r
207             var ary = (dynamic)JsonParser.Parse("[{\"a\":1},{\"a\":2}]");\r
208             var list = new List<double>();\r
209             foreach (var entry in ary)\r
210                 list.Add(entry.a);\r
211             Assert.IsTrue(list.SequenceEqual(new[] {1d, 2d}));\r
212         }\r
213 \r
214         [TestMethod]\r
215         public void ObjectWithArray()\r
216         {\r
217             var obj = (dynamic)JsonParser.Parse("{\"ary\":[]}");\r
218             Assert.IsTrue(obj.ary.IsArray);\r
219         }\r
220 \r
221         [TestMethod]\r
222         public void EnumerateProperty()\r
223         {\r
224             var obj = (dynamic)JsonParser.Parse("{\"a\":{\"a\":1},\"b\":{\"a\":2}}");\r
225             var list = new List<double>();\r
226             foreach (KeyValuePair<string, dynamic> entry in obj)\r
227                 list.Add(entry.Value.a);\r
228             Assert.IsTrue(list.SequenceEqual(new[] {1d, 2d}));\r
229         }\r
230 \r
231         [TestMethod]\r
232         public void CastArrayToPrimitivetArray()\r
233         {\r
234             var bary = (bool[])(dynamic)JsonParser.Parse("[true,false,true]");\r
235             Assert.IsTrue(bary.SequenceEqual(new[] {true, false, true}));\r
236             var dary = (double[])(dynamic)JsonParser.Parse("[1,2,3]");\r
237             Assert.IsTrue(dary.SequenceEqual(new[] {1d, 2d, 3d}));\r
238             var sary = (string[])(dynamic)JsonParser.Parse("[\"1\", \"2\", \"3\"]");\r
239             Assert.IsTrue(sary.SequenceEqual(new[] {"1", "2", "3"}));\r
240         }\r
241 \r
242         [TestMethod]\r
243         public void CastArrayToIntArray()\r
244         {\r
245             var iary = (int[])(dynamic)JsonParser.Parse("[1,2,3]");\r
246             Assert.IsTrue(iary.SequenceEqual(new[] {1, 2, 3}));\r
247         }\r
248 \r
249         [TestMethod]\r
250         public void CastArrayToObjectArray()\r
251         {\r
252             var ary = (object[])(dynamic)JsonParser.Parse("[1,2,3]");\r
253             Assert.IsTrue(ary.Cast<double>().SequenceEqual(new[] {1d, 2d, 3d}));\r
254         }\r
255 \r
256         [TestMethod]\r
257         public void CastArrayOfArrayToArrayOfIntArray()\r
258         {\r
259             var iary = (double[][])(dynamic)JsonParser.Parse("[[1,2],[3,4],[5,6]]");\r
260             Assert.IsTrue(iary.GetType().GetElementType().IsArray);\r
261         }\r
262 \r
263         [TestMethod]\r
264         [ExpectedException(typeof(RuntimeBinderException))]\r
265         public void CastArrayToArrayOfIntArray()\r
266         {\r
267             Assert.IsTrue(((double[][])(dynamic)JsonParser.Parse("[1,2,3]")).GetType().IsArray);\r
268         }\r
269 \r
270         // ReSharper disable UnusedVariable\r
271         [TestMethod]\r
272         [ExpectedException(typeof(RuntimeBinderException))]\r
273         public void CastArrayToArrayOfFloat()\r
274         {\r
275             var dummy = (float[])(dynamic)JsonParser.Parse("[1,2,3]");\r
276         }\r
277 \r
278         [TestMethod]\r
279         [ExpectedException(typeof(RuntimeBinderException))]\r
280         public void CastObjectToArray()\r
281         {\r
282             var dummy = (double[])(dynamic)JsonParser.Parse("{}");\r
283         }\r
284 \r
285         [TestMethod]\r
286         [ExpectedException(typeof(RuntimeBinderException))]\r
287         public void CastArrayToDouble()\r
288         {\r
289             var dummy = (double)(dynamic)JsonParser.Parse("[1,2,3]");\r
290         }\r
291 \r
292         [TestMethod]\r
293         [ExpectedException(typeof(RuntimeBinderException))]\r
294         public void CastBoolToEnumerable()\r
295         {\r
296             var dummy = (dynamic)JsonParser.Parse("false");\r
297             foreach (var entry in dummy)\r
298             {\r
299             }\r
300         }\r
301 \r
302         // ReSharper restore UnusedVariable\r
303     }\r
304 }