OSDN Git Service

一覧プライマリの位置が閉じていると保存されないのを直す
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer.Test / QuestInfoTest.cs
index 9a5539c..6f9aa26 100644 (file)
@@ -15,9 +15,9 @@
 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
@@ -31,63 +31,37 @@ namespace KancolleSniffer.Test
             var queue = new Queue<DateTime>(new[]\r
             {\r
                 new DateTime(2017, 11, 1, 5, 0, 0), new DateTime(2017, 11, 6, 5, 0, 0),\r
-                new DateTime(2017, 12, 1, 5, 0, 0), new DateTime(2018, 2, 1, 5, 0, 0)\r
+                new DateTime(2017, 12, 1, 5, 0, 0), new DateTime(2018, 2, 1, 5, 0, 0),\r
+                new DateTime(2018, 3, 1, 5, 0, 0), new DateTime(2018, 5, 1, 5, 0, 0)\r
             });\r
-            var questInfo = new QuestInfo(() => queue.Dequeue());\r
+            var questInfo = MakeQuestInfo(() => queue.Dequeue());\r
             var status = new Status\r
             {\r
                 QuestCountList = new[]\r
                 {\r
                     new QuestCount {Id = 201, Now = 1}, new QuestCount {Id = 213, Now = 1},\r
-                    new QuestCount {Id = 265, Now = 1}, new QuestCount {Id = 822, Now = 1},\r
+                    new QuestCount {Id = 265, Now = 1},\r
+                    new QuestCount {Id = 436, NowArray = new[] {1, 1, 1, 1, 0}},\r
+                    new QuestCount {Id = 437, NowArray = new[] {1, 1, 1, 1}},\r
+                    new QuestCount {Id = 822, Now = 1},\r
                     new QuestCount {Id = 904, NowArray = new[] {1, 1, 1, 1}}\r
                 },\r
                 QuestLastReset = new DateTime(2017, 10, 31, 5, 0, 0)\r
             };\r
             questInfo.LoadState(status);\r
-            questInfo.InspectQuestList(CreateQuestList(new[] {201}));\r
-            questInfo.SaveState(status);\r
-            PAssert.That(() =>\r
-                status.QuestCountList.Select(qc => qc.Id).SequenceEqual(new[] {213, 822, 904})); // デイリーとマンスリーが消える\r
-            questInfo.InspectQuestList(CreateQuestList(new[] {201}));\r
-            questInfo.SaveState(status);\r
-            PAssert.That(() => status.QuestCountList.Select(qc => qc.Id).SequenceEqual(new[] {822, 904})); // ウィークリーが消える\r
-            questInfo.InspectQuestList(CreateQuestList(new[] {201}));\r
-            questInfo.SaveState(status);\r
-            PAssert.That(() => status.QuestCountList.Select(qc => qc.Id).SequenceEqual(new[] {904})); // クォータリーが消える\r
-            questInfo.InspectQuestList(CreateQuestList(new[] {201}));\r
-            questInfo.SaveState(status);\r
-            PAssert.That(() => status.QuestCountList.Length == 0); // イヤーリーが消える\r
+            CheckQuestCountList(questInfo, status, new[] {213, 436, 437, 822, 904}); // デイリーとマンスリーが消える\r
+            CheckQuestCountList(questInfo, status, new[] {436, 437, 822, 904}); // ウィークリーが消える\r
+            CheckQuestCountList(questInfo, status, new[] {436, 437, 904}); // クォータリーが消える\r
+            CheckQuestCountList(questInfo, status, new[] {436, 437}); // イヤーリー2月が消える\r
+            CheckQuestCountList(questInfo, status, new[] {437}); // イヤーリー3月が消える\r
+            CheckQuestCountList(questInfo, status, new int[0]); // イヤーリー5月が消える\r
         }\r
 \r
-        [TestMethod]\r
-        public void ResetQuestList()\r
+        private void CheckQuestCountList(QuestInfo questInfo, Status status, int[] quests)\r
         {\r
-            var queue = new Queue<DateTime>(new[]\r
-            {\r
-                new DateTime(2017, 11, 1, 5, 0, 0), new DateTime(2017, 11, 6, 5, 0, 0),\r
-                new DateTime(2017, 12, 1, 5, 0, 0)\r
-            });\r
-            var questInfo = new QuestInfo(() => queue.Dequeue());\r
-            var status = new Status\r
-            {\r
-                QuestList = new[]\r
-                {\r
-                    new QuestStatus {Id = 201, Category = 2}, new QuestStatus {Id = 213, Category = 2},\r
-                    new QuestStatus {Id = 265, Category = 2}, new QuestStatus {Id = 822, Category = 8}\r
-                },\r
-                QuestLastReset = new DateTime(2017, 10, 31, 5, 0, 0)\r
-            };\r
-            questInfo.LoadState(status);\r
-            questInfo.InspectQuestList(CreateQuestList(new int[0]));\r
-            questInfo.SaveState(status);\r
-            PAssert.That(() => status.QuestList.Select(q => q.Id).SequenceEqual(new[] {213, 822})); // デイリーとマンスリーが消える\r
-            questInfo.InspectQuestList(CreateQuestList(new int[0]));\r
-            questInfo.SaveState(status);\r
-            PAssert.That(() => status.QuestList.Select(q => q.Id).SequenceEqual(new[] {822})); // ウィークリーが消える\r
-            questInfo.InspectQuestList(CreateQuestList(new int[0]));\r
+            InspectQuestList(questInfo, new[] {201});\r
             questInfo.SaveState(status);\r
-            PAssert.That(() => status.QuestList.Length == 0); // クォータリーが消える\r
+            PAssert.That(() =>  status.QuestCountList.Select(qc => qc.Id).SequenceEqual(quests));\r
         }\r
 \r
         [TestMethod]\r
