1 // Copyright (C) 2018 Kazuhiro Fujieda <fujieda@users.osdn.me>
\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
7 // http://www.apache.org/licenses/LICENSE-2.0
\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
15 using System.Collections.Generic;
\r
17 using ExpressionToCodeLib;
\r
18 using KancolleSniffer.Model;
\r
19 using Microsoft.VisualStudio.TestTools.UnitTesting;
\r
21 namespace KancolleSniffer.Test
\r
23 using Sniffer = SnifferTest.TestingSniffer;
\r
24 using static SnifferTest;
\r
27 public class BattleTest
\r
30 public static void Initialize(TestContext context)
\r
32 ExpressionToCodeConfiguration.GlobalAssertionConfiguration = ExpressionToCodeConfiguration
\r
33 .GlobalAssertionConfiguration.WithPrintedListLengthLimit(200).WithMaximumValueLength(1000);
\r
37 /// 4-2-1で開幕対潜雷撃を含む戦闘を行う
\r
40 public void NormalBattleWithVariousTypesOfAttack()
\r
42 var sniffer = new Sniffer();
\r
43 SniffLogFile(sniffer, "battle_001");
\r
44 PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.A);
\r
45 AssertEqualBattleResult(sniffer,
\r
46 new[] {57, 66, 50, 65, 40, 42}, new[] {34, 5, 0, 0, 0, 0});
\r
49 private void AssertEqualBattleResult(Sniffer sniffer, IEnumerable<int> expected, IEnumerable<int> enemy,
\r
52 var result = sniffer.Fleets[0].Ships.Select(s => s.NowHp);
\r
53 PAssert.That(() => expected.SequenceEqual(result), msg);
\r
54 var enemyResult = sniffer.Battle.Result.Enemy.Main.Select(s => s.NowHp);
\r
55 PAssert.That(() => enemy.SequenceEqual(enemyResult), msg);
\r
59 /// 開幕夜戦で潜水艦同士がお見合いする
\r
62 public void SpMidnightWithoutBattle()
\r
64 var sniffer = new Sniffer();
\r
65 SniffLogFile(sniffer, "sp_midnight_001");
\r
66 PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.D);
\r
70 /// 夜戦で戦艦が攻撃すると一回で三発分のデータが来る
\r
71 /// そのうち存在しない攻撃はターゲット、ダメージともに-1になる
\r
74 public void BattleShipAttackInMidnight()
\r
76 var sniffer = new Sniffer();
\r
77 SniffLogFile(sniffer, "midnight_001");
\r
78 PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.S);
\r
82 /// 7隻編成の戦闘で7隻目が攻撃される
\r
85 public void Ship7Battle()
\r
87 var sniffer = new Sniffer();
\r
88 SniffLogFile(sniffer, "ship7battle_001");
\r
89 PAssert.That(() => sniffer.Battle.ResultRank == BattleResultRank.P);
\r
93 /// 演習のあとのportで戦闘結果の検証を行わない
\r
96 public void NotVerifyBattleResultAfterPractice()
\r
98 var sniffer = new Sniffer();
\r
99 SniffLogFile(sniffer, "practice_001");
\r
100 PAssert.That(() => !sniffer.IsBattleResultError);
\r
107 public void NotTriggerDameConInPractice()
\r
109 var sniffer = new Sniffer();
\r
110 SniffLogFile(sniffer, "practice_002");
\r
111 PAssert.That(() => !sniffer.IsBattleResultError);
\r
115 /// 演習中の艦を要修復リストに載せない
\r
118 public void DamagedShipListNotShowShipInPractice()
\r
120 var sniffer = new Sniffer();
\r
121 SniffLogFile(sniffer, "practice_003");
\r
122 PAssert.That(() => sniffer.RepairList.Select(s => s.Name).SequenceEqual(new[] {"飛龍改二", "翔鶴改二"}));
\r
129 public void OpeningTorpedoInCombinedBattle()
\r
131 var sniffer = new Sniffer();
\r
132 SniffLogFile(sniffer, "combined_battle_001");
\r
133 PAssert.That(() => !sniffer.IsBattleResultError);
\r
140 public void ClosingTorpedoInCombinedBattle()
\r
142 var sniffer = new Sniffer();
\r
143 SniffLogFile(sniffer, "combined_battle_002");
\r
144 PAssert.That(() => !sniffer.IsBattleResultError);
\r
148 /// 第一が6隻未満の連合艦隊で戦闘する
\r
151 public void SmallCombinedFleetBattle()
\r
153 var sniffer = new Sniffer();
\r
154 SniffLogFile(sniffer, "combined_battle_003");
\r
155 PAssert.That(() => !sniffer.IsBattleResultError);
\r
162 public void EscapeWithEscort()
\r
164 var sniffer = new Sniffer();
\r
165 SniffLogFile(sniffer, "escape_001");
\r
166 var fleets = sniffer.Fleets;
\r
167 PAssert.That(() => fleets[0].Ships[5].Escaped &&
\r
168 fleets[1].Ships[2].Escaped);
\r
175 public void SpMidnightSupportAttack()
\r
177 var sniffer = new Sniffer();
\r
178 SniffLogFile(sniffer, "sp_midnight_002");
\r
179 PAssert.That(() => !sniffer.IsBattleResultError);
\r
180 PAssert.That(() => sniffer.Battle.SupportType == 2);
\r
187 public void NightToDay()
\r
189 var sniffer = new Sniffer();
\r
190 SniffLogFile(sniffer, "nighttoday_001");
\r
191 PAssert.That(() => !sniffer.IsBattleResultError);
\r
195 /// 第二期の開幕夜戦のセル情報を表示する
\r
198 // ReSharper disable once InconsistentNaming
\r
199 public void SpMidnightIn2ndSequence()
\r
201 var sniffer = new Sniffer();
\r
202 SniffLogFile(sniffer, "sp_midnight_003");
\r
203 PAssert.That(() => sniffer.CellInfo.Current == "1戦目(夜戦)");
\r
210 public void EscapeWithoutEscort()
\r
212 var sniffer = new Sniffer();
\r
213 SniffLogFile(sniffer, "escape_002");
\r
214 PAssert.That(() => sniffer.Fleets[2].Ships[1].Escaped);
\r
215 PAssert.That(() => !sniffer.IsBattleResultError);
\r
219 /// 出撃時に大破している艦娘がいたら警告する
\r
222 public void DamagedShipWarningOnMapStart()
\r
224 var sniffer = new Sniffer();
\r
225 SniffLogFile(sniffer, "mapstart_001");
\r
226 PAssert.That(() => sniffer.BadlyDamagedShips.SequenceEqual(new[] {"大潮"}));
\r
230 /// 連合艦隊に大破艦がいる状態で第3艦隊が出撃したときに警告しない
\r
233 public void NotWarnDamagedShipInCombinedFleetOnMapStart()
\r
235 var sniffer = new Sniffer();
\r
236 SniffLogFile(sniffer, "mapstart_002");
\r
237 PAssert.That(() => !sniffer.BadlyDamagedShips.Any());
\r
241 /// 連合艦隊の第二旗艦の大破を警告しない
\r
244 public void NotWarnDamaged1StShipInGuardFleet()
\r
246 var sniffer = new Sniffer();
\r
247 SniffLogFile(sniffer, "combined_battle_004");
\r
248 PAssert.That(() => !sniffer.BadlyDamagedShips.Any());
\r
252 /// Nelson Touchに対応する
\r
255 public void NelsonTouch()
\r
257 var sniffer = new Sniffer();
\r
258 SniffLogFile(sniffer, "nelsontouch_001");
\r
259 PAssert.That(() => !sniffer.IsBattleResultError);
\r
260 PAssert.That(() => sniffer.Battle.Result.Friend.Main[0].SpecialAttack == ShipStatus.Attack.Fire);
\r
261 PAssert.That(() => sniffer.Fleets[0].Ships[0].SpecialAttack == ShipStatus.Attack.Fired);
\r
262 // ship_deckでフラグを引き継ぐ
\r
263 SniffLogFile(sniffer, "nelsontouch_002");
\r
264 PAssert.That(() => sniffer.Fleets[0].Ships[0].SpecialAttack == ShipStatus.Attack.Fired);
\r
266 var night = new Sniffer();
\r
267 SniffLogFile(night, "nelsontouch_003");
\r
268 PAssert.That(() => night.Battle.Result.Friend.Main[0].SpecialAttack == ShipStatus.Attack.Fire);
\r
275 // ReSharper disable once IdentifierTypo
\r
276 public void NagatoSpecial()
\r
278 var sniffer = new Sniffer();
\r
279 SniffLogFile(sniffer, "nagatospecial_001");
\r
280 PAssert.That(() => !sniffer.IsBattleResultError);
\r
281 PAssert.That(() => sniffer.Battle.Result.Friend.Main[0].SpecialAttack == ShipStatus.Attack.Fire);
\r
282 PAssert.That(() => sniffer.Fleets[0].Ships[0].SpecialAttack == ShipStatus.Attack.Fired);
\r
289 // ReSharper disable once IdentifierTypo
\r
290 public void MutsuSpecial()
\r
292 var sniffer = new Sniffer();
\r
293 SniffLogFile(sniffer, "mutsuspecial_001");
\r
294 PAssert.That(() => !sniffer.IsBattleResultError);
\r
295 PAssert.That(() => sniffer.Battle.Result.Friend.Main[0].SpecialAttack == ShipStatus.Attack.Fire);
\r
296 PAssert.That(() => sniffer.Fleets[0].Ships[0].SpecialAttack == ShipStatus.Attack.Fired);
\r
303 public void LdShooting()
\r
305 var sniffer = new Sniffer();
\r
306 SniffLogFile(sniffer, "ld_shooting_001");
\r
307 PAssert.That(() => !sniffer.IsBattleResultError);
\r
311 /// 敵連合艦隊の護衛の装備を正しく読み取る
\r
314 public void EnemyGuardSlot()
\r
316 var sniffer = new Sniffer();
\r
317 SniffLogFile(sniffer, "enemy_combined_001");
\r
318 PAssert.That(() => sniffer.Battle.Result.Enemy.Guard[0].Slot[0].Spec.Id == 506);
\r
325 public void EnemyFighterPower()
\r
327 var sniffer = new Sniffer();
\r
328 SniffLogFile(sniffer, "enemy_combined_001");
\r
329 var fp = sniffer.Battle.EnemyFighterPower;
\r
330 PAssert.That(() => fp.AirCombat == 209 && fp.Interception == 212);
\r
337 public void NotWarnDamagedShipWithDamageControl()
\r
339 var sniffer = new Sniffer();
\r
340 SniffLogFile(sniffer, "damecon_advance_001");
\r
341 PAssert.That(() => sniffer.BadlyDamagedShips.Length == 0);
\r
348 public void AirRaidBattleWithInterceptor()
\r
350 var sniffer = new Sniffer();
\r
351 SniffLogFile(sniffer, "airraid_battle_001");
\r
352 var battle = sniffer.Battle;
\r
353 Assert.AreEqual(BattleState.AirRaid, battle.BattleState);
\r
354 Assert.AreEqual(2, battle.AirControlLevel);
\r
355 Assert.AreEqual(425, battle.FighterPower.Min);
\r
356 Assert.AreEqual(231, battle.EnemyFighterPower.AirCombat);
\r
357 Assert.AreEqual(BattleResultRank.S, battle.ResultRank);
\r
358 var ships = battle.Result.Friend.Main;
\r
359 Assert.IsTrue(new[] {200, 200, 200}.SequenceEqual(ships.Select(ship => ship.NowHp)));
\r
360 Assert.IsTrue(new[] {"基地航空隊1", "基地航空隊2", "基地航空隊3"}.SequenceEqual(ships.Select(ship => ship.Name)));
\r
362 new[] {"烈風改(三五二空/熟練)", "雷電", "雷電", "烈風改"}.SequenceEqual(ships[2].Slot.Select(item => item.Spec.Name)));
\r
363 Assert.IsTrue(new[]{18, 18, 18, 18}.SequenceEqual(ships[2].OnSlot));
\r
370 public void AirRaidBattleWithoutInterceptor()
\r
372 var sniffer = new Sniffer();
\r
373 SniffLogFile(sniffer, "airraid_battle_002");
\r
374 var battle = sniffer.Battle;
\r
375 Assert.AreEqual(BattleState.AirRaid, battle.BattleState);
\r
376 Assert.AreEqual(4, battle.AirControlLevel);
\r
377 Assert.AreEqual(0, battle.FighterPower.Min);
\r
378 Assert.AreEqual(231, battle.EnemyFighterPower.AirCombat);
\r
379 Assert.AreEqual(BattleResultRank.B, battle.ResultRank);
\r
380 var ships = battle.Result.Friend.Main;
\r
381 Assert.IsTrue(new[] {82, 174, 147}.SequenceEqual(ships.Select(ship => ship.NowHp)));
\r
388 public void AirRaidBattleBeforeBoss()
\r
390 var sniffer = new Sniffer();
\r
391 SniffLogFile(sniffer, "airraid_battle_004");
\r
392 var battle = sniffer.Battle;
\r
393 Assert.AreEqual(BattleState.Result, battle.BattleState);
\r
394 Assert.AreEqual(0, sniffer.BadlyDamagedShips.Length);
\r
401 public void AnchorageRepair()
\r
403 var sniffer = new Sniffer();
\r
404 SniffLogFile(sniffer, "anchorage_repair_001");
\r
405 PAssert.That(() => !sniffer.IsBattleResultError);
\r