OSDN Git Service

JsonParserで文字列の最後が\だとエラーになるのを直す
[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         [ExpectedException(typeof(RuntimeBinderException))]\r
127         public void CheckPropertyOfBool()\r
128         {\r
129             Assert.IsFalse(((dynamic)JsonParser.Parse("true")).api_result());\r
130         }\r
131 \r
132         [TestMethod]\r
133         [ExpectedException(typeof(RuntimeBinderException))]\r
134         public void GetIndexOfBool()\r
135         {\r
136             Assert.IsFalse(((dynamic)JsonParser.Parse("true"))[0]);\r
137         }\r
138 \r
139         [TestMethod]\r
140         [ExpectedException(typeof(RuntimeBinderException))]\r
141         public void PropertyNotExists()\r
142         {\r
143             Assert.IsTrue(((dynamic)JsonParser.Parse("{}")).api_result);\r
144         }\r
145 \r
146         [TestMethod]\r
147         public void ObjectWithNull()\r
148         {\r
149             var obj = (dynamic)JsonParser.Parse("{\"api_result\":null}");\r
150             Assert.AreEqual(null, obj.api_result);\r
151             Assert.AreEqual(null, obj["api_result"]);\r
152         }\r
153 \r
154         [TestMethod]\r
155         public void QueryAttribute()\r
156         {\r
157             var obj = (dynamic)JsonParser.Parse("{\"api_result\":null}");\r
158             Assert.IsTrue(obj.api_result());\r
159             Assert.IsTrue(obj.IsDefined("api_result"));\r
160         }\r
161 \r
162         [TestMethod]\r
163         public void ObjectWithNumber()\r
164         {\r
165             var obj = (dynamic)JsonParser.Parse("{\"api_result\":1}");\r
166             Assert.AreEqual(1d, obj.api_result);\r
167             Assert.AreEqual(1d, obj["api_result"]);\r
168         }\r
169 \r
170         [TestMethod]\r
171         public void ObjectWithString()\r
172         {\r
173             var obj = (dynamic)JsonParser.Parse("{\"api_result\":1,\"api_result_msg\":\"\u6210\u529f\"}");\r
174             Assert.AreEqual("成功", obj.api_result_msg);\r
175             Assert.AreEqual("成功", obj["api_result_msg"]);\r
176         }\r
177 \r
178         [TestMethod]\r
179         public void ArrayEmpty()\r
180         {\r
181             var obj = (dynamic)JsonParser.Parse("[]");\r
182             Assert.IsTrue(obj.IsArray);\r
183         }\r
184 \r
185         [TestMethod]\r
186         public void ArrayWithPrimitives()\r
187         {\r
188             var bary = (dynamic)JsonParser.Parse("[true,false,true]");\r
189             Assert.IsTrue(bary[0]);\r
190             var dary = (dynamic)JsonParser.Parse("[1,2,3]");\r
191             Assert.AreEqual(dary[0], 1d);\r
192             var sary = (dynamic)JsonParser.Parse("[\"1\", \"2\", \"3\"]");\r
193             Assert.AreEqual(sary[0], "1");\r
194         }\r
195 \r
196         [TestMethod]\r
197         public void WithWhiteSpace()\r
198         {\r
199             var obj = (dynamic)JsonParser.Parse("{\"api_result\":1, \"api_result_msg\" :\"\u6210\u529f\"}");\r
200             Assert.AreEqual("成功", obj.api_result_msg);\r
201             var ary = (double[])(dynamic)JsonParser.Parse("[1, 2, 3]");\r
202             Assert.IsTrue(ary.SequenceEqual(new[] {1d, 2d, 3d}));\r
203         }\r
204 \r
205         [TestMethod]\r
206         public void EnumerateArray()\r
207         {\r
208             var ary = (dynamic)JsonParser.Parse("[{\"a\":1},{\"a\":2}]");\r
209             var list = new List<double>();\r
210             foreach (var entry in ary)\r
211                 list.Add(entry.a);\r
212             Assert.IsTrue(list.SequenceEqual(new[] {1d, 2d}));\r
213         }\r
214 \r
215         [TestMethod]\r
216         public void ObjectWithArray()\r
217         {\r
218             var obj = (dynamic)JsonParser.Parse("{\"ary\":[]}");\r
219             Assert.IsTrue(obj.ary.IsArray);\r
220         }\r
221 \r
222         [TestMethod]\r
223         public void EnumerateProperty()\r
224         {\r
225             var obj = (dynamic)JsonParser.Parse("{\"a\":{\"a\":1},\"b\":{\"a\":2}}");\r
226             var list = new List<double>();\r
227             foreach (KeyValuePair<string, dynamic> entry in obj)\r
228                 list.Add(entry.Value.a);\r
229             Assert.IsTrue(list.SequenceEqual(new[] {1d, 2d}));\r
230         }\r
231 \r
232         [TestMethod]\r
233         public void CastArrayToPrimitivetArray()\r
234         {\r
235             var bary = (bool[])(dynamic)JsonParser.Parse("[true,false,true]");\r
236             Assert.IsTrue(bary.SequenceEqual(new[] {true, false, true}));\r
237             var dary = (double[])(dynamic)JsonParser.Parse("[1,2,3]");\r
238             Assert.IsTrue(dary.SequenceEqual(new[] {1d, 2d, 3d}));\r
239             var sary = (string[])(dynamic)JsonParser.Parse("[\"1\", \"2\", \"3\"]");\r
240             Assert.IsTrue(sary.SequenceEqual(new[] {"1", "2", "3"}));\r
241         }\r
242 \r
243         [TestMethod]\r
244         public void CastArrayToIntArray()\r
245         {\r
246             var iary = (int[])(dynamic)JsonParser.Parse("[1,2,3]");\r
247             Assert.IsTrue(iary.SequenceEqual(new[] {1, 2, 3}));\r
248         }\r
249 \r
250         [TestMethod]\r
251         public void CastArrayToObjectArray()\r
252         {\r
253             var ary = (object[])(dynamic)JsonParser.Parse("[1,2,3]");\r
254             Assert.IsTrue(ary.Cast<double>().SequenceEqual(new[] {1d, 2d, 3d}));\r
255         }\r
256 \r
257         [TestMethod]\r
258         public void CastArrayOfArrayToArrayOfIntArray()\r
259         {\r
260             var iary = (double[][])(dynamic)JsonParser.Parse("[[1,2],[3,4],[5,6]]");\r
261             Assert.IsTrue(iary.GetType().GetElementType().IsArray);\r
262         }\r
263 \r
264         [TestMethod]\r
265         [ExpectedException(typeof(RuntimeBinderException))]\r
266         public void CastArrayToArrayOfIntArray()\r
267         {\r
268             Assert.IsTrue(((double[][])(dynamic)JsonParser.Parse("[1,2,3]")).GetType().IsArray);\r
269         }\r
270 \r
271         // ReSharper disable UnusedVariable\r
272         [TestMethod]\r
273         [ExpectedException(typeof(RuntimeBinderException))]\r
274         public void CastArrayToArrayOfFloat()\r
275         {\r
276             var dummy = (float[])(dynamic)JsonParser.Parse("[1,2,3]");\r
277         }\r
278 \r
279         [TestMethod]\r
280         [ExpectedException(typeof(RuntimeBinderException))]\r
281         public void CastObjectToArray()\r
282         {\r
283             var dummy = (double[])(dynamic)JsonParser.Parse("{}");\r
284         }\r
285 \r
286         [TestMethod]\r
287         [ExpectedException(typeof(RuntimeBinderException))]\r
288         public void CastArrayToDouble()\r
289         {\r
290             var dummy = (double)(dynamic)JsonParser.Parse("[1,2,3]");\r
291         }\r
292 \r
293         [TestMethod]\r
294         [ExpectedException(typeof(RuntimeBinderException))]\r
295         public void CastBoolToEnumerable()\r
296         {\r
297             var dummy = (dynamic)JsonParser.Parse("false");\r
298             foreach (var entry in dummy)\r
299             {\r
300             }\r
301         }\r
302 \r
303         // ReSharper restore UnusedVariable\r
304     }\r
305 }