@@ -97,14 +71,14 @@ namespace KancolleSniffer.Test
             {\r
                 new DateTime(2019, 1, 22, 4, 0, 0)\r
             });\r
-            var questInfo = new QuestInfo(() => queue.Dequeue());\r
+            var questInfo = MakeQuestInfo(() => queue.Dequeue());\r
             var status = new Status\r
             {\r
                 QuestCountList = new[] {new QuestCount {Id = 213, Now = 1}},\r
                 QuestLastReset = new DateTime(2019, 1, 20, 5, 16, 22)\r
             };\r
             questInfo.LoadState(status);\r
-            questInfo.InspectQuestList(CreateQuestList(new[] {201}));\r
+            InspectQuestList(questInfo, new[] {201});\r
             questInfo.SaveState(status);\r
             PAssert.That(() => status.QuestCountList.Length == 0);\r
         }\r
@@ -117,20 +91,28 @@ namespace KancolleSniffer.Test
                 new DateTime(2019, 1, 27, 10, 0, 0),\r
                 new DateTime(2019, 1, 28, 5, 0, 0)\r
             });\r
-            var questInfo = new QuestInfo(() => queue.Dequeue());\r
+            var questInfo = MakeQuestInfo(() => queue.Dequeue());\r
             var status = new Status\r
             {\r
                 QuestLastReset = new DateTime(2019, 1, 27, 5, 0, 0)\r
             };\r
             questInfo.LoadState(status);\r
-            questInfo.InspectQuestList( // 2019-1-27 10:00\r
-                CreateQuestList(new[] {237})); // 【節分拡張任務】南方海域 艦隊決戦\r
+            InspectQuestList(questInfo, // 2019-1-27 10:00\r
+                new[] {237}); // 【節分拡張任務】南方海域 艦隊決戦\r
             PAssert.That(() => questInfo.Quests[0].Id == 237);\r
-            questInfo.InspectQuestList(CreateQuestList(new[] {201})); // 2019-1-28 05:00\r
+            InspectQuestList(questInfo, new[] {201}); // 2019-1-28 05:00\r
             PAssert.That(() => questInfo.Quests[0].Id == 201);\r
         }\r
 \r
-        private JsonObject Js(object obj) => JsonObject.CreateJsonObject(obj);\r
+        [TestMethod]\r
+        public void NotImplemented()\r
+        {\r
+            var questInfo = MakeQuestInfo(() => new DateTime(2015, 1, 1));\r
+            InspectQuestList(questInfo, new[] {679});\r
+            PAssert.That(() => questInfo.Quests[0].Count.Spec.Material.Length == 0);\r
+        }\r
+\r
+        private JsonObject Js(object obj) => new JsonObject(obj);\r
 \r
         private object CreateQuestList(int[] ids) => Js(new\r
         {\r
@@ -152,21 +134,19 @@ namespace KancolleSniffer.Test
             };\r
         }\r
 \r
-        [TestMethod]\r
-        public void NotImplemented()\r
+        private void InspectQuestList(QuestInfo questInfo, int[] ids)\r
         {\r
-            var questInfo = new QuestInfo(() => new DateTime(2015, 1, 1));\r
-            questInfo.InspectQuestList(CreateQuestList(new[] {679}));\r
-            PAssert.That(() => questInfo.Quests[0].Count.Spec.Material.Length == 0);\r
+            questInfo.InspectQuestList("api_tab_id=0", CreateQuestList(ids));\r
         }\r
 \r
+\r
         /// <summary>\r
         /// 状態をロードするときに獲得資材に特殊資材のリストを追加しない\r
         /// </summary>\r
         [TestMethod]\r
         public void LoadStateNotAppendMaterialList()\r
         {\r
-            var questInfo = new QuestInfo(() => new DateTime(2015, 1, 1));\r
+            var questInfo = MakeQuestInfo(() => new DateTime(2015, 1, 1));\r
             var status = new Status\r
             {\r
                 QuestList = new[]\r
@@ -189,34 +169,9 @@ namespace KancolleSniffer.Test
             PAssert.That(() => questInfo.Quests[0].Material.Length == 8);\r
         }\r
 \r
-        /// <summary>\r
-        /// 任務を受領したときにNeedSaveを設定する\r
-        /// </summary>\r
-        [TestMethod]\r
-        public void SetNeedSaveOnStartQuest()\r
+        private QuestInfo MakeQuestInfo(Func<DateTime> nowFunc)\r
         {\r
-            var questInfo = new QuestInfo(() => new DateTime(2019, 1, 1));\r
-            // _lastResetが未設定だと必ずResetQuestsが動いてNeedSaveがtrueになる\r
-            questInfo.LoadState(new Status {QuestLastReset = new DateTime(2019, 1, 1)});\r
-            questInfo.InspectQuestList(Js(\r
-                new\r
-                {\r
-                    api_list = new[]\r
-                    {\r
-                        CreateQuest(213, 1),\r
-                        CreateQuest(214, 1)\r
-                    }\r
-                }));\r
-            Assert.IsFalse(questInfo.NeedSave);\r
-            questInfo.InspectQuestList(Js(new\r
-            {\r
-                api_list = new[]\r
-                {\r
-                    CreateQuest(213, 1),\r
-                    CreateQuest(214, 2)\r
-                }\r
-            }));\r
-            Assert.IsTrue(questInfo.NeedSave);\r
+            return new QuestInfo(new QuestCountList(), nowFunc);\r
         }\r
     }\r
 }
\ No newline at end of file