OSDN Git Service

歴戦「第十方面艦隊」、全力出撃!のカウンターに編成チェックがないのを直す
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer.Test / QuestCounterTest.cs
index 5b06722..d93ddf9 100644 (file)
 // limitations under the License.\r
 \r
 using System;\r
+using System.Collections.Generic;\r
 using System.Linq;\r
+using DynaJson;\r
 using ExpressionToCodeLib;\r
 using KancolleSniffer.Model;\r
-using KancolleSniffer.Util;\r
 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
 \r
 namespace KancolleSniffer.Test\r
@@ -166,10 +167,38 @@ 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
+                    new QuestCount {Id = 439, NowArray = new[] {1, 0, 1, 1}},\r
+                    new QuestCount {Id = 440, NowArray = new[] {1, 0, 1, 1, 1}}\r
                 }\r
             };\r
-            new QuestInfo().LoadState(status);\r
+            var countList = new QuestCountList();\r
+            countList.SetMissionNames(new JsonObject(new[]\r
+            {\r
+                new {api_id = 1, api_name = "練習航海"},\r
+                new {api_id = 2, api_name = "長距離練習航海"},\r
+                new {api_id = 3, api_name = "警備任務"},\r
+                new {api_id = 4, api_name = "対潜警戒任務"},\r
+                new {api_id = 5, api_name = "海上護衛任務"},\r
+                new {api_id = 9, api_name = "タンカー護衛任務"},\r
+                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 = 100, api_name = "兵站強化任務"},\r
+                new {api_id = 101, api_name = "海峡警備行動"},\r
+                new {api_id = 102, api_name = "長時間対潜警戒"},\r
+                new {api_id = 104, api_name = "小笠原沖哨戒線"},\r
+                new {api_id = 105, api_name = "小笠原沖戦闘哨戒"},\r
+                new {api_id = 110, api_name = "南西方面航空偵察作戦"},\r
+                new {api_id = 114, api_name = "南西諸島捜索撃滅戦"},\r
+                new {api_id = 142, api_name = "強行鼠輸送作戦"}\r
+            }));\r
+            new QuestInfo(countList).LoadState(status);\r
             Assert.AreEqual("2/3", status.QuestCountList[0].ToString());\r
             Assert.AreEqual("20/36 7/6 10/24 8/12", status.QuestCountList[1].ToString());\r
             var z = status.QuestCountList[2];\r
@@ -179,7 +208,7 @@ namespace KancolleSniffer.Test
             Assert.AreEqual("2-4:0 6-1:0 6-3:0 6-4:0", z.ToToolTip());\r
             var q426 = status.QuestCountList[3];\r
             Assert.AreEqual("1\u200a1\u200a1\u200a1", q426.ToString());\r
-            Assert.AreEqual("警備任務1 対潜警戒任務1 海上護衛任務1 強偵察任務1", q426.ToToolTip());\r
+            Assert.AreEqual("警備任務1 対潜警戒任務1 海上護衛任務1 強偵察任務1", q426.ToToolTip());\r
             var q428 = status.QuestCountList[4];\r
             Assert.AreEqual("対潜警戒任務1 海峡警備行動1 長時間対潜警戒1", q428.ToToolTip());\r
             q428.NowArray = new[] {0, 1, 0};\r
@@ -209,16 +238,31 @@ 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
+            var q437 = status.QuestCountList.First(q => q.Id == 437);\r
+            Assert.AreEqual("1\u200a0\u200a1\u200a1", q437.ToString());\r
+            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("兵站強化任務1 対潜警戒任務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
         }\r
     }\r
 \r
     [TestClass]\r
     public class QuestCounterTest\r
     {\r
-        private JsonObject Js(object obj) => JsonObject.CreateJsonObject(obj);\r
+        private JsonObject Js(object obj) => new JsonObject(obj);\r
 \r
         private object CreateQuestList(int[] ids) => Js(new\r
         {\r
@@ -238,10 +282,15 @@ namespace KancolleSniffer.Test
 \r
         private QuestCount InjectQuest(int id)\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {id}));\r
+            InjectQuestList(new[] {id});\r
             return _questInfo.Quests[0].Count;\r
         }\r
 \r
