OSDN Git Service

歴戦「第十方面艦隊」、全力出撃!のカウンターに編成チェックがないのを直す
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer.Test / QuestCounterTest.cs
index d1ec95b..d93ddf9 100644 (file)
@@ -13,6 +13,7 @@
 // limitations under the License.\r
 \r
 using System;\r
+using System.Collections.Generic;\r
 using System.Linq;\r
 using DynaJson;\r
 using ExpressionToCodeLib;\r
@@ -166,6 +167,7 @@ namespace KancolleSniffer.Test
                     new QuestCount {Id = 872, NowArray = new[] {1, 1, 1, 1}},\r
                     new QuestCount {Id = 284, NowArray = new[] {1, 1, 1, 1}},\r
                     new QuestCount {Id = 226, Now = 2},\r
+                    new QuestCount {Id = 434, NowArray = new[] {1, 0, 1, 0, 1}},\r
                     new QuestCount {Id = 436, NowArray = new[] {1, 0, 1, 1, 1}},\r
                     new QuestCount {Id = 437, NowArray = new[] {1, 0, 1, 1}},\r
                     new QuestCount {Id = 438, NowArray = new[] {1, 0, 1, 1}},\r
@@ -185,8 +187,8 @@ namespace KancolleSniffer.Test
                 new {api_id = 10, api_name = "強行偵察任務"},\r
                 new {api_id = 11, api_name = "ボーキサイト輸送任務"},\r
                 new {api_id = 40, api_name = "水上機前線輸送"},\r
+                new {api_id = 41, api_name = "ブルネイ泊地沖哨戒"},\r
                 new {api_id = 46, api_name = "南西海域戦闘哨戒"},\r
-                new {api_id = 71, api_name = "ブルネイ泊地沖哨戒"},\r
                 new {api_id = 100, api_name = "兵站強化任務"},\r
                 new {api_id = 101, api_name = "海峡警備行動"},\r
                 new {api_id = 102, api_name = "長時間対潜警戒"},\r
@@ -236,6 +238,9 @@ namespace KancolleSniffer.Test
             var q226 = status.QuestCountList.First(q => q.Id == 226);\r
             Assert.AreEqual("2/5", q226.ToString());\r
             Assert.AreEqual("", q226.ToToolTip());\r
+            var q434 = status.QuestCountList.First(q => q.Id == 434);\r
+            Assert.AreEqual("1\u200a0\u200a1\u200a0\u200a1", q434.ToString());\r
+            Assert.AreEqual("警備任務1 海上護衛任務0 兵站強化任務1 海峡警備行動0 タンカー護衛任務1", q434.ToToolTip());\r
             var q436 = status.QuestCountList.First(q => q.Id == 436);\r
             Assert.AreEqual("1\u200a0\u200a1\u200a1\u200a1", q436.ToString());\r
             Assert.AreEqual("練習航海1 長距離練習航海0 警備任務1 対潜警戒任務1 強行偵察任務1", q436.ToToolTip());\r
@@ -244,13 +249,13 @@ namespace KancolleSniffer.Test
             Assert.AreEqual("対潜警戒任務1 小笠原沖哨戒線0 小笠原沖戦闘哨戒1 南西方面航空偵察作戦1", q437.ToToolTip());\r
             var q438 = status.QuestCountList.First(q => q.Id == 438);\r
             Assert.AreEqual("1\u200a0\u200a1\u200a1", q438.ToString());\r
-            Assert.AreEqual("対æ½\9cè­¦æ\88\92ä»»å\8b\991 å\85µç«\99å¼·å\8c\96任務0 タンカー護衛任務1 南西諸島捜索撃滅戦1", q438.ToToolTip());\r
+            Assert.AreEqual("å\85µç«\99å¼·å\8c\96ä»»å\8b\991 å¯¾æ½\9cè­¦æ\88\92任務0 タンカー護衛任務1 南西諸島捜索撃滅戦1", q438.ToToolTip());\r
             var q439 = status.QuestCountList.First(q => q.Id == 439);\r
             Assert.AreEqual("1\u200a0\u200a1\u200a1", q439.ToString());\r
             Assert.AreEqual("海上護衛任務1 兵站強化任務0 ボーキサイト輸送任務1 南西方面航空偵察作戦1", q439.ToToolTip());\r
             var q440 = status.QuestCountList.First(q => q.Id == 440);\r
             Assert.AreEqual("1\u200a0\u200a1\u200a1\u200a1", q440.ToString());\r
-            Assert.AreEqual("海上護衛任務1 ブルネイ泊地沖哨戒0 南西海域戦闘哨戒1 水上機前線輸送1 強行鼠輸送作戦1", q440.ToToolTip());\r
+            Assert.AreEqual("ブルネイ泊地沖哨戒1 海上護衛任務0 水上機前線輸送1 強行鼠輸送作戦1 南西海域戦闘哨戒1", q440.ToToolTip());\r
         }\r
     }\r
 \r
