OSDN Git Service

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