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 // This program is part of KancolleSniffer.\r
4 //\r
5 // KancolleSniffer is free software: you can redistribute it and/or modify\r
6 // it under the terms of the GNU General Public License as published by\r
7 // the Free Software Foundation, either version 3 of the License, or\r
8 // (at your option) any later version.\r
9 //\r
10 // This program is distributed in the hope that it will be useful,\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 // GNU General Public License for more details.\r
14 //\r
15 // You should have received a copy of the GNU General Public License\r
16 // along with this program; if not, see <http://www.gnu.org/licenses/>.\r
17 \r
18 using System;\r
19 using System.Collections.Generic;\r
20 using System.IO;\r
21 using ExpressionToCodeLib;\r
22 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
23 using Moq;\r
24 \r
25 namespace KancolleSniffer.Test\r
26 {\r
27     [TestClass]\r
28     public class LoggerTest\r
29     {\r
30         [TestMethod]\r
31         public void InspectMissionResult()\r
32         {\r
33             var sniffer = new Sniffer();\r
34             var result = "";\r
35             var header = "";\r
36             sniffer.SetLogWriter((path, s, h) =>\r
37             {\r
38                 result += s + "|";\r
39                 header = h;\r
40             }, () => new DateTime(2015, 1, 1));\r
41             sniffer.SkipMaster();\r
42             sniffer.EnableLog(LogType.Mission);\r
43             SnifferTest.SniffLogFile(sniffer, "mission_result_001");\r
44             PAssert.That(() => "日付,結果,遠征,燃料,弾薬,鋼材,ボーキ,開発資材,高速修復材,高速建造材" == header);\r
45             PAssert.That(() => "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0|" +\r
46                                "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0|" +\r
47                                "2015-01-01 00:00:00,大成功,MO作戦,0,0,360,420,1,0,0|" +\r
48                                "2015-01-01 00:00:00,失敗,東京急行(弐),0,0,0,0,0,0,0|"\r
49                                == result);\r
50         }\r
51 \r
52         /// <summary>\r
53         /// 出力先に書けないときは一時ファイルに書き込む\r
54         /// </summary>\r
55         [TestMethod]\r
56         public void WriteTmpFileWhenCantWriteTarget()\r
57         {\r
58             var mock = new Mock<LogWriter.IFile>();\r
59             var writer = new LogWriter(null, mock.Object);\r
60 \r
61             const string str = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0";\r
62             var tmp = "";\r
63             mock.Setup(l => l.AppendAllText(It.IsAny<string>(), It.IsAny<string>()))\r
64                 .Callback<string, string>((file, s) =>\r
65                 {\r
66                     if (file.EndsWith(".csv"))\r
67                         throw new IOException();\r
68                     if (file.EndsWith(".tmp"))\r
69                         tmp += s;\r
70                 });\r
71             mock.SetupSequence(l => l.Exists(It.IsAny<string>())).Returns(false).Returns(true);\r
72             writer.Write("遠征報告書", str, "");\r
73             PAssert.That(() => "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n" == tmp);\r
74         }\r
75 \r
76         [TestMethod]\r
77         public void MergeTmpFile()\r
78         {\r
79             MergeTmpFileMain(false);\r
80         }\r
81 \r
82         [TestMethod]\r
83         public void FaileToMergeTmpFile()\r
84         {\r
85             MergeTmpFileMain(true);\r
86         }\r
87 \r
88         private void MergeTmpFileMain(bool failToMerge)\r
89         {\r
90             var mock = new Mock<LogWriter.IFile>();\r
91             var writer = new LogWriter(null, mock.Object);\r
92 \r
93             var tmp = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n";\r
94             var csv = "";\r
95             mock.Setup(l => l.Exists(It.IsAny<string>())).Returns(true);\r
96             mock.Setup(l => l.ReadAllText(It.IsAny<string>()))\r
97                 .Returns((string path) => path.EndsWith(".tmp") ? tmp : "");\r
98             mock.Setup(l => l.AppendAllText(It.IsAny<string>(), It.IsAny<string>()))\r
99                 .Callback<string, string>((file, s) =>\r
100                 {\r
101                     if (file.EndsWith(".tmp"))\r
102                         tmp += s;\r
103                     if (file.EndsWith(".csv"))\r
104                     {\r
105                         if (failToMerge)\r
106                             throw new IOException();\r
107                         csv += s;\r
108                     }\r
109                 });\r
110             const string str = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0";\r
111             writer.Write("遠征報告書", str, "");\r
112             var result = failToMerge ? tmp : csv;\r
113             PAssert.That(() =>\r
114                 "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n" +\r
115                 "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0\r\n" == result);\r
116         }\r
117 \r
118         [TestMethod]\r
119         public void InspectBattleResult()\r
120         {\r
121             var sniffer = new Sniffer();\r
122             var result = "";\r
123             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
124             sniffer.EnableLog(LogType.Battle);\r
125             SnifferTest.SniffLogFile(sniffer, "battle_004");\r
126             PAssert.That(() => "2015-01-01 00:00:00,珊瑚諸島沖,1,出撃,S,同航戦,単縦陣,単縦陣,敵前衛艦隊,重巡洋艦,青葉," +\r
127                                "武蔵改(Lv133),86/106,扶桑改二(Lv87),77/77,北上改二(Lv113),49/49,飛龍改二(Lv133),63/74,蒼龍改二(Lv133),74/74,龍鳳改(Lv97),48/48," +\r
128                                "軽巡ヘ級(flagship),57/57,重巡リ級(flagship),76/76,重巡リ級(flagship),76/76,雷巡チ級(elite),50/50,駆逐ニ級(elite),45/45,駆逐ニ級(elite),45/45|" +\r
129                                "2015-01-01 00:00:00,珊瑚諸島沖,2,,B,反航戦,単横陣,単横陣,敵潜水艦隊,,," +\r
130                                "武蔵改(Lv133),86/106,扶桑改二(Lv87),77/77,北上改二(Lv113),46/49,飛龍改二(Lv133),63/74,蒼龍改二(Lv133),74/74,龍鳳改(Lv97),48/48," +\r
131                                "潜水ヨ級(flagship),44/44,潜水カ級(elite),27/27,潜水カ級(elite),27/27,潜水カ級(elite),27/27,潜水カ級,19/19,潜水カ級,19/19|" +\r
132                                "2015-01-01 00:00:00,珊瑚諸島沖,4,,S,反航戦,単縦陣,単縦陣,敵水上打撃部隊,戦艦,扶桑," +\r
133                                "武蔵改(Lv133),86/106,扶桑改二(Lv87),77/77,北上改二(Lv113),46/49,飛龍改二(Lv133),63/74,蒼龍改二(Lv133),45/74,龍鳳改(Lv97),48/48," +\r
134                                "戦艦タ級(flagship),90/90,重巡リ級(flagship),76/76,重巡リ級(flagship),76/76,雷巡チ級(elite),50/50,駆逐ロ級(flagship),43/43,駆逐ニ級(elite),45/45|" +\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                                "装甲空母姫,270/270,空母ヲ級(elite),88/88,戦艦タ級(flagship),90/90,重巡リ級(elite),60/60,軽巡ホ級(flagship),53/53,駆逐ハ級(flagship),47/47|"\r
138                                == result);\r
139         }\r
140 \r
141         [TestMethod]\r
142         public void InspectBattleResultOfSpMidnight()\r
143         {\r
144             var sniffer = new Sniffer();\r
145             var result = "";\r
146             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
147             sniffer.EnableLog(LogType.Battle);\r
148             SnifferTest.SniffLogFile(sniffer, "sp_midnight_001");\r
149             PAssert.That(() => "2015-01-01 00:00:00,サブ島沖海域,3,出撃,D,反航戦,単縦陣,単縦陣,敵前衛警戒艦隊,,," +\r
150                                "Prinz Eugen改(Lv52),1/63,,,,,,,,,,," +\r
151                                "軽巡ヘ級(flagship),57/57,重巡リ級(flagship),76/76,重巡リ級(flagship),76/76,雷巡チ級(elite),50/50,雷巡チ級(elite),50/50,駆逐ロ級(flagship),43/43|"\r
152                                == result);\r
153         }\r
154 \r
155         [TestMethod]\r
156         public void InspectCombinedBattleResult()\r
157         {\r
158             var sniffer = new Sniffer();\r
159             var result = "";\r
160             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));\r
161             sniffer.EnableLog(LogType.Battle);\r
162             SnifferTest.SniffLogFile(sniffer, "combined_surface_001");\r
163             PAssert.That(() => "2015-01-01 00:00:00,南西方面海域,3,出撃,S,同航戦,第四警戒航行序列,単縦陣,ピケット水雷戦隊 A群,,," +\r
164                                "あきつ丸改(Lv68),40/40,山城改二(Lv85),77/77,扶桑改二(Lv85),77/77,利根改二(Lv117),59/66,筑摩改二(Lv117),51/65,神通改二(Lv97),47/50," +\r
165                                "軽巡ツ級(elite),66/66,軽巡ト級(elite),55/55,駆逐イ級後期型,35/35,駆逐イ級後期型,35/35,駆逐イ級後期型,35/35,駆逐イ級後期型,35/35|" +\r
166                                "2015-01-01 00:00:00,南西方面海域,7,,S,同航戦,第四警戒航行序列,複縦陣,任務部隊 D群,駆逐艦,満潮," +\r
167                                "あきつ丸改(Lv68),40/40,山城改二(Lv85),77/77,扶桑改二(Lv85),77/77,利根改二(Lv117),33/66,筑摩改二(Lv117),51/65,神通改二(Lv97),47/50," +\r
168                                "戦艦タ級(flagship),90/90,軽母ヌ級(flagship),84/84,軽巡ト級(elite),55/55,軽巡ト級(elite),55/55,駆逐ロ級後期型,37/37,駆逐ロ級後期型,37/37|"\r
169                                == result);\r
170         }\r
171 \r
172         [TestMethod]\r
173         public void InspectMaterial()\r
174         {\r
175             var sniffer = new Sniffer();\r
176             var result = "";\r
177             var first = new DateTime(2015, 1, 1, 0, 0, 0);\r
178             var queue =\r
179                 new Queue<DateTime>(new[] {first, first.AddMinutes(10), first.AddMinutes(15), first.AddMinutes(20)});\r
180             sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, queue.Dequeue);\r
181             sniffer.EnableLog(LogType.Material);\r
182             SnifferTest.SniffLogFile(sniffer, "material_001");\r
183             PAssert.That(() => "2015-01-01 00:00:00,26178,26742,21196,33750,1426,1574,2185,10|" +\r
184                                "2015-01-01 00:10:00,24595,25353,18900,32025,1427,1576,2187,10|" +\r
185                                "2015-01-01 00:20:00,23463,25064,17314,31765,1427,1572,2187,10|"\r
186                                == result);\r
187         }\r
188 \r
189         [TestMethod]\r
190         public void InspectCreateItem()\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.CreateItem);\r
196             SnifferTest.SniffLogFile(sniffer, "createitem_001");\r
197             PAssert.That(() => "2015-01-01 00:00:00,7.7mm機銃,対空機銃,10,20,20,10,天津風改(127),114|" +\r
198                                "2015-01-01 00:00:00,失敗,,10,20,20,10,天津風改(127),114|"\r
199                                == result);\r
200         }\r
201 \r
202         [TestMethod]\r
203         public void InspectGetShip()\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.CreateShip);\r
209             SnifferTest.SniffLogFile(sniffer, "createship_001");\r
210             PAssert.That(() => "2015-01-01 00:00:00,通常艦建造,球磨,軽巡洋艦,30,30,30,30,1,1,明石改(50),116|" +\r
211                                "2015-01-01 00:00:00,大型艦建造,筑摩,重巡洋艦,1500,1500,2000,1000,1,0,明石改(50),116|"\r
212                                == result);\r
213         }\r
214     }\r
215 }