@@ -339,7 +344,8 @@ namespace KancolleSniffer.Test
 \r
 \r
         private BattleInfo _battleInfo;\r
-        private ItemInfo _itemInfo;\r
+        private ItemInventory _itemInventory;\r
+        private ShipInventory _shipInventory;\r
         private QuestInfo _questInfo;\r
         private QuestCounter _questCounter;\r
 \r
@@ -347,9 +353,10 @@ namespace KancolleSniffer.Test
         public void Initialize()\r
         {\r
             _battleInfo = new BattleInfo(null, null, null);\r
-            _itemInfo = new ItemInfo(new ItemMaster(), new ItemInventory());\r
+            _itemInventory = new ItemInventory();\r
+            _shipInventory = new ShipInventory();\r
             _questInfo = new QuestInfo(new QuestCountList(), () => new DateTime(2015, 1, 1));\r
-            _questCounter = new QuestCounter(_questInfo, _itemInfo, _battleInfo);\r
+            _questCounter = new QuestCounter(_questInfo, _itemInventory, _shipInventory, _battleInfo);\r
         }\r
 \r
         /// <summary>\r
@@ -763,6 +770,36 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// 840: 【節分任務】令和三年節分作戦\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_840()\r
+        {\r
+            var count = InjectQuest(840);\r
+\r
+            _battleInfo.InjectResultStatus(\r
+                ShipStatusList(7, 2, 1), new ShipStatus[0],\r
+                new ShipStatus[0], new ShipStatus[0]);\r
+\r
+            InjectMapNext(21, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0}));\r
+            _battleInfo.Result.Friend.Main = ShipStatusList(7, 2, 1, 1);\r
+            InjectBattleResult("B");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0}));\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0}));\r
+\r
+            _battleInfo.Result.Friend.Main = ShipStatusList(3, 2, 1, 1);\r
+            InjectMapNext(22, 5);\r
+            InjectBattleResult("A");\r
+            _battleInfo.Result.Friend.Main = ShipStatusList(21, 2, 1, 1);\r
+            InjectMapNext(23, 5);\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
         /// 822: 沖ノ島海域迎撃戦\r
         /// 854: 戦果拡張任務!「Z作戦」前段作戦\r
         /// </summary>\r
@@ -1363,6 +1400,43 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// 928: 歴戦「第十方面艦隊」、全力出撃!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void BattleResult_928()\r
+        {\r
+            var count = InjectQuest(928);\r
+            _battleInfo.InjectResultStatus(\r
+                new[]\r
+                {\r
+                    ShipStatus("羽黒改二"), ShipStatus("那智"), ShipStatus(1), ShipStatus(1), ShipStatus(1), ShipStatus(1)\r
+                },\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+\r
+            InjectMapNext(732, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0}));\r
+\r
+            _battleInfo.Result.Friend.Main[1] = ShipStatus("妙高");\r
+            InjectBattleResult("A");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0}));\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0}));\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("妙高");\r
+            _battleInfo.Result.Friend.Main[1] = ShipStatus("高雄");\r
+            InjectMapNext(722, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 0}));\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("神風");\r
+            _battleInfo.Result.Friend.Main[1] = ShipStatus("高雄");\r
+            InjectMapNext(42, 5);\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
         /// 280と854以降を同時に遂行していると854以降がカウントされないことがある\r
         /// </summary>\r
         [TestMethod]\r
