OSDN Git Service

デバッグログに日付を入れる
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer.Test / SnifferTest.cs
1 // Copyright (C) 2014 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 System.IO.Compression;\r
19 using System.Linq;\r
20 using ExpressionToCodeLib;\r
21 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
22 \r
23 namespace KancolleSniffer.Test\r
24 {\r
25     [TestClass]\r
26     public class SnifferTest\r
27     {\r
28         public static StreamReader OpenLogFile(string name)\r
29         {\r
30             var dir = Path.GetDirectoryName(Path.GetDirectoryName(Environment.CurrentDirectory));\r
31 // ReSharper disable once AssignNullToNotNullAttribute\r
32             var path = Path.Combine(dir, Path.Combine("logs", name + ".log.gz"));\r
33             return new StreamReader(new GZipStream(File.Open(path, FileMode.Open), CompressionMode.Decompress));\r
34         }\r
35 \r
36         public static void SniffLogFile(Sniffer sniffer, string name, Action<Sniffer> action = null)\r
37         {\r
38             var ln = 0;\r
39             using (var stream = OpenLogFile(name))\r
40             {\r
41                 while (!stream.EndOfStream)\r
42                 {\r
43                     var triple = new List<string>();\r
44                     foreach (var s in new[] {"url: ", "request: ", "response: "})\r
45                     {\r
46                         string line;\r
47                         do\r
48                         {\r
49                             line = stream.ReadLine();\r
50                             ln++;\r
51                             if (line == null)\r
52                                 throw new Exception($"ログの内容がそろっていません: {ln:d}行目");\r
53                         } while (!line.StartsWith(s));\r
54                         triple.Add(line.Substring(s.Length));\r
55                     }\r
56                     var json = JsonParser.Parse(triple[2]);\r
57                     sniffer.Sniff(triple[0], triple[1], json);\r
58                     action?.Invoke(sniffer);\r
59                 }\r
60             }\r
61         }\r
62 \r
63         /// <summary>\r
64         ///  演習で受けたダメージが次の戦闘の結果に影響しない\r
65         /// </summary>\r
66         [TestMethod]\r
67         public void DamageInPracticeNotSpillIntoSortie()\r
68         {\r
69             var expected = new[] {31, 15, 15};\r
70             var sniffer = new Sniffer();\r
71             SniffLogFile(sniffer, "battle_001");\r
72             var result = sniffer.GetShipStatuses(0).Select(s => s.NowHp);\r
73             PAssert.That(() => (expected.SequenceEqual(result)));\r
74         }\r
75 \r
76         /// <summary>\r
77         /// 演習では大破警告を出さない\r
78         /// </summary>\r
79         [TestMethod]\r
80         public void IgnoreDamagedShipsInPractice()\r
81         {\r
82             var sniffer = new Sniffer();\r
83             SniffLogFile(sniffer, "practice_001");\r
84             PAssert.That(() => !sniffer.BadlyDamagedShips.Any());\r
85         }\r
86 \r
87         /// <summary>\r
88         /// 夜戦のダメージを戦闘結果に反映する\r
89         /// </summary>\r
90         [TestMethod]\r
91         public void CaptureDamageInNightCombat()\r
92         {\r
93             var sniffer = new Sniffer();\r
94             SniffLogFile(sniffer, "battle_002");\r
95             AssertEqualBattleResult(sniffer, new[] {28, 1, 13});\r
96         }\r
97 \r
98         private void AssertEqualBattleResult(Sniffer sniffer, IEnumerable<int> expected, string msg = null)\r
99         {\r
100             var result = sniffer.GetShipStatuses(0).Select(s => s.NowHp);\r
101             PAssert.That(() => (expected.SequenceEqual(result)), msg);\r
102         }\r
103 \r
104         /// <summary>\r
105         /// 連合艦隊(水上打撃部隊)による戦闘のダメージを結果に反映する\r
106         /// </summary>\r
107         [TestMethod]\r
108         public void CombinedFleetSurface()\r
109         {\r
110             var sniffer = new Sniffer();\r
111             SniffLogFile(sniffer, "combined_surface_001");\r
112             AssertEauqlCombinedResult(sniffer, new[] {40, 77, 77, 33, 51, 47}, new[] {39, 35, 11, 39, 37, 40});\r
113 \r
114             SniffLogFile(sniffer, "combined_surface_002");\r
115             AssertEauqlCombinedResult(sniffer, new[] {40, 77, 77, 33, 15, 6}, new[] {39, 35, 4, 3, 14, 40});\r
116         }\r
117 \r
118         private void AssertEauqlCombinedResult(Sniffer sniffer, IEnumerable<int> expected0, IEnumerable<int> expected1,\r
119             string msg = null)\r
120         {\r
121             var result0 = sniffer.GetShipStatuses(0).Select(s => s.NowHp);\r
122             var result1 = sniffer.GetShipStatuses(1).Select(s => s.NowHp);\r
123             PAssert.That(() => (expected0.SequenceEqual(result0) && expected1.SequenceEqual(result1)), msg);\r
124         }\r
125 \r
126         /// <summary>\r
127         /// 開幕夜戦のダメージを戦闘結果に反映する\r
128         /// </summary>\r
129         [TestMethod]\r
130         public void SpMidnight()\r
131         {\r
132             var sniffer = new Sniffer();\r
133             SniffLogFile(sniffer, "sp_midnight_001");\r
134             AssertEqualBattleResult(sniffer, new[] {1});\r
135             PAssert.That(() => sniffer.BadlyDamagedShips.Any());\r
136         }\r
137 \r
138         /// <summary>\r
139         /// 連合艦隊(空母機動部隊)による戦闘のダメージを結果に反映する\r
140         /// </summary>\r
141         [TestMethod]\r
142         public void CombinedFleetAir()\r
143         {\r
144             var sniffer = new Sniffer();\r
145             SniffLogFile(sniffer, "combined_air_001");\r
146             AssertEauqlCombinedResult(sniffer, new[] {40, 98, 90, 66, 78, 86}, new[] {47, 41, 5, 42, 43, 29});\r
147             PAssert.That(() => sniffer.BadlyDamagedShips.Any());\r
148 \r
149             SniffLogFile(sniffer, "combined_air_002");\r
150             AssertEauqlCombinedResult(sniffer, new[] {13, 87, 90, 59, 69, 86}, new[] {47, 41, 5, 20, 43, 29});\r
151         }\r
152 \r
153         /// <summary>\r
154         /// 護衛退避を正しく処理する\r
155         /// </summary>\r
156         [TestMethod]\r
157         public void EscapeShip()\r
158         {\r
159             var sniffer = new Sniffer();\r
160             SniffLogFile(sniffer, "combined_escape_001");\r
161             AssertEauqlCombinedResult(sniffer, new[] {37, 105, 106, 90, 66, 10}, new[] {41, 41, 37, 44, 43, 43},\r
162                 "連合艦隊で2戦して大破が出るまで");\r
163             PAssert.That(() => sniffer.BadlyDamagedShips.Any());\r
164             SniffLogFile(sniffer, "combined_escape_002");\r
165             PAssert.That(() => sniffer.GetShipStatuses(0)[5].Escaped && sniffer.GetShipStatuses(1)[1].Escaped,\r
166                 "続けて護衛退避を実行");\r
167             PAssert.That(() => !sniffer.BadlyDamagedShips.Any());\r
168             SniffLogFile(sniffer, "combined_escape_003");\r
169             AssertEauqlCombinedResult(sniffer, new[] {37, 105, 106, 90, 1, 10}, new[] {41, 41, 32, 44, 43, 43},\r
170                 "もう一戦して大破が出るまで");\r
171             PAssert.That(() => sniffer.BadlyDamagedShips.Any());\r
172             SniffLogFile(sniffer, "combined_escape_004");\r
173             PAssert.That(() => sniffer.GetShipStatuses(0)[5].Escaped && sniffer.GetShipStatuses(1)[1].Escaped &&\r
174                                sniffer.GetShipStatuses(0)[4].Escaped && sniffer.GetShipStatuses(1)[2].Escaped,\r
175                 "続けて護衛退避を実行");\r
176             PAssert.That(() => !sniffer.BadlyDamagedShips.Any());\r
177         }\r
178 \r
179         /// <summary>\r
180         /// 護衛退避した空母を除いた制空値を計算する\r
181         /// </summary>\r
182         [TestMethod]\r
183         public void FighterPowerWithoutEscapedShip()\r
184         {\r
185             var sniffer = new Sniffer();\r
186             SniffLogFile(sniffer, "combined_escape_001");\r
187             PAssert.That(() => sniffer.GetFighterPower(0)[0] == 187);\r
188             SniffLogFile(sniffer, "combined_escape_002");\r
189             PAssert.That(() => sniffer.GetFighterPower(0)[0] == 65);\r
190         }\r
191 \r
192         /// <summary>\r
193         /// 護衛退避した艦娘を除いて勝利判定を計算する\r
194         /// </summary>\r
195         [TestMethod]\r
196         public void BattleResultRankWithEscapedShip()\r
197         {\r
198             var sniffer = new Sniffer();\r
199             SniffLogFile(sniffer, "combined_escape_005");\r
200             PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.D);\r
201         }\r
202 \r
203 \r
204         /// <summary>\r
205         /// 夜戦の開始時に昼戦の結果を反映する\r
206         /// </summary>\r
207         [TestMethod]\r
208         public void ResultOfDayBattleShowInNightBattle()\r
209         {\r
210             var sniffer = new Sniffer();\r
211             SniffLogFile(sniffer, "battle_003");\r
212             AssertEqualBattleResult(sniffer, new[] {28, 2, 13});\r
213             PAssert.That(() => !sniffer.BadlyDamagedShips.Any(), "夜戦の開始時は大破警告を出さない");\r
214         }\r
215 \r
216         /// <summary>\r
217         /// 通常艦隊の航空戦のダメージを結果に反映する\r
218         /// </summary>\r
219         [TestMethod]\r
220         public void AirBattle()\r
221         {\r
222             var sniffer = new Sniffer();\r
223             SniffLogFile(sniffer, "airbattle_001");\r
224             AssertEqualBattleResult(sniffer, new[] {37, 36, 31, 37, 17, 63}, "夜戦あり");\r
225 \r
226             sniffer = new Sniffer();\r
227             SniffLogFile(sniffer, "airbattle_002");\r
228             AssertEqualBattleResult(sniffer, new[] {66, 36, 16, 27, 35, 38}, "昼戦のみ");\r
229         }\r
230 \r
231         /// <summary>\r
232         /// 支援射撃による敵の損傷を勝利判定に反映させる\r
233         /// </summary>\r
234         [TestMethod]\r
235         public void SupportShellingChangeResultRank()\r
236         {\r
237             var sniffer = new Sniffer();\r
238             SniffLogFile(sniffer, "support_001");\r
239             PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.A);\r
240         }\r
241 \r
242         /// <summary>\r
243         /// 敵連合艦隊への航空支援攻撃を反映させる\r
244         /// </summary>\r
245         [TestMethod]\r
246         public void SupportAirAttackResultRank()\r
247         {\r
248             var sniffer = new Sniffer();\r
249             SniffLogFile(sniffer, "support_002");\r
250             PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.P);\r
251         }\r
252 \r
253         /// <summary>\r
254         /// ダメコンの使用を戦闘結果に反映させる\r
255         /// </summary>\r
256         [TestMethod]\r
257         public void DamageControl()\r
258         {\r
259             var sniffer = new Sniffer();\r
260             SniffLogFile(sniffer, "damecon_001");\r
261             AssertEqualBattleResult(sniffer, new[] {30, 1, 3}, "戦闘前");\r
262             PAssert.That(() => sniffer.GetShipStatuses(0)[1].Slot.Select(item => item.Id).\r
263                 SequenceEqual(new[] {2, 4593, -1, -1, -1}), "ダメコンを二つ装備");\r
264             PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.P, "判定は完全勝利");\r
265             SniffLogFile(sniffer, "damecon_002");\r
266             AssertEqualBattleResult(sniffer, new[] {30, 1, 3}, "戦闘後");\r
267             PAssert.That(() => sniffer.GetShipStatuses(0)[1].Slot.Select(item => item.Id).\r
268                 SequenceEqual(new[] {-1, 4593, -1, -1, -1}), "ダメコンを一つ消費");\r
269         }\r
270 \r
271         /// <summary>\r
272         /// 補強装備スロットのダメコンの使用を反映する\r
273         /// </summary>\r
274         [TestMethod]\r
275         public void DamgeControlInSlotEx()\r
276         {\r
277             var sniffer = new Sniffer();\r
278             SniffLogFile(sniffer, "damecon_003");\r
279             PAssert.That(() => sniffer.GetShipStatuses(0)[5].SlotEx.Id == 10306, "戦闘前");\r
280             SniffLogFile(sniffer, "damecon_004");\r
281             PAssert.That(() => sniffer.GetShipStatuses(0)[5].SlotEx.Id == -1, "戦闘後");\r
282         }\r
283 \r
284         /// <summary>\r
285         /// 旗艦大破で女神を使った進撃を反映する\r
286         /// </summary>\r
287         [TestMethod]\r
288         public void DamageControlForFlagShip()\r
289         {\r
290             var sniffer = new Sniffer();\r
291             SniffLogFile(sniffer, "damecon_005");\r
292             var fs = sniffer.GetShipStatuses(0)[0];\r
293             PAssert.That(() => fs.SlotEx.Id == -1);\r
294             PAssert.That(() => fs.NowHp == fs.MaxHp);\r
295             PAssert.That(() => sniffer.BadlyDamagedShips.Length == 0);\r
296         }\r
297 \r
298         /// <summary>\r
299         /// 戦闘開始時に大破艦がいても夜戦突入時に警告を出さない\r
300         /// </summary>\r
301         [TestMethod]\r
302         public void NotWarnDamagedShipOnRunIntoNightBattle()\r
303         {\r
304             var sniffer = new Sniffer();\r
305             SniffLogFile(sniffer, "damecon_006");\r
306             PAssert.That(() => sniffer.BadlyDamagedShips.Length == 0);\r
307         }\r
308 \r
309         /// <summary>\r
310         /// 轟沈した艦娘に大破警告を出さない\r
311         /// </summary>\r
312         [TestMethod]\r
313         public void NotWarnToSunkShip()\r
314         {\r
315             var sniffer = new Sniffer();\r
316             SniffLogFile(sniffer, "sunk_001");\r
317             AssertEqualBattleResult(sniffer, new[]{26, 0, 1, 3});\r
318             PAssert.That(() => sniffer.BadlyDamagedShips.SequenceEqual(new[] {"菊月", "雪風"}));\r
319         }\r
320 \r
321         /// <summary>\r
322         /// 連合艦隊(水上打撃部隊)で二回目の砲撃戦がない場合を正しく処理する\r
323         /// </summary>\r
324         [TestMethod]\r
325         // ReSharper disable once InconsistentNaming\r
326         public void CombinedFleetSurfaceWithout2ndShelling()\r
327         {\r
328             var sniffer = new Sniffer();\r
329             SniffLogFile(sniffer, "combined_surface_003");\r
330             PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.P);\r
331         }\r
332 \r
333         /// <summary>\r
334         /// 連合艦隊(水上打撃部隊)で開幕雷撃で戦闘が終わる場合を正しく処理する\r
335         /// </summary>\r
336         [TestMethod]\r
337         // ReSharper disable once InconsistentNaming\r
338         public void CombinedFleetSurfaceWithoutAnyShelling()\r
339         {\r
340             var sniffer = new Sniffer();\r
341             SniffLogFile(sniffer, "combined_surface_004");\r
342             PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.P);\r
343         }\r
344 \r
345         /// <summary>\r
346         /// ship2に代わるship_deckを処理する\r
347         /// </summary>\r
348         [TestMethod]\r
349         public void ShipDeck()\r
350         {\r
351             var sniffer = new Sniffer();\r
352             SniffLogFile(sniffer, "ship_deck_001");\r
353             PAssert.That(() => sniffer.GetShipStatuses(0)[0].Fuel == 36);\r
354         }\r
355 \r
356         /// <summary>\r
357         /// 夜戦かどうかを選択する画面でリロードしても結果を次の戦闘に持ち越さない\r
358         /// </summary>\r
359         [TestMethod]\r
360         public void ReloadBeforeBattleResult()\r
361         {\r
362             var sniffer = new Sniffer();\r
363             SniffLogFile(sniffer, "reload_001");\r
364             PAssert.That(() => sniffer.GetShipStatuses(0)[0].NowHp == 41);\r
365         }\r
366 \r
367         /// <summary>\r
368         /// 航空戦のない演習を正しく処理する\r
369         /// </summary>\r
370         [TestMethod]\r
371         public void PracticeWithoutAirBattle()\r
372         {\r
373             var sniffer = new Sniffer();\r
374             SniffLogFile(sniffer, "practice_002");\r
375             PAssert.That(() => sniffer.Battle.AirControlLevel == -1);\r
376         }\r
377 \r
378         /// <summary>\r
379         /// 出撃時に大破している艦娘がいたら警告する\r
380         /// </summary>\r
381         [TestMethod]\r
382         public void DamagedShipWarningOnMapStart()\r
383         {\r
384             var sniffer = new Sniffer();\r
385             SniffLogFile(sniffer, "mapstart_001");\r
386             PAssert.That(() => sniffer.BadlyDamagedShips.SequenceEqual(new[] {"大潮"}));\r
387         }\r
388 \r
389         /// <summary>\r
390         /// 連合艦隊に大破艦がいる状態で第3艦隊が出撃したときに警告しない\r
391         /// </summary>\r
392         [TestMethod]\r
393         public void NotWarnDamagedShipInCombinedFleetOnMapStart()\r
394         {\r
395             var sniffer = new Sniffer();\r
396             SniffLogFile(sniffer, "mapstart_002");\r
397             PAssert.That(() => !sniffer.BadlyDamagedShips.Any());\r
398         }\r
399 \r
400         /// <summary>\r
401         /// 先制対潜攻撃を正しく処理する\r
402         /// </summary>\r
403         [TestMethod]\r
404         public void OpeningTaisen()\r
405         {\r
406             var sniffer = new Sniffer();\r
407             SniffLogFile(sniffer, "opening_taisen_001");\r
408             PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.P);\r
409         }\r
410 \r
411         /// <summary>\r
412         /// 敵の空スロットの値が-1ではなく0のときにエラーにならない\r
413         /// </summary>\r
414         [TestMethod]\r
415         public void ZeroValueEmptySlot()\r
416         {\r
417             var sniffer = new Sniffer {UseOldEnemyId = true};\r
418             SniffLogFile(sniffer, "battle_006");\r
419             PAssert.That(() => sniffer.Battle.EnemyFighterPower.AirCombat == 0);\r
420         }\r
421 \r
422         /// <summary>\r
423         /// B勝利を正しく判定する\r
424         /// </summary>\r
425         [TestMethod]\r
426         public void JudgeResultRankB()\r
427         {\r
428             var sniffer = new Sniffer();\r
429             SniffLogFile(sniffer, "battle_008");\r
430             PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.B);\r
431         }\r
432 \r
433         /// <summary>\r
434         /// 最終セルで大破警告を出さない\r
435         /// </summary>\r
436         [TestMethod]\r
437         public void NotWarnDamagedShipInLastCell()\r
438         {\r
439             var sniffer = new Sniffer();\r
440             SniffLogFile(sniffer, "taiha_001");\r
441             PAssert.That(() => sniffer.GetShipStatuses(0)[2].NowHp == 2);\r
442             PAssert.That(() => !sniffer.BadlyDamagedShips.Any());\r
443         }\r
444 \r
445         /// <summary>\r
446         /// 道中で大破警告を出す\r
447         /// </summary>\r
448         [TestMethod]\r
449         public void WarnDamagedShip()\r
450         {\r
451             var sniffer = new Sniffer();\r
452             SniffLogFile(sniffer, "taiha_002");\r
453             PAssert.That(() => sniffer.GetShipStatuses(0)[2].NowHp == 1);\r
454             PAssert.That(() => sniffer.BadlyDamagedShips.Any());\r
455         }\r
456 \r
457         /// <summary>\r
458         /// 連合艦隊の第二艦隊の旗艦の大破警告を出さない\r
459         /// </summary>\r
460         [TestMethod]\r
461         public void NotWarnDamagedFlagshipInGuardFleet()\r
462         {\r
463             var sniffer = new Sniffer();\r
464             SniffLogFile(sniffer, "taiha_003");\r
465             PAssert.That(() => sniffer.GetShipStatuses(1)[0].NowHp == 12);\r
466             PAssert.That(() => !sniffer.BadlyDamagedShips.Any());\r
467         }\r
468 \r
469         /// <summary>\r
470         /// 熟練度込みの制空値を正しく計算する\r
471         /// </summary>\r
472         [TestMethod]\r
473         public void FighterPowerWithBonus()\r
474         {\r
475             var sniffer = new Sniffer();\r
476             SniffLogFile(sniffer, "fighterpower_001");\r
477             PAssert.That(() => sniffer.GetFighterPower(0).SequenceEqual(new[] {156, 159}));\r
478             SniffLogFile(sniffer, "fighterpower_002");\r
479             PAssert.That(() => sniffer.GetFighterPower(0).SequenceEqual(new[] {140, 143}), "全滅したスロットがある");\r
480         }\r
481 \r
482         /// <summary>\r
483         /// 改修効果込みの制空値を正しく計算する\r
484         /// </summary>\r
485         [TestMethod]\r
486         public void FighterPowerWithImprovement()\r
487         {\r
488             var sniffer = new Sniffer();\r
489             SniffLogFile(sniffer, "fighterpower_003");\r
490             PAssert.That(() => sniffer.GetFighterPower(0).SequenceEqual(new[] {135, 135}));\r
491         }\r
492 \r
493         /// <summary>\r
494         /// 基地航空隊の制空値を正しく計算する\r
495         /// </summary>\r
496         [TestMethod]\r
497         public void FighterPowerOfBaseAirCorps()\r
498         {\r
499             var sniffer = new Sniffer();\r
500             SniffLogFile(sniffer, "baseaircorps_001");\r
501             PAssert.That(() => sniffer.BaseAirCorps[0].AirCorps[0].FighterPower[1] == 301);\r
502             sniffer.BaseAirCorps[0].AirCorps[0].Action = 2; // 防空\r
503             PAssert.That(() => sniffer.BaseAirCorps[0].AirCorps[0].FighterPower[1] == 320);\r
504         }\r
505 \r
506         /// <summary>\r
507         /// 基地航空隊の防空時の偵察機補正を含む制空値を計算する\r
508         /// </summary>\r
509         [TestMethod]\r
510         public void FighterPowerWithReconBonus()\r
511         {\r
512             var sniffer = new Sniffer();\r
513             SniffLogFile(sniffer, "baseaircorps_002");\r
514             PAssert.That(() => sniffer.BaseAirCorps[0].AirCorps[2].FighterPower[0] == 353);\r
515         }\r
516 \r
517         /// <summary>\r
518         /// 陸上攻撃機の熟練度を制空値に反映させる\r
519         /// </summary>\r
520         [TestMethod]\r
521         public void FighterPowerOfLandBasedAttackAircraft()\r
522         {\r
523             var sniffer = new Sniffer();\r
524             SniffLogFile(sniffer, "baseaircorps_003");\r
525             PAssert.That(() => sniffer.BaseAirCorps[1].AirCorps[0].FighterPower[0] == 121);\r
526         }\r
527 \r
528         /// <summary>\r
529         /// 敵艦隊の制空値を計算する\r
530         /// </summary>\r
531         [TestMethod]\r
532         public void EnemyFighterPower()\r
533         {\r
534             var sniffer1 = new Sniffer{UseOldEnemyId = true};\r
535             SniffLogFile(sniffer1, "airbattle_002");\r
536             PAssert.That(() => sniffer1.Battle.EnemyFighterPower.AirCombat == 28);\r
537 \r
538             var sniffer2 = new Sniffer {UseOldEnemyId = true};\r
539             SniffLogFile(sniffer2, "both_combined_001");\r
540             PAssert.That(() => sniffer2.Battle.EnemyFighterPower.AirCombat == 389);\r
541         }\r
542 \r
543         /// <summary>\r
544         /// マップ索敵の判定式(33)を正しく計算する\r
545         /// </summary>\r
546         [TestMethod]\r
547         public void LineOfSight()\r
548         {\r
549             var sniffer = new Sniffer();\r
550             SniffLogFile(sniffer, "lineofsight_001");\r
551             PAssert.That(() => Math.Abs(sniffer.GetFleetLineOfSights(0, 1) - 39.45) < 0.01);\r
552             PAssert.That(() => Math.Abs(sniffer.GetFleetLineOfSights(0, 3) - 115.19) < 0.01);\r
553             PAssert.That(() => Math.Abs(sniffer.GetFleetLineOfSights(0, 4) - 153.06) < 0.01);\r
554             SniffLogFile(sniffer, "lineofsight_002");\r
555             PAssert.That(() => Math.Abs(sniffer.GetFleetLineOfSights(0, 1) - -25.10) < 0.01, "艦隊に空きがある");\r
556         }\r
557 \r
558         /// <summary>\r
559         /// 触接開始率を正しく計算する\r
560         /// </summary>\r
561         [TestMethod]\r
562         public void ContactTriggerRage()\r
563         {\r
564             var sniffer = new Sniffer();\r
565             SniffLogFile(sniffer, "contact_001");\r
566             PAssert.That(() => Math.Abs(sniffer.GetContactTriggerRate(0) - 1.8182) < 0.0001);\r
567         }\r
568 \r
569         /// <summary>\r
570         /// 空襲戦を正しく処理する\r
571         /// </summary>\r
572         [TestMethod]\r
573         public void LdAirBattle()\r
574         {\r
575             var sniffer = new Sniffer();\r
576             SniffLogFile(sniffer, "ld_airbattle_001");\r
577             AssertEqualBattleResult(sniffer, new[] {31, 59, 62, 14, 36, 47});\r
578             PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.A);\r
579         }\r
580 \r
581         /// <summary>\r
582         /// 連合艦隊の空襲戦を正しく処理する\r
583         /// </summary>\r
584         [TestMethod]\r
585         public void CombinedLdAirBattle()\r
586         {\r
587             var sniffer = new Sniffer();\r
588             SniffLogFile(sniffer, "ld_airbattle_002");\r
589             AssertEauqlCombinedResult(sniffer, new[] {31, 77, 77, 37, 41, 39}, new[] {45, 59, 64, 35, 36, 10});\r
590             PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.A);\r
591         }\r
592 \r
593         /// <summary>\r
594         /// TPを正しく計算する\r
595         /// </summary>\r
596         [TestMethod]\r
597         public void TransportPoint()\r
598         {\r
599             var sniffer1 = new Sniffer();\r
600             SniffLogFile(sniffer1, "transportpoint_001");\r
601             ItemSpec.IncreaceLandPowerTp = false;\r
602             PAssert.That(() => (int)sniffer1.GetShipStatuses(0).Sum(s => s.TransportPoint) == 27);\r
603             ItemSpec.IncreaceLandPowerTp = true;\r
604             PAssert.That(() => (int)sniffer1.GetShipStatuses(0).Sum(s => s.TransportPoint) == 37, "陸上戦力揚陸時");\r
605 \r
606             var sniffer2 = new Sniffer();\r
607             SniffLogFile(sniffer2, "transportpoint_002");\r
608             PAssert.That(() => (int)sniffer2.GetShipStatuses(0).Sum(s => s.TransportPoint) == 19, "鬼怒改二+特大発+おにぎり");\r
609 \r
610             var sniffer3 = new Sniffer();\r
611             SniffLogFile(sniffer3, "transportpoint_003");\r
612             PAssert.That(() => (int)sniffer3.GetShipStatuses(0).Sum(s => s.TransportPoint) == 13, "駆逐艦+士魂部隊");\r
613         }\r
614 \r
615         /// <summary>\r
616         /// 敵の連合艦隊に対応する\r
617         /// </summary>\r
618         [TestMethod]\r
619         public void EnemyCombinedBattle()\r
620         {\r
621             var sniffer1 = new Sniffer();\r
622             SniffLogFile(sniffer1, "ec_battle_001");\r
623             PAssert.That(() => sniffer1.Battle.ResultRank == BattleResultRank.S, "昼戦のみ");\r
624 \r
625             var sniffer2 = new Sniffer();\r
626             SniffLogFile(sniffer2, "ec_battle_002");\r
627             PAssert.That(() => sniffer2.Battle.ResultRank == BattleResultRank.S, "夜戦込み");\r
628 \r
629             var sniffer3 = new Sniffer();\r
630             SniffLogFile(sniffer3, "ec_battle_003");\r
631             PAssert.That(() => sniffer3.Battle.ResultRank == BattleResultRank.A, "護衛を撃ちもらす");\r
632         }\r
633 \r
634 \r
635         /// <summary>\r
636         /// 双方連合艦隊の戦闘に対応する\r
637         /// </summary>\r
638         [TestMethod]\r
639         public void BothCombinedBattle()\r
640         {\r
641             var sniffer1 = new Sniffer();\r
642             SniffLogFile(sniffer1, "both_combined_water_001");\r
643             PAssert.That(() => sniffer1.Battle.ResultRank == BattleResultRank.A);\r
644 \r
645             var sniffer2 = new Sniffer();\r
646             SniffLogFile(sniffer2, "both_combined_001");\r
647             PAssert.That(() => sniffer2.Battle.ResultRank == BattleResultRank.S);\r
648 \r
649             // 護衛艦隊に雷撃を受ける場合\r
650             var sniffer3 = new Sniffer();\r
651             SniffLogFile(sniffer3, "both_combined_002");\r
652             PAssert.That(() => sniffer2.Battle.ResultRank == BattleResultRank.S);\r
653             PAssert.That(\r
654                 () => sniffer3.GetShipStatuses(0).Select(s => s.NowHp).SequenceEqual(new[] {89, 86, 87, 78, 87, 57}));\r
655             PAssert.That(\r
656                 () => sniffer3.GetShipStatuses(1).Select(s => s.NowHp).SequenceEqual(new[] {46, 37, 14, 59, 49, 63}));\r
657         }\r
658 \r
659         /// <summary>\r
660         /// 噴式強襲に対応する\r
661         /// </summary>\r
662         [TestMethod]\r
663         public void Injection()\r
664         {\r
665             var sniffer = new Sniffer();\r
666             SniffLogFile(sniffer, "injection_001");\r
667             PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.P);\r
668         }\r
669 \r
670         /// <summary>\r
671         /// 基地航空隊噴式強襲でapi_stage3_combinedがnullの場合に対応する\r
672         /// </summary>\r
673         [TestMethod]\r
674         public void AirbaseInjection()\r
675         {\r
676             var sniffer = new Sniffer();\r
677             SniffLogFile(sniffer, "airbase_injection_001");\r
678             PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.P);\r
679         }\r
680 \r
681         /// <summary>\r
682         /// 対空砲火のパラメータを計算する\r
683         /// </summary>\r
684         [TestMethod]\r
685         public void AntiAirFire()\r
686         {\r
687             var sniffer = new Sniffer();\r
688             SniffLogFile(sniffer, "antiairfire_001");\r
689             var ships = sniffer.GetShipStatuses(0);\r
690             PAssert.That(() => ships.Sum(ship => ship.EffectiveAntiAirForFleet) == 88);\r
691             PAssert.That(\r
692                 () =>\r
693                     ships.Select(ship => ship.EffectiveAntiAirForShip)\r
694                         .SequenceEqual(new[] {92, 90, 88, 228, 146, 226}));\r
695         }\r
696 \r
697         /// <summary>\r
698         /// 航空戦の結果を処理する\r
699         /// </summary>\r
700         [TestMethod]\r
701         public void AirBattleResult()\r
702         {\r
703             var sniffer1 = new Sniffer();\r
704             SniffLogFile(sniffer1, "battle_001");\r
705             PAssert.That(() => sniffer1.Battle.AirBattleResults.Count == 0);\r
706 \r
707             var sniffer2 = new Sniffer();\r
708             SniffLogFile(sniffer2, "ec_battle_001");\r
709             PAssert.That(() => sniffer2.Battle.AirBattleResults.Count == 4);\r
710 \r
711             var sniffer3 = new Sniffer();\r
712             SniffLogFile(sniffer3, "battle_007");\r
713             PAssert.That(() => sniffer3.Battle.AirBattleResults.Count == 1, "stage2がない場合");\r
714         }\r
715 \r
716         /// <summary>\r
717         /// 2-5をクリアしたときの特別戦果を反映する\r
718         /// </summary>\r
719         [TestMethod]\r
720         public void ExMapBattleResult()\r
721         {\r
722             var sniffer0 = new Sniffer();\r
723             sniffer0.ExMap.ClearClearStatus();\r
724             SniffLogFile(sniffer0, "eo_001");\r
725             PAssert.That(() => sniffer0.ExMap.Achievement == 100, "ほかのマップの情報なし");\r
726             var sniffer1 = new Sniffer();\r
727             SniffLogFile(sniffer1, "eo_001");\r
728             // すでに3-5をクリアしているので合計で250\r
729             PAssert.That(() => sniffer1.ExMap.Achievement == 250, "ほかのマップの情報あり");\r
730         }\r
731 \r
732         /// <summary>\r
733         /// 1-6をクリアしたときの特別戦果を反映する\r
734         /// </summary>\r
735         [TestMethod]\r
736         public void ExMapMapNext()\r
737         {\r
738             var sniffer0 = new Sniffer();\r
739             sniffer0.ExMap.ClearClearStatus();\r
740             SniffLogFile(sniffer0, "eo_002");\r
741             PAssert.That(() => sniffer0.ExMap.Achievement == 75, "ほかのマップの情報なし");\r
742             var sniffer1 = new Sniffer();\r
743             SniffLogFile(sniffer1, "eo_002");\r
744             // 5-5以外クリアしているので合計で400\r
745             PAssert.That(() => sniffer1.ExMap.Achievement == 400, "ほかのマップの情報あり");\r
746         }\r
747 \r
748         /// <summary>\r
749         /// 編成で空き番号を使ったローテートを正しく反映する\r
750         /// </summary>\r
751         [TestMethod]\r
752         public void RotateFleetMember()\r
753         {\r
754             var sniffer = new Sniffer();\r
755             SniffLogFile(sniffer, "deck_001");\r
756             var result = sniffer.GetDeck(0);\r
757             PAssert.That(() => new[] {756, 17204, 6156, 28806, 1069, -1}.SequenceEqual(result));\r
758         }\r
759 \r
760         /// <summary>\r
761         /// ドラッグ&ドロップで離れた空き番号を使って編成をローテートする\r
762         /// </summary>\r
763         [TestMethod]\r
764         public void RotateFleetMemberWithDragAndDrop()\r
765         {\r
766             var sniffer = new Sniffer();\r
767             SniffLogFile(sniffer, "deck_005");\r
768             var result = sniffer.GetDeck(0);\r
769             PAssert.That(() => new[] {57391, 50, 24475, 113, -1, -1}.SequenceEqual(result));\r
770         }\r
771 \r
772         /// <summary>\r
773         /// 編成で艦隊に配置ずみの艦娘を交換する\r
774         /// </summary>\r
775         [TestMethod]\r
776         public void ExchangeFleetMember()\r
777         {\r
778             var sniffer = new Sniffer();\r
779 \r
780             SniffLogFile(sniffer, "deck_002");\r
781             var result0 = sniffer.GetDeck(0);\r
782             PAssert.That(() => new[] {1069, 6156, 756, 3223, -1, -1}.SequenceEqual(result0), "編成で艦隊内で艦娘と交換する");\r
783 \r
784             SniffLogFile(sniffer, "deck_003");\r
785             var result10 = sniffer.GetDeck(0);\r
786             var result11 = sniffer.GetDeck(1);\r
787             PAssert.That(() => new[] {1069, 6156, 14258, 3223, -1, -1}.SequenceEqual(result10) &&\r
788                                new[] {101, 4487, 756, 14613, 28806, -1}.SequenceEqual(result11), "002に続いて艦隊をまたがって交換する");\r
789 \r
790             SniffLogFile(sniffer, "deck_004");\r
791             var result20 = sniffer.GetDeck(0);\r
792             var result21 = sniffer.GetDeck(1);\r
793             PAssert.That(() => new[] {1069, 6156, 14258, 3223, 756, -1}.SequenceEqual(result20) &&\r
794                                new[] {101, 4487, 14613, 28806, -1, -1}.SequenceEqual(result21),\r
795                 "003に続いて空き番号にほかの艦隊の艦娘を配置する");\r
796         }\r
797 \r
798         /// <summary>\r
799         /// 編成展開を正しく反映する\r
800         /// </summary>\r
801         [TestMethod]\r
802         public void PresetSelect()\r
803         {\r
804             var sniffer = new Sniffer();\r
805             SniffLogFile(sniffer, "preset_001");\r
806             var result = sniffer.GetDeck(0);\r
807             PAssert.That(() => new[] {50510, 632, 39843, 113, 478, 47422}.SequenceEqual(result));\r
808         }\r
809 \r
810         /// <summary>\r
811         /// 拡張した編成記録枠にすぐに記録してもエラーにならない\r
812         /// </summary>\r
813         [TestMethod]\r
814         public void PresetExpand()\r
815         {\r
816             var sniffer = new Sniffer();\r
817             SniffLogFile(sniffer, "preset_002");\r
818         }\r
819 \r
820         /// <summary>\r
821         /// 装備の交換を正しく反映する\r
822         /// </summary>\r
823         [TestMethod]\r
824         public void SlotExchange()\r
825         {\r
826             var sniffer = new Sniffer();\r
827             SniffLogFile(sniffer, "slot_exchange_001");\r
828             var result = sniffer.GetShipStatuses(0)[0].Slot.Select(item => item.Id);\r
829             PAssert.That(() => new[] {26096, 30571, 77694, 61383, -1}.SequenceEqual(result));\r
830         }\r
831 \r
832         /// <summary>\r
833         /// 近代化改修の結果をすぐに反映する\r
834         /// </summary>\r
835         [TestMethod]\r
836         public void PowerupResult()\r
837         {\r
838             var sniffer = new Sniffer();\r
839             SniffLogFile(sniffer, "powerup_001");\r
840             PAssert.That(() => Math.Abs(sniffer.GetShipStatuses(0)[0].EffectiveFirepower - 30) < 0.0001);\r
841         }\r
842 \r
843         /// <summary>\r
844         /// 近代化改修が二重に行われた場合に対応する\r
845         /// </summary>\r
846         [TestMethod]\r
847         public void DuplicatedPowerup()\r
848         {\r
849             var sniffer = new Sniffer();\r
850             SniffLogFile(sniffer, "powerup_002");\r
851             PAssert.That(() => sniffer.Item.NowShips == 218);\r
852         }\r
853 \r
854         /// <summary>\r
855         /// 改修による資材の減少をすぐに反映する\r
856         /// </summary>\r
857         [TestMethod]\r
858         public void ConsumptionByRemodelSlot()\r
859         {\r
860             var sniffer = new Sniffer();\r
861             SniffLogFile(sniffer, "remodel_slot_001");\r
862             PAssert.That(() => sniffer.Material.Current\r
863                 .SequenceEqual(new[] {25292, 25570, 25244, 41113, 1405, 1525, 2137, 8}));\r
864         }\r
865 \r
866         /// <summary>\r
867         /// 装備の数を正しく数える\r
868         /// </summary>\r
869         [TestMethod]\r
870         public void CountItem()\r
871         {\r
872             var sniffer1 = new Sniffer();\r
873             SniffLogFile(sniffer1, "createitem_001");\r
874             PAssert.That(() => sniffer1.Item.NowEquips == 900);\r
875             var sniffer2 = new Sniffer();\r
876             SniffLogFile(sniffer2, "createship_001");\r
877             PAssert.That(() => sniffer2.Item.NowEquips == 904);\r
878         }\r
879 \r
880         /// <summary>\r
881         /// 解体された艦の装備数を全体の装備数から引く\r
882         /// </summary>\r
883         [TestMethod]\r
884         public void CountItemsOnDeletedShip()\r
885         {\r
886             var sniffer = new Sniffer();\r
887             SniffLogFile(sniffer, "destroyship_001");\r
888             PAssert.That(() => sniffer.Item.NowEquips == 879, "ドロップしたばかりの艦娘を解体する場合");\r
889         }\r
890 \r
891         /// <summary>\r
892         /// 装備数の超過を警告する\r
893         /// </summary>\r
894         [TestMethod]\r
895         public void WarnItemCount()\r
896         {\r
897             var sniffer1 = new Sniffer();\r
898             SniffLogFile(sniffer1, "item_count_001");\r
899             PAssert.That(() => sniffer1.Item.RingEquips, "出撃から母港に戻ったとき");\r
900             var sniffer2 = new Sniffer();\r
901             SniffLogFile(sniffer2, "item_count_002");\r
902             PAssert.That(() => sniffer2.Item.RingEquips, "ログインしたとき");\r
903         }\r
904 \r
905         /// <summary>\r
906         /// ドロップ艦のいる出撃から戻ったときに、slot_itemを受信する前にItemListを取得しても例外を出さない\r
907         /// </summary>\r
908         [TestMethod]\r
909         public void GetItemListBeforeReceivingSlotItem()\r
910         {\r
911             var sniffer = new Sniffer();\r
912             SniffLogFile(sniffer, "dropship_001");\r
913             PAssert.That(() => sniffer.ItemList[0].Holder.Id == 250);\r
914         }\r
915 \r
916         /// <summary>\r
917         /// 装備の所持者を設定する\r
918         /// </summary>\r
919         [TestMethod]\r
920         public void SetItemHolder()\r
921         {\r
922             var sniffer = new Sniffer();\r
923             SniffLogFile(sniffer, "itemholder_001");\r
924             var itemIds = new HashSet<int> {75298, 76572, 82725, 90213, 5910};\r
925             var items = sniffer.ItemList.Where(status => itemIds.Contains(status.Id));\r
926             PAssert.That(() => items.All(x => x.Holder.Id == 861));\r
927         }\r
928 \r
929         /// <summary>\r
930         /// 資材の変動を正しく反映する\r
931         /// </summary>\r
932         [TestMethod]\r
933         public void MaterialChanges()\r
934         {\r
935             var sniffer1 = new Sniffer();\r
936             var result1 = new List<int[]>();\r
937             SniffLogFile(sniffer1, "material_001", sn =>\r
938             {\r
939                 var cur = sn.Material.Current;\r
940                 if (result1.Count == 0)\r
941                 {\r
942                     result1.Add(cur);\r
943                 }\r
944                 else\r
945                 {\r
946                     if (!result1.Last().SequenceEqual(cur))\r
947                         result1.Add(cur);\r
948                 }\r
949             });\r
950             var expected1 = new List<int[]>\r
951             {\r
952                 new[] {0, 0, 0, 0, 0, 0, 0, 0},\r
953                 new[] {26178, 26742, 21196, 33750, 1426, 1574, 2185, 10},\r
954                 new[] {26178, 26842, 21226, 33750, 1426, 1574, 2185, 10},\r
955                 new[] {28951, 29493, 24945, 35580, 1426, 1574, 2185, 10},\r
956                 new[] {26074, 26616, 21068, 33700, 1426, 1572, 2183, 10},\r
957                 new[] {26171, 26721, 21175, 33750, 1426, 1574, 2185, 10},\r
958                 new[] {27023, 27829, 28136, 42404, 1404, 1521, 2142, 15},\r
959                 new[] {31208, 29819, 29714, 42345, 1407, 1530, 2155, 13},\r
960                 new[] {24595, 25353, 18900, 32025, 1427, 1576, 2187, 10},\r
961                 new[] {24515, 25353, 18749, 32025, 1427, 1575, 2187, 10},\r
962                 new[] {23463, 24964, 17284, 31765, 1427, 1572, 2187, 10},\r
963                 new[] {23463, 25064, 17314, 31765, 1427, 1572, 2187, 10}\r
964             };\r
965             PAssert.That(() => SequenceOfSequenceEqual(expected1, result1));\r
966 \r
967             var sniffer2 = new Sniffer();\r
968             var result2 = new List<int[]>();\r
969             SniffLogFile(sniffer2, "material_002", sn =>\r
970             {\r
971                 var cur = sn.Material.Current;\r
972                 if (result2.Count == 0)\r
973                 {\r
974                     result2.Add(cur);\r
975                 }\r
976                 else\r
977                 {\r
978                     if (!result2.Last().SequenceEqual(cur))\r
979                         result2.Add(cur);\r
980                 }\r
981             });\r
982             var expected2 = new List<int[]>\r
983             {\r
984                 new[] {0, 0, 0, 0, 0, 0, 0, 0},\r
985                 new[] {201649, 189713, 261490, 123227, 2743, 2828, 3000, 44},\r
986                 new[] {201649, 189714, 261491, 123227, 2743, 2828, 3000, 44},\r
987                 new[] {201650, 189718, 261500, 123227, 2743, 2828, 3000, 44}\r
988             };\r
989             PAssert.That(() => SequenceOfSequenceEqual(expected2, result2));\r
990         }\r
991 \r
992         /// <summary>\r
993         /// 基地航空隊における資材の変動を反映する\r
994         /// </summary>\r
995         [TestMethod]\r
996         public void MaterialChangesInAirCorps()\r
997         {\r
998             var sniffer3 = new Sniffer();\r
999             var result3 = new List<int[]>();\r
1000             SniffLogFile(sniffer3, "material_003", sn =>\r
1001             {\r
1002                 var cur = sn.Material.Current;\r
1003                 if (result3.Count == 0)\r
1004                 {\r
1005                     result3.Add(cur);\r
1006                 }\r
1007                 else\r
1008                 {\r
1009                     if (!result3.Last().SequenceEqual(cur))\r
1010                         result3.Add(cur);\r
1011                 }\r
1012             });\r
1013             var expected3 = new List<int[]>\r
1014             {\r
1015                 new[] {0, 0, 0, 0, 0, 0, 0, 0},\r
1016                 new[] {288194, 282623, 299496, 295958, 3000, 2968, 2997, 7},\r
1017                 new[] {288185, 282623, 299496, 295943, 3000, 2968, 2997, 7},\r
1018                 new[] {288161, 282623, 299496, 295903, 3000, 2968, 2997, 7},\r
1019             };\r
1020             PAssert.That(() => SequenceOfSequenceEqual(expected3, result3), "航空機の補充");\r
1021 \r
1022             var sniffer4 = new Sniffer();\r
1023             var result4 = new List<int[]>();\r
1024             SniffLogFile(sniffer4, "material_004", sn =>\r
1025             {\r
1026                 var cur = sn.Material.Current;\r
1027                 if (result4.Count == 0)\r
1028                 {\r
1029                     result4.Add(cur);\r
1030                 }\r
1031                 else\r
1032                 {\r
1033                     if (!result4.Last().SequenceEqual(cur))\r
1034                         result4.Add(cur);\r
1035                 }\r
1036             });\r
1037             var expected4 = new List<int[]>\r
1038             {\r
1039                 new[] {0, 0, 0, 0, 0, 0, 0, 0},\r
1040                 new[] {261012, 252252, 298492, 279622, 3000, 2842, 3000, 22},\r
1041                 new[] {261012, 252252, 298492, 279538, 3000, 2842, 3000, 22},\r
1042                 new[] {261012, 252252, 298492, 279454, 3000, 2842, 3000, 22},\r
1043             };\r
1044             PAssert.That(() => SequenceOfSequenceEqual(expected4, result4), "航空機の配備");\r
1045         }\r
1046 \r
1047         private bool SequenceOfSequenceEqual<T>(IEnumerable<IEnumerable<T>> a, IEnumerable<IEnumerable<T>> b)\r
1048         {\r
1049             var aa = a.ToArray();\r
1050             var bb = b.ToArray();\r
1051             if (aa.Length != bb.Length)\r
1052                 return false;\r
1053             return aa.Zip(bb, (x, y) => x.SequenceEqual(y)).All(x => x);\r
1054         }\r
1055 \r
1056         /// <summary>\r
1057         /// 修復時間が1分以内の艦娘が入渠する\r
1058         /// </summary>\r
1059         [TestMethod]\r
1060         public void NyukyoLessThanOrEqualTo1Min()\r
1061         {\r
1062             var sniffer = new Sniffer();\r
1063             SniffLogFile(sniffer, "nyukyo_001");\r
1064             PAssert.That(() => sniffer.RepairList.Length == 1);\r
1065         }\r
1066 \r
1067         /// <summary>\r
1068         /// 海域ゲージ情報を作成する\r
1069         /// </summary>\r
1070         [TestMethod]\r
1071         public void MapInfo()\r
1072         {\r
1073             var sniffer = new Sniffer();\r
1074             SniffLogFile(sniffer, "mapinfo_001");\r
1075             PAssert.That(() => sniffer.MiscText ==\r
1076                                "[海域ゲージ]\r\n" +\r
1077                                "1-6 : 撃破 3/7\r\n5-5 : 撃破 0/5\r\n6-3 : 撃破 0/4\r\n" +\r
1078                                "31-1 : HP 0/750\r\n31-2 : HP 0/1050\r\n31-3 : HP 0/2100\r\n31-4 : HP 0/3500\r\n31-5 : HP 1/2450\r\n",\r
1079                 "最初の海域ゲージ情報");\r
1080             SniffLogFile(sniffer, "mapinfo_002");\r
1081             PAssert.That(() => sniffer.MiscText ==\r
1082                                "[海域ゲージ情報]\r\n 海域選択画面に進むと表示します。\r\n[演習情報]\r\n 演習相手を選ぶと表示します。",\r
1083                 "戦闘から戻ったら案内を表示");\r
1084             SniffLogFile(sniffer, "mapinfo_003");\r
1085             PAssert.That(() => sniffer.MiscText ==\r
1086                                "[海域ゲージ]\r\n" +\r
1087                                "1-6 : 撃破 4/7\r\n5-5 : 撃破 0/5\r\n6-3 : 撃破 0/4\r\n" +\r
1088                                "31-1 : HP 0/750\r\n31-2 : HP 0/1050\r\n31-3 : HP 0/2100\r\n31-4 : HP 0/3500\r\n31-5 : HP 1/2450\r\n",\r
1089                 "更新された海域ゲージ情報");\r
1090         }\r
1091 \r
1092         /// <summary>\r
1093         /// 演習相手の情報を作成する\r
1094         /// </summary>\r
1095         [TestMethod]\r
1096         public void PractiveEnemyInfo()\r
1097         {\r
1098             var sniffer = new Sniffer();\r
1099             SniffLogFile(sniffer, "practice_enemyinfo_001");\r
1100             PAssert.That(() => sniffer.MiscText ==\r
1101                                "[演習情報]\r\n敵艦隊名 : 大銀河地球連邦 第7艦隊\r\n獲得経験値 : 570\r\nS勝利 : 684",\r
1102                 "演習相手の情報");\r
1103             SniffLogFile(sniffer, "practice_enemyinfo_002");\r
1104             PAssert.That(() => sniffer.MiscText ==\r
1105                                "[海域ゲージ情報]\r\n 海域選択画面に進むと表示します。\r\n[演習情報]\r\n 演習相手を選ぶと表示します。",\r
1106                 "演習から戻ったら案内を表示");\r
1107         }\r
1108     }\r
1109 }