+        private void InjectQuestList(int[] ids)\r
+        {\r
+            _questInfo.InspectQuestList("api_tab_id=0", CreateQuestList(ids));\r
+        }\r
+\r
         private void InjectMapStart(int map, int eventId)\r
         {\r
             _questCounter.InspectMapStart(CreateMap(map, eventId));\r
@@ -295,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
@@ -303,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
-            _questInfo = new QuestInfo(() => new DateTime(2015, 1, 1)) {AcceptMax = 10};\r
-            _questCounter = new QuestCounter(_questInfo, _itemInfo, _battleInfo);\r
+            _itemInventory = new ItemInventory();\r
+            _shipInventory = new ShipInventory();\r
+            _questInfo = new QuestInfo(new QuestCountList(), () => new DateTime(2015, 1, 1));\r
+            _questCounter = new QuestCounter(_questInfo, _itemInventory, _shipInventory, _battleInfo);\r
         }\r
 \r
         /// <summary>\r
@@ -317,7 +368,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void BattleResult_201_216_210_214()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {201, 216, 210, 214}));\r
+            InjectQuestList(new[] {201, 216, 210, 214});\r
 \r
             InjectMapStart(11, 4);\r
             var counts = _questInfo.Quests.Select(q => q.Count).ToArray();\r
@@ -350,6 +401,10 @@ namespace KancolleSniffer.Test
                 new {Id = 214, Now = 0}, new {Id = 216, Now = 2}\r
             }));\r
             PAssert.That(() => counts[2].NowArray.SequenceEqual(new[] {1, 1, 2, 1}));\r
+\r
+            // 1-6 ゴール\r
+            InjectMapNext(16,8);\r
+            Assert.AreEqual(2, counts[0].Now);\r
         }\r
 \r
         /// <summary>\r
@@ -361,7 +416,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void BattleResult_211_212_213_218_220_221()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {211, 212, 213, 218, 220, 221}));\r
+            InjectQuestList(new[] {211, 212, 213, 218, 220, 221});\r
             // 補給艦1隻と空母2隻\r
             _battleInfo.InjectResultStatus(new ShipStatus[0], new ShipStatus[0], new[]\r
             {\r
@@ -389,7 +444,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void BattleResult_228_230()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {228, 230}));\r
+            InjectQuestList(new[] {228, 230});\r
             // 潜水艦3\r
             _battleInfo.InjectResultStatus(new ShipStatus[0], new ShipStatus[0], new[]\r
             {\r
@@ -715,13 +770,43 @@ 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
         [TestMethod]\r
         public void BattleResult_822_854()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {822, 854}));\r
+            InjectQuestList(new[] {822, 854});\r
             var c822 = _questInfo.Quests[0].Count;\r
             var c854 = _questInfo.Quests[1].Count;\r
 \r
@@ -1103,6 +1188,10 @@ namespace KancolleSniffer.Test
             InjectBattleResult("S");\r
             PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0}), "ボス以外はカウントしない");\r
 \r
+            _battleInfo.Result.Friend.Main[0] = ShipStatus("夕張改");\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0, 0}), "旗艦が夕張改");\r
+\r
             _battleInfo.Result.Friend.Main = new[] {ShipStatus("睦月"), ShipStatus("如月"), ShipStatus("夕張改二")};\r
             InjectMapNext(54, 5);\r
             InjectBattleResult("S");\r
@@ -1121,6 +1210,14 @@ namespace KancolleSniffer.Test
             InjectMapNext(65, 5);\r
             InjectBattleResult("S");\r
             PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}), "6-5");\r
+\r
+            _battleInfo.Result.Friend.Main = new[] {ShipStatus("夕張改二"), ShipStatus("由良改")};\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}), "由良改");\r
+\r
+            _battleInfo.Result.Friend.Main = new[] {ShipStatus("夕張改二"), ShipStatus("由良改二")};\r
+            InjectBattleResult("S");\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 2}), "由良改二");\r
         }\r
 \r
         /// <summary>\r
