OSDN Git Service

Model、View、Net、Utilの名前空間にクラスを分類する
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer.Test / LoggerTest.cs
1 // Copyright (C) 2014, 2015 Kazuhiro Fujieda <fujieda@users.osdn.me>\r
2 // \r
3 // Licensed under the Apache License, Version 2.0 (the "License");\r
4 // you may not use this file except in compliance with the License.\r
5 // You may obtain a copy of the License at\r
6 //\r
7 //    http://www.apache.org/licenses/LICENSE-2.0\r
8 //\r
9 // Unless required by applicable law or agreed to in writing, software\r
10 // distributed under the License is distributed on an "AS IS" BASIS,\r
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
12 // See the License for the specific language governing permissions and\r
13 // limitations under the License.\r
14 \r
15 using System;\r
16 using System.Collections.Generic;\r
17 using System.IO;\r
18 using ExpressionToCodeLib;\r
19 using KancolleSniffer.Util;\r
20 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
21 using Moq;\r
22 \r
23 namespace KancolleSniffer.Test\r
24 {\r
25     using Sniffer = SnifferTest.TestingSniffer;\r
26 \r
27     [TestClass]\r
28     public class LoggerTest\r
29     {\r
30         [TestInitialize]\r
31         public void Intialize()\r
32         {\r
33             ExpressionToCodeConfiguration.GlobalAssertionConfiguration = ExpressionToCodeConfiguration\r
34                 .GlobalAssertionConfiguration.WithPrintedListLengthLimit(200).WithMaximumValueLength(1000);\r
35         }\r
36 \r
37         [TestMethod]\r
38         public void InspectMissionResult()\r
39         {\r
40             var sniffer = new Sniffer();\r
41             var result = "";\r
42             var header = "";\r
43             sniffer.SetLogWriter((path, s, h) =>\r
44             {\r
45                 result += s + "|";\r
46                 header = h;\r
47             }, () => new DateTime(2015, 1, 1));\r
48             sniffer.SkipMaster();\r
49             sniffer.EnableLog(LogType.Mission);\r
50             SnifferTest.SniffLogFile(sniffer, "mission_result_001");\r
51             PAssert.That(() => "日付,結果,遠征,燃料,弾薬,鋼材,ボーキ,開発資材,高速修復材,高速建造材" == header);\r
52             PAssert.That(() => "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0|" +\r
53                                "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0|" +\r
54                                "2015-01-01 00:00:00,大成功,MO作戦,0,0,360,420,1,0,0|" +\r
55                                "2015-01-01 00:00:00,失敗,東京急行(弐),0,0,0,0,0,0,0|"\r
56                                == result);\r
57         }\r
58 \r
59         /// <summary>\r
60         /// 出力先に書けないときは一時ファイルに書き込む\r
61         /// </summary>\r
62         [TestMethod]\r
63         public void WriteTmpFileWhenCantWriteTarget()\r
64         {\r
65             var mock = new Mock<LogWriter.IFile>();\r
66             var writer = new LogWriter(null, mock.Object);\r
67 \r
68             const string str = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0";\r
69             var tmp = "";\r
70             mock.Setup(l => l.AppendAllText(It.IsAny<string>(), It.IsAny<string>()))\r
71                 .Callback<string, string>((file, s) =>\r
72                 {\r
73                     if (file.EndsWith(".csv"))\r
74                         throw new IOException();\r
75                     if (file.EndsWith(".tmp"))\r
76                         tmp += s;\r
77                 });\r
78             mock.SetupSequence(l => l.Exists(It.IsAny<string>())).Returns(false).Returns(true);\r
79             writer.Write("遠征報告書", str, "");\r
80             PAssert.That(() => "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n" == tmp);\r
81         }\r
82 \r
83         [TestMethod]\r
84         public void MergeTmpFile()\r
85         {\r
86             MergeTmpFileMain(false);\r
87         }\r
88 \r
89         [TestMethod]\r
90         public void FaileToMergeTmpFile()\r
91         {\r
92             MergeTmpFileMain(true);\r
93         }\r
94 \r
95         private void MergeTmpFileMain(bool failToMerge)\r
96         {\r
97             var mock = new Mock<LogWriter.IFile>();\r
98             var writer = new LogWriter(null, mock.Object);\r
99 \r
100             var tmp = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n";\r
101             var csv = "";\r
102             mock.Setup(l => l.Exists(It.IsAny<string>())).Returns(true);\r
103             mock.Setup(l => l.ReadAllText(It.IsAny<string>()))\r
104                 .Returns((string path) => path.EndsWith(".tmp") ? tmp : "");\r
105             mock.Setup(l => l.AppendAllText(It.IsAny<string>(), It.IsAny<string>()))\r
106                 .Callback<string, string>((file, s) =>\r
107                 {\r
108                     if (file.EndsWith(".tmp"))\r
109                         tmp += s;\r
110                     if (file.EndsWith(".csv"))\r
111                     {\r
112                         if (failToMerge)\r
113                             throw new IOException();\r
114                         csv += s;\r
115                     }\r
116                 });\r
117             const string str = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0";\r
118             writer.Write("遠征報告書", str, "");\r
119             var result = failToMerge ? tmp : csv;\r
120             PAssert.That(() =>\r
121                 "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n" +\r
122                 "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0\r\n" == result);\r
123         }\r
124 \r
125         [TestMethod]\r
126         public void InspectBattleResult()\r
127         {\r
128             var sniffer = new Sniffer();\r
129             var result = "";\r
130             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2017, 1, 1));\r
131             sniffer.EnableLog(LogType.Battle);\r
132             SnifferTest.SniffLogFile(sniffer, "battle_001");\r
133             PAssert.That(() =>\r
134                 "2017-01-01 00:00:00,カレー洋制圧戦,1,出撃,A,T字戦(有利),警戒陣,梯形陣,敵潜水教導艦隊,,," +\r
135                 "隼鷹改二(Lv157),57/62,利根改二(Lv151),66/66,千代田航改二(Lv159),50/65,千歳航改二(Lv159),65/65,大井改二(Lv57),40/43,秋月改(Lv142),42/42," +\r
136                 "潜水ヨ級(elite),34/34,潜水ヨ級,5/24,潜水ヨ級,0/24,潜水カ級(elite),0/27,潜水カ級,0/19,潜水カ級,0/19,248~249,0,制空権確保|"\r
137                 == result);\r
138         }\r
139 \r
140         /// <summary>\r
141         /// 7隻編成の場合は7隻目を6隻目に重ねる\r
142         /// </summary>\r
143         [TestMethod]\r
144         public void InspectShip7BattleResult()\r
145         {\r
146             var sniffer = new Sniffer();\r
147             var result = "";\r
148             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2017, 1, 1));\r
149             sniffer.EnableLog(LogType.Battle);\r
150             SnifferTest.SniffLogFile(sniffer, "ship7battle_001");\r
151             PAssert.That(() =>\r
152                 "2017-01-01 00:00:00,台湾沖/ルソン島沖,5,出撃,S,同航戦,単縦陣,単縦陣,深海通商破部隊 前衛水雷戦隊,,," +\r
153                 "あきつ丸改(Lv81),40/40,那智改二(Lv151),63/63,Roma改(Lv99),83/92,阿武隈改二(Lv98),40/45,霞改二(Lv96),13/31,潮改二(Lv94)・不知火改(Lv85),31/33・32/32," +\r
154                 "軽巡ホ級(flagship),0/53,駆逐ロ級後期型,0/37,駆逐ロ級後期型,0/37,駆逐ロ級後期型,0/37,駆逐イ級,0/20,駆逐イ級,0/20,317~318,0,制空権確保|"\r
155                 == result);\r
156         }\r
157 \r
158         [TestMethod]\r
159         public void InspectMaterial()\r
160         {\r
161             var sniffer = new Sniffer();\r
162             var result = "";\r
163             var first = new DateTime(2015, 1, 1, 0, 0, 0);\r
164             var queue =\r
165                 new Queue<DateTime>(new[] {first, first.AddMinutes(10), first.AddMinutes(15), first.AddMinutes(20)});\r
166             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, queue.Dequeue);\r
167             sniffer.EnableLog(LogType.Material);\r
168             SnifferTest.SniffLogFile(sniffer, "material_001");\r
169             PAssert.That(() => "2015-01-01 00:00:00,26178,26742,21196,33750,1426,1574,2185,10|" +\r
170                                "2015-01-01 00:10:00,24595,25353,18900,32025,1427,1576,2187,10|" +\r
171                                "2015-01-01 00:20:00,23463,25064,17314,31765,1427,1572,2187,10|"\r
172                                == result);\r
173         }\r
174 \r
175         [TestMethod]\r
176         public void InspectCreateItem()\r
177         {\r
178             var sniffer = new Sniffer();\r
179             var result = "";\r
180             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
181             sniffer.EnableLog(LogType.CreateItem);\r
182             SnifferTest.SniffLogFile(sniffer, "createitem_001");\r
183             PAssert.That(() => "2015-01-01 00:00:00,12cm単装砲,小口径主砲,10,10,30,10,綾波改二(145),120|" +\r
184                                "2015-01-01 00:00:00,失敗,,10,10,30,10,綾波改二(145),120|"\r
185                                == result);\r
186         }\r
187 \r
188         [TestMethod]\r
189         public void InspectGetShip()\r
190         {\r
191             var sniffer = new Sniffer();\r
192             var result = "";\r
193             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
194             sniffer.EnableLog(LogType.CreateShip);\r
195             SnifferTest.SniffLogFile(sniffer, "createship_001");\r
196             PAssert.That(() => "2015-01-01 00:00:00,通常艦建造,雷,駆逐艦,30,30,30,30,1,1,綾波改二(145),120|" +\r
197                                "2015-01-01 00:00:00,大型艦建造,霧島,巡洋戦艦,1500,1500,2000,1000,1,0,綾波改二(145),120|"\r
198                                == result);\r
199         }\r
200 \r
201         [TestMethod]\r
202         public void InspectRemodelSlot()\r
203         {\r
204             var sniffer = new Sniffer();\r
205             var result = "";\r
206             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
207             sniffer.EnableLog(LogType.RemodelSlot);\r
208             SnifferTest.SniffLogFile(sniffer, "remodel_slot_001");\r
209             PAssert.That(() => "2015-01-01 00:00:00,12.7cm連装砲,4,○,,,,10,30,60,0,1,1,明石改(50),島風改(131)|" +\r
210                                "2015-01-01 00:00:00,12.7cm連装砲,5,×,,,,10,30,60,0,1,1,明石改(50),|" +\r
211                                "2015-01-01 00:00:00,12.7cm連装砲,7,○,,12.7cm連装砲,1,10,30,60,0,1,1,明石改(50),島風改(131)|" +\r
212                                "2015-01-01 00:00:00,91式高射装置,10,○,○,10cm連装高角砲,2,0,0,60,40,9,7,明石改(50),摩耶改(98)|"\r
213                                == result);\r
214         }\r
215 \r
216         [TestMethod]\r
217         public void Achievement()\r
218         {\r
219             var logger = new Logger(null, null, null);\r
220             logger.EnableLog(LogType.Achivement);\r
221             var result = "";\r
222             var dateEnum = new[]\r
223             {\r
224                 new DateTime(2017, 3, 31, 21, 0, 0),\r
225                 new DateTime(2017, 3, 31, 22, 0, 0),\r
226                 new DateTime(2017, 4, 1, 1, 0, 0),\r
227                 new DateTime(2017, 4, 1, 2, 0, 0),\r
228                 new DateTime(2017, 4, 1, 3, 0, 0),\r
229                 new DateTime(2017, 4, 2, 2, 0, 0),\r
230                 new DateTime(2017, 4, 2, 3, 0, 0),\r
231                 new DateTime(2017, 4, 2, 4, 0, 0)\r
232             }.GetEnumerator();\r
233             logger.SetWriter((path, s, h) => { result += s + "|"; }, () =>\r
234             {\r
235                 dateEnum.MoveNext();\r
236                 // ReSharper disable once PossibleNullReferenceException\r
237                 return (DateTime)dateEnum.Current;\r
238             });\r
239             for (var i = 0; i < 6; i++)\r
240                 logger.InspectBasic(JsonParser.Parse($"{{\"api_experience\": {i * 1000}}}"));\r
241             logger.InspectBattleResult(JsonParser.Parse("{\"api_get_exmap_rate\": \"100\"}"));\r
242             logger.InspectMapNext(JsonParser.Parse("{\"api_get_eo_rate\": 75}"));\r
243             PAssert.That(() =>\r
244                 "2017-03-31 21:00:00,0,0|2017-03-31 21:00:00,0,0|2017-03-31 22:00:00,1000,0|" +\r
245                 "2017-04-01 03:00:00,4000,0|2017-04-02 02:00:00,5000,0|" +\r
246                 "2017-04-02 03:00:00,5000,100|2017-04-02 04:00:00,5000,75|"\r
247                 == result);\r
248         }\r
249 \r
250         [TestMethod]\r
251         public void InspectClearItemGet()\r
252         {\r
253             var sniffer = new Sniffer();\r
254             var result = "";\r
255             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2017, 5, 1));\r
256             sniffer.EnableLog(LogType.Achivement);\r
257             SnifferTest.SniffLogFile(sniffer, "clearitemget_001");\r
258             PAssert.That(() =>\r
259                 "2017-05-01 00:00:00,45417045,0|2017-05-01 00:00:00,45417045,350|" == result);\r
260         }\r
261 \r
262         /// <summary>\r
263         /// 晴嵐(六三一空)任務の場合はapi_bounus_countがない\r
264         /// </summary>\r
265         [TestMethod]\r
266         public void InspectClearItemGetSeiran631Ku()\r
267         {\r
268             var sniffer = new Sniffer(true);\r
269             sniffer.SetLogWriter((path, s, h) => { }, () => new DateTime(2017, 5, 1));\r
270             sniffer.EnableLog(LogType.Achivement);\r
271             sniffer.Sniff("/kcsapi/api_req_quest/clearitemget",\r
272                 "api%5Fquest%5Fid=656&api%5Fverno=1",\r
273                 JsonParser.Parse(\r
274                     @"{""api_result"":1,""api_result_msg"":""成功"",""api_data"":\r
275                     {""api_material"":[0,0,0,0],""api_bounus"":[\r
276                     {""api_type"":15,""api_count"":1,""api_item"":{""api_id_from"":9999,""api_id_to"":9999,\r
277                     ""api_message"":""第一潜水隊運用航空隊:「晴嵐(六三一空)」の新編成を<br>完了しました!""}}\r
278                     ]}}"));\r
279         }\r
280     }\r
281 }