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 Microsoft.VisualStudio.TestTools.UnitTesting;\r
20 using Moq;\r
21 \r
22 namespace KancolleSniffer.Test\r
23 {\r
24     [TestClass]\r
25     public class LoggerTest\r
26     {\r
27         [TestMethod]\r
28         public void InspectMissionResult()\r
29         {\r
30             var sniffer = new Sniffer();\r
31             var result = "";\r
32             var header = "";\r
33             sniffer.SetLogWriter((path, s, h) =>\r
34             {\r
35                 result += s + "|";\r
36                 header = h;\r
37             }, () => new DateTime(2015, 1, 1));\r
38             sniffer.SkipMaster();\r
39             sniffer.EnableLog(LogType.Mission);\r
40             SnifferTest.SniffLogFile(sniffer, "mission_result_001");\r
41             PAssert.That(() => "日付,結果,遠征,燃料,弾薬,鋼材,ボーキ,開発資材,高速修復材,高速建造材" == header);\r
42             PAssert.That(() => "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0|" +\r
43                                "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0|" +\r
44                                "2015-01-01 00:00:00,大成功,MO作戦,0,0,360,420,1,0,0|" +\r
45                                "2015-01-01 00:00:00,失敗,東京急行(弐),0,0,0,0,0,0,0|"\r
46                                == result);\r
47         }\r
48 \r
49         /// <summary>\r
50         /// 出力先に書けないときは一時ファイルに書き込む\r
51         /// </summary>\r
52         [TestMethod]\r
53         public void WriteTmpFileWhenCantWriteTarget()\r
54         {\r
55             var mock = new Mock<LogWriter.IFile>();\r
56             var writer = new LogWriter(null, mock.Object);\r
57 \r
58             const string str = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0";\r
59             var tmp = "";\r
60             mock.Setup(l => l.AppendAllText(It.IsAny<string>(), It.IsAny<string>()))\r
61                 .Callback<string, string>((file, s) =>\r
62                 {\r
63                     if (file.EndsWith(".csv"))\r
64                         throw new IOException();\r
65                     if (file.EndsWith(".tmp"))\r
66                         tmp += s;\r
67                 });\r
68             mock.SetupSequence(l => l.Exists(It.IsAny<string>())).Returns(false).Returns(true);\r
69             writer.Write("遠征報告書", str, "");\r
70             PAssert.That(() => "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n" == tmp);\r
71         }\r
72 \r
73         [TestMethod]\r
74         public void MergeTmpFile()\r
75         {\r
76             MergeTmpFileMain(false);\r
77         }\r
78 \r
79         [TestMethod]\r
80         public void FaileToMergeTmpFile()\r
81         {\r
82             MergeTmpFileMain(true);\r
83         }\r
84 \r
85         private void MergeTmpFileMain(bool failToMerge)\r
86         {\r
87             var mock = new Mock<LogWriter.IFile>();\r
88             var writer = new LogWriter(null, mock.Object);\r
89 \r
90             var tmp = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n";\r
91             var csv = "";\r
92             mock.Setup(l => l.Exists(It.IsAny<string>())).Returns(true);\r
93             mock.Setup(l => l.ReadAllText(It.IsAny<string>()))\r
94                 .Returns((string path) => path.EndsWith(".tmp") ? tmp : "");\r
95             mock.Setup(l => l.AppendAllText(It.IsAny<string>(), It.IsAny<string>()))\r
96                 .Callback<string, string>((file, s) =>\r
97                 {\r
98                     if (file.EndsWith(".tmp"))\r
99                         tmp += s;\r
100                     if (file.EndsWith(".csv"))\r
101                     {\r
102                         if (failToMerge)\r
103                             throw new IOException();\r
104                         csv += s;\r
105                     }\r
106                 });\r
107             const string str = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0";\r
108             writer.Write("遠征報告書", str, "");\r
109             var result = failToMerge ? tmp : csv;\r
110             PAssert.That(() =>\r
111                 "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n" +\r
112                 "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0\r\n" == result);\r
113         }\r
114 \r
115         [TestMethod]\r
116         public void InspectBattleResult()\r
117         {\r
118             var sniffer = new Sniffer();\r
119             var result = "";\r
120             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
121             sniffer.EnableLog(LogType.Battle);\r
122             SnifferTest.SniffLogFile(sniffer, "battle_004");\r
123             PAssert.That(() => "2015-01-01 00:00:00,珊瑚諸島沖,1,出撃,S,同航戦,単縦陣,単縦陣,敵前衛艦隊,重巡洋艦,青葉," +\r
124                                "武蔵改(Lv133),86/106,扶桑改二(Lv87),77/77,北上改二(Lv113),49/49,飛龍改二(Lv133),63/74,蒼龍改二(Lv133),74/74,龍鳳改(Lv97),48/48," +\r
125                                "軽巡ヘ級(flagship),0/57,重巡リ級(flagship),0/76,重巡リ級(flagship),0/76,雷巡チ級(elite),0/50,駆逐ニ級(elite),0/45,駆逐ニ級(elite),0/45," +\r
126                                "306~314,0,制空権確保|" +\r
127                                "2015-01-01 00:00:00,珊瑚諸島沖,2,,B,反航戦,単横陣,単横陣,敵潜水艦隊,,," +\r
128                                "武蔵改(Lv133),86/106,扶桑改二(Lv87),77/77,北上改二(Lv113),46/49,飛龍改二(Lv133),63/74,蒼龍改二(Lv133),74/74,龍鳳改(Lv97),48/48," +\r
129                                "潜水ヨ級(flagship),44/44,潜水カ級(elite),27/27,潜水カ級(elite),5/27,潜水カ級(elite),9/27,潜水カ級,0/19,潜水カ級,0/19," +\r
130                                "302~311,0,制空権確保|" +\r
131                                "2015-01-01 00:00:00,珊瑚諸島沖,4,,S,反航戦,単縦陣,単縦陣,敵水上打撃部隊,戦艦,扶桑," +\r
132                                "武蔵改(Lv133),86/106,扶桑改二(Lv87),77/77,北上改二(Lv113),46/49,飛龍改二(Lv133),63/74,蒼龍改二(Lv133),45/74,龍鳳改(Lv97),48/48," +\r
133                                "戦艦タ級(flagship),0/90,重巡リ級(flagship),0/76,重巡リ級(flagship),0/76,雷巡チ級(elite),0/50,駆逐ロ級(flagship),0/43,駆逐ニ級(elite),0/45," +\r
134                                "301~310,0,制空権確保|" +\r
135                                "2015-01-01 00:00:00,珊瑚諸島沖,10,ボス,S,反航戦,単縦陣,単縦陣,敵機動部隊本隊,戦艦,山城," +\r
136                                "武蔵改(Lv133),86/106,扶桑改二(Lv87),77/77,北上改二(Lv113),46/49,飛龍改二(Lv133),63/74,蒼龍改二(Lv133),39/74,龍鳳改(Lv97),48/48," +\r
137                                "装甲空母姫,0/270,空母ヲ級(elite),0/88,戦艦タ級(flagship),0/90,重巡リ級(elite),0/60,軽巡ホ級(flagship),0/53,駆逐ハ級(flagship),0/47," +\r
138                                "294~304,75,制空権確保|"\r
139                                == result);\r
140         }\r
141 \r
142         [TestMethod]\r
143         public void InspectBattleResultOfSpMidnight()\r
144         {\r
145             var sniffer = new Sniffer();\r
146             var result = "";\r
147             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
148             sniffer.EnableLog(LogType.Battle);\r
149             SnifferTest.SniffLogFile(sniffer, "sp_midnight_001");\r
150             PAssert.That(() => "2015-01-01 00:00:00,サブ島沖海域,3,出撃,D,反航戦,単縦陣,単縦陣,敵前衛警戒艦隊,,," +\r
151                                "Prinz Eugen改(Lv52),1/63,,,,,,,,,,," +\r
152                                "軽巡ヘ級(flagship),57/57,重巡リ級(flagship),76/76,重巡リ級(flagship),76/76,雷巡チ級(elite),50/50,雷巡チ級(elite),50/50,駆逐ロ級(flagship),0/43," +\r
153                                "0,0,|"\r
154                                == result);\r
155         }\r
156 \r
157         [TestMethod]\r
158         public void InspectCombinedBattleResult()\r
159         {\r
160             var sniffer = new Sniffer();\r
161             var result = "";\r
162             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
163             sniffer.EnableLog(LogType.Battle);\r
164             SnifferTest.SniffLogFile(sniffer, "combined_surface_001");\r
165             PAssert.That(() => "2015-01-01 00:00:00,南西方面海域,3,出撃,S,同航戦,第四警戒航行序列,単縦陣,ピケット水雷戦隊 A群,,," +\r
166                                "あきつ丸改(Lv68),40/40,山城改二(Lv85),77/77,扶桑改二(Lv85),77/77,利根改二(Lv117),59/66,筑摩改二(Lv117),51/65,神通改二(Lv97),47/50," +\r
167                                "軽巡ツ級(elite),0/66,軽巡ト級(elite),0/55,駆逐イ級後期型,0/35,駆逐イ級後期型,0/35,駆逐イ級後期型,0/35,駆逐イ級後期型,0/35," +\r
168                                "144~149,0,制空権確保|" +\r
169                                "2015-01-01 00:00:00,南西方面海域,7,,S,同航戦,第四警戒航行序列,複縦陣,任務部隊 D群,駆逐艦,満潮," +\r
170                                "あきつ丸改(Lv68),40/40,山城改二(Lv85),77/77,扶桑改二(Lv85),77/77,利根改二(Lv117),33/66,筑摩改二(Lv117),51/65,神通改二(Lv97),47/50," +\r
171                                "戦艦タ級(flagship),0/90,軽母ヌ級(flagship),0/84,軽巡ト級(elite),0/55,軽巡ト級(elite),0/55,駆逐ロ級後期型,0/37,駆逐ロ級後期型,0/37," +\r
172                                "123~131,23,制空権確保|"\r
173                                == result);\r
174         }\r
175 \r
176         [TestMethod]\r
177         public void InspectBattleResultStartAndBoss()\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.Battle);\r
183             SnifferTest.SniffLogFile(sniffer, "battle_005");\r
184             PAssert.That(() => "2015-01-01 00:00:00,バシー島沖,7,出撃&ボス,S,同航戦,単縦陣,単縦陣,敵通商破壊艦隊,軽空母,龍驤," +\r
185                                "那珂改二(Lv97),48/48,隼鷹改二(Lv129),62/62,北上改二(Lv129),49/49,大井改二(Lv115),40/49,呂500(Lv62),13/13,伊168改(Lv97),15/15," +\r
186                                "重巡リ級(elite),0/60,重巡リ級,0/58,雷巡チ級(elite),0/50,軽巡ヘ級,0/36,駆逐ニ級,0/28,駆逐ニ級,0/28," +\r
187                                "108~111,0,制空権確保|"\r
188                                == result);\r
189         }\r
190 \r
191         [TestMethod]\r
192         public void InspectBattleResultDropItem()\r
193         {\r
194             var sniffer = new Sniffer();\r
195             var result = "";\r
196             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
197             sniffer.EnableLog(LogType.Battle);\r
198             SnifferTest.SniffLogFile(sniffer, "dropitem_001");\r
199             PAssert.That(() =>\r
200                 "2015-01-01 00:00:00,南西諸島防衛線,2,出撃,S,T字戦(有利),単縦陣,単縦陣,敵偵察艦隊,駆逐艦,白雪," +\r
201                 "呂500(Lv56),13/13,伊168改(Lv97),15/15,伊58改(Lv97),18/18,伊8改(Lv97),19/19,伊19改(Lv97),18/18,伊401改(Lv99),24/24," +\r
202                 "重巡リ級,0/58,軽巡ヘ級,0/36,駆逐イ級,0/20,駆逐イ級,0/20,駆逐イ級,0/20,,," +\r
203                 "15,0,制空権確保|" +\r
204                 "2015-01-01 00:00:00,南西諸島防衛線,10,ボス,S,反航戦,単縦陣,輪形陣,敵機動部隊,アイテム,菱餅," +\r
205                 "呂500(Lv56),13/13,伊168改(Lv97),15/15,伊58改(Lv97),18/18,伊8改(Lv97),19/19,伊19改(Lv97),18/18,伊401改(Lv99),24/24," +\r
206                 "空母ヲ級,0/85,空母ヲ級,0/85,重巡リ級,0/58,軽巡ヘ級,0/36,駆逐ハ級,0/24,駆逐ハ級,0/24," +\r
207                 "15,20,航空均衡|"\r
208                 == result);\r
209         }\r
210 \r
211         [TestMethod]\r
212         public void InspectBattleResultDropItemAndShip()\r
213         {\r
214             var sniffer = new Sniffer();\r
215             var result = "";\r
216             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
217             sniffer.EnableLog(LogType.Battle);\r
218             SnifferTest.SniffLogFile(sniffer, "dropitem_002");\r
219             PAssert.That(() =>\r
220                 "2015-01-01 00:00:00,アルフォンシーノ方面,1,出撃,S,同航戦,単縦陣,単縦陣,敵前衛艦隊,,," +\r
221                 "飛龍改(Lv79),65/65,翔鶴改二(Lv112),85/85,隼鷹改二(Lv139),62/62,足柄改二(Lv139),63/63,大井改二(Lv133),49/49,北上改二(Lv133),49/49," +\r
222                 "軽巡ヘ級(flagship),0/57,重巡リ級(elite),0/60,軽巡ト級(elite),0/55,雷巡チ級(elite),0/50,駆逐ロ級(elite),0/35,駆逐ロ級(elite),0/35," +\r
223                 "257~258,0,制空権確保|" +\r
224                 "2015-01-01 00:00:00,アルフォンシーノ方面,3,,S,同航戦,複縦陣,梯形陣,敵護衛空母群,重巡洋艦,筑摩," +\r
225                 "飛龍改(Lv79),65/65,翔鶴改二(Lv112),85/85,隼鷹改二(Lv139),54/62,足柄改二(Lv139),63/63,大井改二(Lv133),46/49,北上改二(Lv133),49/49," +\r
226                 "軽母ヌ級(elite),0/70,軽母ヌ級(elite),0/70,軽母ヌ級(elite),0/70,軽巡ホ級(flagship),0/53,駆逐ニ級(elite),0/45,駆逐ニ級(elite),0/45," +\r
227                 "255~257,72,制空権確保|" +\r
228                 "2015-01-01 00:00:00,アルフォンシーノ方面,11,ボス,S,T字戦(有利),単縦陣,単縦陣,深海棲艦泊地艦隊,駆逐艦+アイテム,舞風+秋刀魚," +\r
229                 "飛龍改(Lv79),65/65,翔鶴改二(Lv112),44/85,隼鷹改二(Lv139),54/62,足柄改二(Lv139),50/63,大井改二(Lv133),46/49,北上改二(Lv133),49/49," +\r
230                 "空母ヲ級(flagship),0/96,空母ヲ級(elite),0/88,戦艦ル級(flagship),0/98,軽巡ヘ級(flagship),0/57,軽巡ト級(elite),0/55,駆逐ニ級(elite),0/45," +\r
231                 "255~256,55,制空権確保|"\r
232                 == result);\r
233         }\r
234 \r
235         [TestMethod]\r
236         public void ReloadBeforeBattleResult()\r
237         {\r
238             var sniffer = new Sniffer();\r
239             var result = "";\r
240             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
241             sniffer.EnableLog(LogType.Battle);\r
242             SnifferTest.SniffLogFile(sniffer, "reload_002");\r
243             PAssert.That(() => "2015-01-01 00:00:00,鎮守府正面海域,1,出撃,S,同航戦,単縦陣,単縦陣,敵偵察艦,駆逐艦,深雪," +\r
244                                "天龍改(Lv79),40/40,大潮(Lv1),16/16,初霜(Lv1),16/16,,,,,,,駆逐イ級,0/20,,,,,,,,,,,0,0,|" +\r
245                                "2015-01-01 00:00:00,鎮守府正面海域,1,出撃,S,同航戦,単縦陣,単縦陣,敵偵察艦,,," +\r
246                                "天龍改(Lv79),40/40,大潮(Lv1),6/16,初霜(Lv1),16/16,,,,,,,駆逐イ級,0/20,,,,,,,,,,,0,0,|"\r
247                                == result);\r
248         }\r
249 \r
250         [TestMethod]\r
251         public void InspectMaterial()\r
252         {\r
253             var sniffer = new Sniffer();\r
254             var result = "";\r
255             var first = new DateTime(2015, 1, 1, 0, 0, 0);\r
256             var queue =\r
257                 new Queue<DateTime>(new[] {first, first.AddMinutes(10), first.AddMinutes(15), first.AddMinutes(20)});\r
258             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, queue.Dequeue);\r
259             sniffer.EnableLog(LogType.Material);\r
260             SnifferTest.SniffLogFile(sniffer, "material_001");\r
261             PAssert.That(() => "2015-01-01 00:00:00,26178,26742,21196,33750,1426,1574,2185,10|" +\r
262                                "2015-01-01 00:10:00,24595,25353,18900,32025,1427,1576,2187,10|" +\r
263                                "2015-01-01 00:20:00,23463,25064,17314,31765,1427,1572,2187,10|"\r
264                                == result);\r
265         }\r
266 \r
267         [TestMethod]\r
268         public void WriteMaterialLogOnSortie()\r
269         {\r
270             var sniffer = new Sniffer();\r
271             var result = "";\r
272             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
273             sniffer.EnableLog(LogType.Material);\r
274             SnifferTest.SniffLogFile(sniffer, "battle_001");\r
275             PAssert.That(() => "2015-01-01 00:00:00,39636,36912,43064,47519,1329,1424,2030,19|" +\r
276                                "2015-01-01 00:00:00,39636,36912,43064,47519,1329,1424,2030,19|"\r
277                                == result);\r
278         }\r
279 \r
280         [TestMethod]\r
281         public void InspectCreateItem()\r
282         {\r
283             var sniffer = new Sniffer();\r
284             var result = "";\r
285             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
286             sniffer.EnableLog(LogType.CreateItem);\r
287             SnifferTest.SniffLogFile(sniffer, "createitem_001");\r
288             PAssert.That(() => "2015-01-01 00:00:00,12cm単装砲,小口径主砲,10,10,30,10,綾波改二(145),120|" +\r
289                                "2015-01-01 00:00:00,失敗,,10,10,30,10,綾波改二(145),120|"\r
290                                == result);\r
291         }\r
292 \r
293         [TestMethod]\r
294         public void InspectGetShip()\r
295         {\r
296             var sniffer = new Sniffer();\r
297             var result = "";\r
298             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
299             sniffer.EnableLog(LogType.CreateShip);\r
300             SnifferTest.SniffLogFile(sniffer, "createship_001");\r
301             PAssert.That(() => "2015-01-01 00:00:00,通常艦建造,雷,駆逐艦,30,30,30,30,1,1,綾波改二(145),120|" +\r
302                                "2015-01-01 00:00:00,大型艦建造,霧島,高速戦艦,1500,1500,2000,1000,1,0,綾波改二(145),120|"\r
303                                == result);\r
304         }\r
305 \r
306         [TestMethod]\r
307         public void InspectRemodelSlot()\r
308         {\r
309             var sniffer = new Sniffer();\r
310             var result = "";\r
311             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
312             sniffer.EnableLog(LogType.RemodelSlot);\r
313             SnifferTest.SniffLogFile(sniffer, "remodel_slot_001");\r
314             PAssert.That(() => "2015-01-01 00:00:00,12.7cm連装砲,4,○,,,,10,30,60,0,1,1,明石改(50),島風改(131)|" +\r
315                                "2015-01-01 00:00:00,12.7cm連装砲,5,×,,,,10,30,60,0,1,1,明石改(50),|" +\r
316                                "2015-01-01 00:00:00,12.7cm連装砲,7,○,,12.7cm連装砲,1,10,30,60,0,1,1,明石改(50),島風改(131)|" +\r
317                                "2015-01-01 00:00:00,91式高射装置,10,○,○,10cm連装高角砲,2,0,0,60,40,9,7,明石改(50),摩耶改(98)|"\r
318                                == result);\r
319         }\r
320     }\r
321 }