@@ -1131,7 +1228,7 @@ namespace KancolleSniffer.Test
         {\r
             var count = InjectQuest(904);\r
             _battleInfo.InjectResultStatus(\r
-                new []{ShipStatus("綾波改二"), ShipStatus("敷波")},\r
+                new[] {ShipStatus("綾波改二"), ShipStatus("敷波")},\r
                 new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
 \r
             InjectMapNext(25, 5);\r
@@ -1217,7 +1314,7 @@ namespace KancolleSniffer.Test
         {\r
             var count = InjectQuest(912);\r
             _battleInfo.InjectResultStatus(\r
-                new []{ShipStatus("明石"), ShipStatus(2), ShipStatus(2), ShipStatus(1)},\r
+                new[] {ShipStatus("明石"), ShipStatus(2), ShipStatus(2), ShipStatus(1)},\r
                 new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
 \r
             InjectMapNext(13, 5);\r
@@ -1266,7 +1363,7 @@ namespace KancolleSniffer.Test
         {\r
             var count = InjectQuest(914);\r
             _battleInfo.InjectResultStatus(\r
-                new []{ShipStatus(5), ShipStatus(5), ShipStatus(5), ShipStatus(1)},\r
+                new[] {ShipStatus(5), ShipStatus(5), ShipStatus(5), ShipStatus(1)},\r
                 new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
 \r
             InjectMapNext(41, 5);\r
@@ -1303,12 +1400,49 @@ 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
         public void BattleResult_280_854()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {280, 854}));\r
+            InjectQuestList(new[] {280, 854});\r
 \r
             _battleInfo.InjectResultStatus(\r
                 ShipStatusList(1, 1, 1, 1, 1, 1), new ShipStatus[0],\r
@@ -1325,7 +1459,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void BattleResult_888_893()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {888, 893}));\r
+            InjectQuestList(new[] {888, 893});\r
 \r
             _battleInfo.InjectResultStatus(\r
                 ShipStatusList(1, 1, 1, 1, 1, 1), new ShipStatus[0],\r
@@ -1346,7 +1480,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void PracticeResult_303_304_302_311_315()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {302, 303, 304, 311, 315}));\r
+            InjectQuestList(new[] {302, 303, 304, 311, 315});\r
 \r
             _battleInfo.InjectResultStatus(new[]\r
             {\r
@@ -1389,11 +1523,34 @@ namespace KancolleSniffer.Test
             Assert.AreEqual(1, count.Now);\r
 \r
             count.Now = 2;\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {318}));\r
+            InjectQuestList(new[] {318});\r
             Assert.AreEqual(2, count.Now, "進捗調節しない");\r
         }\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
@@ -1439,7 +1596,7 @@ namespace KancolleSniffer.Test
         {\r
             var count = InjectQuest(337);\r
 \r
-            _battleInfo.InjectResultStatus(new []\r
+            _battleInfo.InjectResultStatus(new[]\r
             {\r
                 ShipStatus("霰"), ShipStatus("霰"),\r
                 ShipStatus("陽炎"), ShipStatus("不知火"),\r
@@ -1465,7 +1622,7 @@ namespace KancolleSniffer.Test
         {\r
             var count = InjectQuest(339);\r
 \r
-            _battleInfo.InjectResultStatus(new []\r
+            _battleInfo.InjectResultStatus(new[]\r
             {\r
                 ShipStatus("磯波"), ShipStatus("浦波"),\r
                 ShipStatus("綾波"), ShipStatus("敷波"),\r
@@ -1481,6 +1638,93 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// 342: 小艦艇群演習強化任務\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void PracticeResult_342()\r
+        {\r
+            var count = InjectQuest(342);\r
+\r
+            _battleInfo.InjectResultStatus(new[] {ShipStatus(1), ShipStatus(1), ShipStatus(2), ShipStatus(5)},\r
+                new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(0, count.Now);\r
+\r
+            InjectPracticeResult("B");\r
+            Assert.AreEqual(0, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus(2);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(1, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus(3);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(2, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus(4);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(3, count.Now);\r
+\r
+            _battleInfo.Result.Friend.Main[3] = ShipStatus(21);\r
+            InjectPracticeResult("A");\r
+            Assert.AreEqual(4, count.Now);\r
+        }\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
@@ -1490,7 +1734,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void MissionResult_402_403_404_410_411()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {402, 403, 404, 410, 411}));\r
+            InjectQuestList(new[] {402, 403, 404, 410, 411});\r
 \r
             _questCounter.InspectDeck(Js(\r
                 new[]\r
@@ -1561,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
@@ -1592,13 +1867,131 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// 437: 小笠原沖哨戒線の強化を実施せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_437()\r
+        {\r
+            var count = InjectQuest(437);\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 4}},\r
+                    new {api_id = 3, api_mission = new[] {2, 104}},\r
+                    new {api_id = 4, api_mission = new[] {2, 105}}\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}));\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 110}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
+        /// 438: 南西諸島方面の海上護衛を強化せよ!\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_438()\r
+        {\r
+            var count = InjectQuest(438);\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 4}},\r
+                    new {api_id = 3, api_mission = new[] {2, 100}},\r
+                    new {api_id = 4, 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
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new { api_clear_result = 1 }));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] { 1, 1, 1, 0 }));\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 114}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new { api_clear_result = 1 }));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] { 1, 1, 1, 1 }));\r
+        }\r
+\r
+        /// <summary>\r
+        /// 439: 兵站強化遠征任務【基本作戦】\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_439()\r
+        {\r
+            var count = InjectQuest(439);\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 5}},\r
+                    new {api_id = 3, api_mission = new[] {2, 100}},\r
+                    new {api_id = 4, api_mission = new[] {2, 11}}\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}));\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 110}}\r
+                }));\r
+            _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
+            PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}));\r
+        }\r
+\r
+        /// <summary>\r
+        /// 440: 兵站強化遠征任務【拡張作戦】\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void MissionResult_440()\r
+        {\r
+            var count = InjectQuest(440);\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\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, 1, 0, 0}));\r
+\r
+            _questCounter.InspectDeck(Js(\r
+                new[]\r
+                {\r
+                    new {api_id = 2, api_mission = new[] {2, 142}},\r
+                    new {api_id = 3, api_mission = new[] {2, 46}}\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
         /// 503: 艦隊大整備!\r
         /// 504: 艦隊酒保祭り!\r
         /// </summary>\r
         [TestMethod]\r
         public void PowerUp_503_504()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {503, 504}));\r
+            InjectQuestList(new[] {503, 504});\r
 \r
             _questCounter.CountNyukyo();\r
             _questCounter.CountCharge();\r
@@ -1618,7 +2011,7 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void Kousyou_605_606_607_608_609_619()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {605, 606, 607, 608, 609, 619}));\r
+            InjectQuestList(new[] {605, 606, 607, 608, 609, 619});\r
 \r
             _questCounter.InspectCreateItem(\r
                 "api_verno=1&api_item1=10&api_item2=10&api_item3=30&api_item4=10&api_multiple_flag=0");\r
@@ -1642,6 +2035,8 @@ namespace KancolleSniffer.Test
         /// 643: 主力「陸攻」の調達\r
         /// 645: 「洋上補給」物資の調達\r
         /// 653: 工廠稼働!次期作戦準備!\r
+        /// 654: 精鋭複葉機飛行隊の編成\r
+        /// 657: 新型兵装開発整備の強化\r
         /// 663: 新型艤装の継続研究\r
         /// 673: 装備開発力の整備\r
         /// 674: 工廠環境の整備\r
@@ -1650,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
@@ -1673,15 +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
-            _questInfo.AcceptMax = questList.Length;\r
-            _questInfo.InspectQuestList(CreateQuestList(questList));\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", null);\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
@@ -1695,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
@@ -1708,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
@@ -1715,11 +2118,44 @@ namespace KancolleSniffer.Test
         [TestMethod]\r
         public void PowerUp_702_703()\r
         {\r
-            _questInfo.InspectQuestList(CreateQuestList(new[] {702, 703}));\r
-            _questCounter.InspectPowerUp(Js(new {api_powerup_flag = 1}));\r
+            InjectQuestList(new[] {702, 703});\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