@@ -1454,6 +1528,29 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// 329: 【節分任務】節分演習!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void PracticeResult_329()\r
+        {\r
+            var count = InjectQuest(329);\r
+\r
+            _battleInfo.InjectResultStatus(\r
+                ShipStatusList(3, 2),\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            InjectPracticeResult("S");\r
+            Assert.AreEqual(0, count.Now, "軽巡、駆逐");\r
+\r
+            _battleInfo.Result.Friend.Main = ShipStatusList(3, 2, 1);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(0, count.Now, "A勝利でカウントしない");\r
+\r
+            _battleInfo.Result.Friend.Main = ShipStatusList(3, 2, 1);\r
+            InjectPracticeResult("S");\r
+            Assert.AreEqual(1, count.Now, "軽巡、駆逐、海防");\r
+        }\r
+\r
+        /// <summary>\r
         /// 330: 空母機動部隊、演習始め!\r
         /// </summary>\r
         [TestMethod]\r
@@ -1574,6 +1671,60 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// 345: 演習ティータイム!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void PracticeResult_345()\r
+        {\r
+            var count = InjectQuest(345);\r
+\r
+            _battleInfo.InjectResultStatus(new []{ShipStatus("Warspite"), ShipStatus("金剛"), ShipStatus("Ark Royal"), ShipStatus("Richelieu"), ShipStatus("Perth")},\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            InjectPracticeResult("B");\r
+            Assert.AreEqual(0, count.Now);\r
+\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(0, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus("Jervis");\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(1, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("Janus");\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(2, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[1] = ShipStatus("Richelieu");\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(2, count.Now);\r
+        }\r
+\r
+        /// <summary>\r
+        /// 346: 最精鋭!主力オブ主力、演習開始!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void PracticeResult_346()\r
+        {\r
+            var count = InjectQuest(346);\r
+\r
+            _battleInfo.InjectResultStatus(new []{ShipStatus("夕雲改二"), ShipStatus("巻雲改二"), ShipStatus("風雲改二"), ShipStatus("秋雲改")},\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(0, count.Now);\r
+\r
+            InjectPracticeResult("S");\r
+            Assert.AreEqual(0, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus("秋雲改二");\r
+            InjectPracticeResult("S");\r
+            Assert.AreEqual(1, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("綾波改二");\r
+            InjectPracticeResult("S");\r
+            Assert.AreEqual(1, count.Now);\r
+        }\r
+\r
+        /// <summary>\r
         /// 402: 「遠征」を3回成功させよう!\r
         /// 403: 「遠征」を10回成功させよう!\r
         /// 404: 大規模遠征作戦、発令!\r
@@ -1654,6 +1805,37 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// 434: 特設護衛船団司令部、活動開始!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_434()\r
+        {\r
+            var count = InjectQuest(434);\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 3}},\r
+                    new {api_id = 3, api_mission = new[] {2, 5}},\r
+                    new {api_id = 4, api_mission = new[] {2, 100}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0, 0}));\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 101}},\r
+                    new {api_id = 3, api_mission = new[] {2, 9}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
         /// 436: 練習航海及び警備任務を実施せよ!\r
         /// </summary>\r
         [TestMethod]\r
@@ -1782,14 +1964,14 @@ namespace KancolleSniffer.Test
             _questCounter.InspectDeck(Js(\r
                 new[]\r
                 {\r
-                    new {api_id = 2, api_mission = new[] {2, 71}},\r
+                    new {api_id = 2, api_mission = new[] {2, 41}},\r
                     new {api_id = 3, api_mission = new[] {2, 5}},\r
                     new {api_id = 4, api_mission = new[] {2, 40}}\r
                 }));\r
             _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
             _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
             _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
-            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 0, 1, 0}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0, 0}));\r
 \r
             _questCounter.InspectDeck(Js(\r
                 new[]\r
@@ -1853,6 +2035,8 @@ namespace KancolleSniffer.Test
         /// 643: 主力「陸攻」の調達\r
         /// 645: 「洋上補給」物資の調達\r
         /// 653: 工廠稼働!次期作戦準備!\r
+        /// 654: 精鋭複葉機飛行隊の編成\r
+        /// 657: 新型兵装開発整備の強化\r
         /// 663: 新型艤装の継続研究\r
         /// 673: 装備開発力の整備\r
         /// 674: 工廠環境の整備\r
@@ -1861,12 +2045,13 @@ namespace KancolleSniffer.Test
         /// 677: 継戦支援能力の整備\r
         /// 678: 主力艦上戦闘機の更新\r
         /// 680: 対空兵装の整備拡充\r
+        /// 681: 航空戦力の再編増強準備\r
         /// 688: 航空戦力の強化\r
         /// </summary>\r
         [TestMethod]\r
-        public void DestroyItem_613_638_643_645_653_663_673_674_675_676_677_678_680_686_688()\r
+        public void DestroyItem_613_638_643_645_653_654_655_657_663_673_674_675_676_677_678_680_681_686_688()\r
         {\r
-            _itemInfo.InjectItemSpec(new[]\r
+            InjectItems(new[]\r
             {\r
                 new ItemSpec {Id = 1, Name = "12cm単装砲", Type = 1},\r
                 new ItemSpec {Id = 37, Name = "7.7mm機銃", Type = 21},\r
@@ -1884,14 +2069,14 @@ namespace KancolleSniffer.Test
                 new ItemSpec {Id = 23, Name = "九九式艦爆", Type = 7},\r
                 new ItemSpec {Id = 16, Name = "九七式艦攻", Type = 8},\r
                 new ItemSpec {Id = 3, Name = "10cm連装高角砲", Type = 1},\r
-                new ItemSpec {Id = 121, Name = "94式高射装置", Type = 36}\r
+                new ItemSpec {Id = 121, Name = "94式高射装置", Type = 36},\r
+                new ItemSpec {Id = 242, Name = "Swordfish", Type = 8},\r
+                new ItemSpec {Id = 249, Name = "Fulmar", Type = 6}\r
             });\r
-            var items = new[] {1, 37, 19, 4, 11, 75, 7, 25, 13, 20, 28, 31, 35, 23, 16, 3, 121};\r
-            _itemInfo.InjectItems(items);\r
-            var questList = new[] {613, 638, 643, 645, 653, 663, 673, 674, 675, 676, 677, 678, 680, 686, 688};\r
+            var questList = new[] {613, 638, 643, 645, 655, 653, 654, 657, 663, 673, 674, 675, 676, 677, 678, 680, 681, 686, 688};\r
             InjectQuestList(questList);\r
             _questCounter.InspectDestroyItem(\r
-                $"api%5Fslotitem%5Fids={string.Join("%2C", Enumerable.Range(1, items.Length))}&api%5Fverno=1");\r
+                $"api%5Fslotitem%5Fids={string.Join("%2C", Enumerable.Range(1, _itemInventory.Count))}&api%5Fverno=1");\r
             var scalar = new[]\r
             {\r
                 new {Id = 613, Now = 1}, new {Id = 638, Now = 1}, new {Id = 643, Now = 1}, new {Id = 645, Now = 1},\r
@@ -1905,10 +2090,13 @@ namespace KancolleSniffer.Test
             }\r
             var array = new[]\r
             {\r
-                new {Id = 675, NowArray = new[] {2, 1}}, new {Id = 676, NowArray = new[] {1, 1, 1}},\r
+                new {Id = 654, NowArray = new[] {1, 1}}, new {Id = 655, NowArray = new[] {2, 1, 1, 1, 2}},\r
+                new {Id = 657, NowArray = new[] {2, 1, 1}},\r
+                new {Id = 675, NowArray = new[] {3, 1}}, new {Id = 676, NowArray = new[] {1, 1, 1}},\r
                 new {Id = 677, NowArray = new[] {1, 1, 1}}, new {Id = 678, NowArray = new[] {1, 1}},\r
                 new {Id = 680, NowArray = new[] {1, 2}}, new {Id = 686, NowArray = new[] {1, 1}},\r
-                new {Id = 688, NowArray = new[] {2, 1, 1, 1}}\r
+                new {Id = 681, NowArray = new[] {1, 2}},\r
+                new {Id = 688, NowArray = new[] {3, 1, 2, 1}}\r
             };\r
             foreach (var e in array)\r
             {\r
@@ -1918,6 +2106,11 @@ namespace KancolleSniffer.Test
             }\r
         }\r
 \r
+        private void InjectItems(IEnumerable<ItemSpec> specs)\r
+        {\r
+            _itemInventory.Add(specs.Select((s, i) => new ItemStatus{Id = i + 1, Spec = s}));\r
+        }\r
+\r
         /// <summary>\r
         /// 702: 艦の「近代化改修」を実施せよ!\r
         /// 703: 「近代化改修」を進め、戦備を整えよ!\r
@@ -1926,10 +2119,43 @@ namespace KancolleSniffer.Test
         public void PowerUp_702_703()\r
         {\r
             InjectQuestList(new[] {702, 703});\r
-            _questCounter.InspectPowerUp(Js(new {api_powerup_flag = 1}));\r
+            _questCounter.InspectPowerUp("", Js(new {api_powerup_flag = 1}));\r
             PAssert.That(() =>\r
                 _questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
                     .SequenceEqual(new[] {new {Id = 702, Now = 1}, new {Id = 703, Now = 1}}));\r
         }\r
+\r
+        /// <summary>\r
+        /// 714: 「駆逐艦」の改修工事を実施せよ!\r
+        /// 715: 続:「駆逐艦」の改修工事を実施せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void PowerUp_714_715()\r
+        {\r
+            var ships = new[]\r
+            {\r
+                ShipStatus(2), ShipStatus(2), ShipStatus(2), ShipStatus(2),\r
+                ShipStatus(3), ShipStatus(3), ShipStatus(3), ShipStatus(3)\r
+            };\r
+            _shipInventory.Add(ships.Select((s, i) =>\r
+            {\r
+                s.Id = i + 1;\r
+                return s;\r
+            }));\r
+\r
+            var q714 = InjectQuest(714);\r
+            _questCounter.InspectPowerUp("api_id=3&api_id_items=1,2", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(0, q714.Now);\r
+            _questCounter.InspectPowerUp("api_id=5&api_id_items=1,2,3", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(0, q714.Now);\r
+            _questCounter.InspectPowerUp("api_id=4&api_id_items=1,2,3", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(1, q714.Now);\r
+\r
+            var q715 = InjectQuest(715);\r
+            _questCounter.InspectPowerUp("api_id=4&api_id_items=1,2,3", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(0, q715.Now);\r
+            _questCounter.InspectPowerUp("api_id=4&api_id_items=5,6,7", Js(new {api_powerup_flag = 1}));\r
+            Assert.AreEqual(1, q715.Now);\r
+        }\r
     }\r
 }
\ No newline at end of file