OSDN Git Service

ReSharperの指摘に従って直す
[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             // 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
112         }\r
113 \r
114         [TestMethod]\r
115         public void ObjectEmpty()\r
116         {\r
117             var obj = (dynamic)JsonParser.Parse("{}");\r
118             Assert.IsTrue(obj.IsObject);\r
119         }\r
120 \r
121         [TestMethod]\r
122         public void CheckProperty()\r
123         {\r
124             Assert.IsFalse(((dynamic)JsonParser.Parse("{}")).api_result());\r
125         }\r
126 \r
127         [TestMethod]\r
128         public void CheckPropertyOfBool()\r
129         {\r
130             Assert.IsFalse(((dynamic)JsonParser.Parse("true")).api_result());\r
131         }\r
132 \r
133         [TestMethod]\r
134         [ExpectedException(typeof(RuntimeBinderException))]\r
135         public void GetIndexOfBool()\r
136         {\r
137             Assert.IsFalse(((dynamic)JsonParser.Parse("true"))[0]);\r
138         }\r
139 \r
140         [TestMethod]\r
141         [ExpectedException(typeof(RuntimeBinderException))]\r
142         public void PropertyNotExists()\r
143         {\r
144             Assert.IsTrue(((dynamic)JsonParser.Parse("{}")).api_result);\r
145         }\r
146 \r
147         [TestMethod]\r
148         public void ObjectWithNull()\r
149         {\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
153         }\r
154 \r
155         [TestMethod]\r
156         public void QueryAttribute()\r
157         {\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
161         }\r
162 \r
163         [TestMethod]\r
164         public void ObjectWithNumber()\r
165         {\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
169         }\r
170 \r
171         [TestMethod]\r
172         public void ObjectWithString()\r
173         {\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
177         }\r
178 \r
179         [TestMethod]\r
180         public void ArrayEmpty()\r
181         {\r
182             var obj = (dynamic)JsonParser.Parse("[]");\r
183             Assert.IsTrue(obj.IsArray);\r
184         }\r
185 \r
186         [TestMethod]\r
187         public void ArrayWithPrimitives()\r
188         {\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
195         }\r
196 \r
197         [TestMethod]\r
198         public void WithWhiteSpace()\r
199         {\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
204         }\r
205 \r
206         [TestMethod]\r
207         public void EnumerateArray()\r
208         {\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
212                 list.Add(entry.a);\r
213             Assert.IsTrue(list.SequenceEqual(new[] {1d, 2d}));\r
214         }\r
215 \r
216         [TestMethod]\r
217         public void ObjectWithArray()\r
218         {\r
219             var obj = (dynamic)JsonParser.Parse("{\"ary\":[]}");\r
220             Assert.IsTrue(obj.ary.IsArray);\r
221         }\r
222 \r
223         [TestMethod]\r
224         public void EnumerateProperty()\r
225         {\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
231         }\r
232 \r
233         [TestMethod]\r
234         public void CastArrayToPrimitivetArray()\r
235         {\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
242         }\r
243 \r
244         [TestMethod]\r
245         public void CastArrayToIntArray()\r
246         {\r
247             var iary = (int[])(dynamic)JsonParser.Parse("[1,2,3]");\r
248             Assert.IsTrue(iary.SequenceEqual(new[] {1, 2, 3}));\r
249         }\r
250 \r
251         [TestMethod]\r
252         public void CastArrayToObjectArray()\r
253         {\r
254             var ary = (object[])(dynamic)JsonParser.Parse("[1,2,3]");\r
255             Assert.IsTrue(ary.Cast<double>().SequenceEqual(new[] {1d, 2d, 3d}));\r
256         }\r
257 \r
258         [TestMethod]\r
259         public void CastArrayOfArrayToArrayOfIntArray()\r
260         {\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
264         }\r
265 \r
266         [TestMethod]\r
267         [ExpectedException(typeof(RuntimeBinderException))]\r
268         public void CastArrayToArrayOfIntArray()\r
269         {\r
270             Assert.IsTrue(((double[][])(dynamic)JsonParser.Parse("[1,2,3]")).GetType().IsArray);\r
271         }\r
272 \r
273         // ReSharper disable UnusedVariable\r
274         [TestMethod]\r
275         [ExpectedException(typeof(RuntimeBinderException))]\r
276         public void CastArrayToArrayOfFloat()\r
277         {\r
278             var dummy = (float[])(dynamic)JsonParser.Parse("[1,2,3]");\r
279         }\r
280 \r
281         [TestMethod]\r
282         [ExpectedException(typeof(RuntimeBinderException))]\r
283         public void CastObjectToArray()\r
284         {\r
285             var dummy = (double[])(dynamic)JsonParser.Parse("{}");\r
286         }\r
287 \r
288         [TestMethod]\r
289         [ExpectedException(typeof(RuntimeBinderException))]\r
290         public void CastArrayToDouble()\r
291         {\r
292             var dummy = (double)(dynamic)JsonParser.Parse("[1,2,3]");\r
293         }\r
294 \r
295         [TestMethod]\r
296         [ExpectedException(typeof(RuntimeBinderException))]\r
297         public void CastBoolToEnumerable()\r
298         {\r
299             var dummy = (dynamic)JsonParser.Parse("false");\r
300             foreach (var entry in dummy)\r
301             {\r
302             }\r
303         }\r
304 \r
305         // ReSharper restore UnusedVariable\r
306     }\r
307 }