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 KancolleSniffer.Model;
\r
18 using ExpressionToCodeLib;
\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
186 public void NightToDay()
\r
188 var sniffer = new Sniffer();
\r
189 SniffLogFile(sniffer, "nighttoday_001");
\r
190 PAssert.That(() => !sniffer.IsBattleResultError);
\r
194 /// 第二期の開幕夜戦のセル情報を表示する
\r
197 // ReSharper disable once InconsistentNaming
\r
198 public void SpMidnightIn2ndSequence()
\r
200 var sniffer = new Sniffer();
\r
201 SniffLogFile(sniffer, "sp_midnight_003");
\r
202 PAssert.That(() => sniffer.CellInfo.Current == "1戦目(夜戦)");
\r
209 public void EscapeWithoutEscort()
\r
211 var sniffer = new Sniffer();
\r
212 SniffLogFile(sniffer, "escape_002");
\r
213 PAssert.That(() => sniffer.Fleets[2].Ships[1].Escaped);
\r
214 PAssert.That(() => !sniffer.IsBattleResultError);
\r
218 /// 出撃時に大破している艦娘がいたら警告する
\r
221 public void DamagedShipWarningOnMapStart()
\r
223 var sniffer = new Sniffer();
\r
224 SniffLogFile(sniffer, "mapstart_001");
\r
225 PAssert.That(() => sniffer.BadlyDamagedShips.SequenceEqual(new[] {"大潮"}));
\r
229 /// 連合艦隊に大破艦がいる状態で第3艦隊が出撃したときに警告しない
\r
232 public void NotWarnDamagedShipInCombinedFleetOnMapStart()
\r
234 var sniffer = new Sniffer();
\r
235 SniffLogFile(sniffer, "mapstart_002");
\r
236 PAssert.That(() => !sniffer.BadlyDamagedShips.Any());
\r
240 /// 連合艦隊の第二旗艦の大破を警告しない
\r
243 public void NotWarnDamaged1StShipInGuardFleet()
\r
245 var sniffer = new Sniffer();
\r
246 SniffLogFile(sniffer, "combined_battle_004");
\r
247 PAssert.That(() => !sniffer.BadlyDamagedShips.Any());
\r
251 /// Nelson Touchに対応する
\r
254 public void NelsonTouch()
\r
256 var sniffer = new Sniffer();
\r
257 SniffLogFile(sniffer, "nelsontouch_001");
\r
258 PAssert.That(() => !sniffer.IsBattleResultError);
\r
259 PAssert.That(() => sniffer.Battle.Result.Friend.Main[0].SpecialAttack == ShipStatus.Attack.Fire);
\r
260 PAssert.That(() => sniffer.Fleets[0].Ships[0].SpecialAttack == ShipStatus.Attack.Fired);
\r
261 // ship_deckでフラグを引き継ぐ
\r
262 SniffLogFile(sniffer, "nelsontouch_002");
\r
263 PAssert.That(() => sniffer.Fleets[0].Ships[0].SpecialAttack == ShipStatus.Attack.Fired);
\r
265 var night = new Sniffer();
\r
266 SniffLogFile(night, "nelsontouch_003");
\r
267 PAssert.That(() => night.Battle.Result.Friend.Main[0].SpecialAttack == ShipStatus.Attack.Fire);
\r
271 // ReSharper disable once IdentifierTypo
\r
272 public void NagatoSpecial()
\r
274 var sniffer = new Sniffer();
\r
275 SniffLogFile(sniffer, "nagatospecial_001");
\r
276 PAssert.That(() => !sniffer.IsBattleResultError);
\r
277 PAssert.That(() => sniffer.Battle.Result.Friend.Main[0].SpecialAttack == ShipStatus.Attack.Fire);
\r
278 PAssert.That(() => sniffer.Fleets[0].Ships[0].SpecialAttack == ShipStatus.Attack.Fired);
\r
285 public void LdShooting()
\r
287 var sniffer = new Sniffer();
\r
288 SniffLogFile(sniffer, "ld_shooting_001");
\r
289 PAssert.That(() => !sniffer.IsBattleResultError);
\r