using KancolleSniffer.Model; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace KancolleSniffer.Test { [TestClass] public class ShipStatusTest { [TestClass] public class OpeningSubmarineAttack { private static readonly ItemStatus 三式水中探信儀 = new ItemStatus { Id = 1, Spec = new ItemSpec { Id = 47, Name = "三式水中探信儀", Type = 14, AntiSubmarine = 10 } }; /// /// 通常の先制対潜 /// [TestMethod] public void CheckStandardCase() { var ship = new ShipStatus { Spec = new ShipSpec {ShipType = 3}, Slot = new[] {三式水中探信儀}, AntiSubmarine = 99 }; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack, "対潜不足"); ship.AntiSubmarine = 100; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); ship.Slot = new[] {new ItemStatus()}; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack, "ソナー未搭載"); } private static readonly ItemStatus 九五式爆雷 = new ItemStatus { Id = 1, Spec = new ItemSpec { Id = 47, Name = "九五式爆雷", Type = 15, AntiSubmarine = 4 } }; /// /// 海防艦の先制対潜 /// [TestMethod] public void CheckCoastGuard() { var ship = new ShipStatus { Spec = new ShipSpec {ShipType = 1}, Slot = new[] {九五式爆雷}, AntiSubmarine = 74 }; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack, "対潜不足"); ship.AntiSubmarine = 75; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); ship.Slot[0].Spec.AntiSubmarine = 3; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack, "装備対潜不足"); } /// /// 無条件で先制対潜が可能 /// [DataTestMethod] [DataRow("五十鈴改二")] [DataRow("龍田改二")] [DataRow("Jervis改")] [DataRow("Samuel B.Roberts改")] [DataRow("Johnston")] [DataRow("Johnston改")] public void CheckNonConditional(string name) { var ship = new ShipStatus { Spec = new ShipSpec { Name = name } }; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); } private static readonly ItemStatus 流星改 = new ItemStatus { Id = 1, Spec = new ItemSpec { Id = 52, Name = "流星改", Type = 8, AntiSubmarine = 3 } }; private static readonly ItemStatus カ号観測機 = new ItemStatus { Id = 1, Spec = new ItemSpec { Id = 69, Name = "カ号観測機", Type = 25, AntiSubmarine = 9 } }; private static readonly ItemStatus 三式指揮連絡機対潜 = new ItemStatus { Id = 1, Spec = new ItemSpec { Id = 70, Name = "三式指揮連絡機(対潜)", Type = 26, AntiSubmarine = 7 } }; private static readonly ItemStatus 九九式艦爆 = new ItemStatus { Id = 1, Spec = new ItemSpec { Id = 23, Name = "九九式艦爆", Type = 7, AntiSubmarine = 3 } }; /// /// 大鷹改・改二、神鷹改・改二 /// [DataTestMethod] [DataRow("大鷹改")] [DataRow("大鷹改二")] [DataRow("神鷹改")] [DataRow("神鷹改二")] public void CheckSpecialEscortCarrier(string name) { var ship = new ShipStatus { Spec = new ShipSpec { Name = name }, Slot = new ItemStatus[0] }; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack); ship.Slot = new[] {流星改}; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); ship.Slot = new[] {カ号観測機}; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); ship.Slot = new[] {三式指揮連絡機対潜}; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); ship.Slot = new[] {九九式艦爆}; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); } private static readonly ItemStatus 水中聴音機零式 = new ItemStatus { Id = 1, Spec = new ItemSpec { Id = 132, Name = "水中聴音機零式", Type = 40, AntiSubmarine = 11 } }; private static readonly ItemStatus 九七式艦攻九三一空 = new ItemStatus { Id = 1, Spec = new ItemSpec { Id = 82, Name = "九七式艦攻(九三一空)", Type = 8, AntiSubmarine = 7 } }; [DataTestMethod] [DataRow("大鷹")] [DataRow("Gambier Bay")] [DataRow("Gambier Bay改")] [DataRow("瑞鳳改二乙")] [DataRow("神鷹")] public void CheckEscortCarrierLevel50(string name) { var ship = new ShipStatus { Spec = new ShipSpec { Name = name }, Slot = new ItemStatus[0] }; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack); ship.AntiSubmarine = 49; ship.Slot = new[] { 水中聴音機零式, 九七式艦攻九三一空 }; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack); ship.AntiSubmarine = 50; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); ship.Slot = new[] { 水中聴音機零式, 三式指揮連絡機対潜 }; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); ship.Slot = new[] { 水中聴音機零式, カ号観測機 }; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); } [DataTestMethod] [DataRow("大鷹")] [DataRow("Gambier Bay")] [DataRow("Gambier Bay改")] [DataRow("瑞鳳改二乙")] [DataRow("神鷹")] public void CheckEscortCarrierLevel65(string name) { var ship = new ShipStatus { Spec = new ShipSpec { Name = name }, Slot = new ItemStatus[0] }; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack); ship.AntiSubmarine = 64; ship.Slot = new[] { 九七式艦攻九三一空 }; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack); ship.AntiSubmarine = 65; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); ship.Slot = new[] { カ号観測機 }; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); ship.Slot = new[] { 三式指揮連絡機対潜 }; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); } [DataTestMethod] [DataRow("大鷹")] [DataRow("Gambier Bay")] [DataRow("Gambier Bay改")] [DataRow("瑞鳳改二乙")] [DataRow("神鷹")] public void CheckEscortCarrierLevel100(string name) { var ship = new ShipStatus { Spec = new ShipSpec { Name = name }, Slot = new ItemStatus[0] }; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack); ship.AntiSubmarine = 100; ship.Slot = new[] { 水中聴音機零式, カ号観測機 }; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack); ship.Slot = new[] { 水中聴音機零式, 流星改 }; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); ship.AntiSubmarine = 99; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack); ship.AntiSubmarine = 100; ship.Slot = new[] { 水中聴音機零式, 九九式艦爆 }; Assert.IsTrue(ship.CanOpeningAntiSubmarineAttack); } [TestMethod] public void 瑞鳳改二() { CheckEscortCarrierLevel50("瑞鳳改二"); var ship = new ShipStatus { Spec = new ShipSpec { Name = "瑞鳳改二" }, Slot = new ItemStatus[0] }; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack); ship.AntiSubmarine = 65; ship.Slot = new[] { カ号観測機 }; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack); ship.AntiSubmarine = 100; ship.Slot = new[] { 水中聴音機零式, 流星改 }; Assert.IsFalse(ship.CanOpeningAntiSubmarineAttack); } } } }