1 // Copyright (C) 2017 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
16 using System.Collections.Generic;
\r
19 using ExpressionToCodeLib;
\r
20 using KancolleSniffer.Model;
\r
21 using Microsoft.VisualStudio.TestTools.UnitTesting;
\r
23 namespace KancolleSniffer.Test
\r
26 public class QuestInfoTest
\r
29 public void ResetQuestCount()
\r
31 var queue = new Queue<DateTime>(new[]
\r
33 new DateTime(2017, 11, 1, 5, 0, 0), new DateTime(2017, 11, 6, 5, 0, 0),
\r
34 new DateTime(2017, 12, 1, 5, 0, 0), new DateTime(2018, 2, 1, 5, 0, 0),
\r
35 new DateTime(2018, 3, 1, 5, 0, 0), new DateTime(2018, 5, 1, 5, 0, 0),
\r
36 new DateTime(2018, 8, 1, 5, 0, 0), new DateTime(2018, 9, 1, 5, 0, 0)
\r
38 var questInfo = MakeQuestInfo(() => queue.Dequeue());
\r
39 var status = new Status
\r
41 QuestCountList = new[]
\r
43 new QuestCount {Id = 201, Now = 1},
\r
44 new QuestCount {Id = 265, Now = 1},
\r
45 new QuestCount {Id = 213, Now = 1},
\r
46 new QuestCount {Id = 822, Now = 1},
\r
47 new QuestCount {Id = 904, NowArray = new[] {1, 1, 1, 1}},
\r
48 new QuestCount {Id = 436, NowArray = new[] {1, 1, 1, 1, 0}},
\r
49 new QuestCount {Id = 437, NowArray = new[] {1, 1, 1, 1}},
\r
50 new QuestCount {Id = 438, NowArray = new[] {1, 1, 1, 1}},
\r
52 QuestLastReset = new DateTime(2017, 10, 31, 5, 0, 0)
\r
54 var ids = status.QuestCountList.Select(qc => qc.Id).ToArray();
\r
55 questInfo.LoadState(status);
\r
56 CheckQuestCountList(questInfo, status, ids.Skip(2)); // デイリーとマンスリーが消える
\r
57 CheckQuestCountList(questInfo, status, ids.Skip(3)); // ウィークリーが消える
\r
58 CheckQuestCountList(questInfo, status, ids.Skip(4)); // クォータリーが消える
\r
59 CheckQuestCountList(questInfo, status, ids.Skip(5)); // イヤーリー2月が消える
\r
60 CheckQuestCountList(questInfo, status, ids.Skip(6)); // イヤーリー3月が消える
\r
61 CheckQuestCountList(questInfo, status, ids.Skip(7)); // イヤーリー5月が消える
\r
62 CheckQuestCountList(questInfo, status, ids.Skip(8)); // イヤーリー8月が消える
\r
65 private void CheckQuestCountList(QuestInfo questInfo, Status status, IEnumerable<int> quests)
\r
67 InspectQuestList(questInfo, new[] {201});
\r
68 questInfo.SaveState(status);
\r
69 PAssert.That(() => status.QuestCountList.Select(qc => qc.Id).SequenceEqual(quests));
\r
73 public void ResetFrom0To5OClock()
\r
75 var queue = new Queue<DateTime>(new[]
\r
77 new DateTime(2019, 1, 22, 4, 0, 0)
\r
79 var questInfo = MakeQuestInfo(() => queue.Dequeue());
\r
80 var status = new Status
\r
82 QuestCountList = new[] {new QuestCount {Id = 213, Now = 1}},
\r
83 QuestLastReset = new DateTime(2019, 1, 20, 5, 16, 22)
\r
85 questInfo.LoadState(status);
\r
86 InspectQuestList(questInfo, new[] {201});
\r
87 questInfo.SaveState(status);
\r
88 PAssert.That(() => status.QuestCountList.Length == 0);
\r
92 public void ResetWeeklyWithoutCount()
\r
94 var queue = new Queue<DateTime>(new[]
\r
96 new DateTime(2019, 1, 27, 10, 0, 0),
\r
97 new DateTime(2019, 1, 28, 5, 0, 0)
\r
99 var questInfo = MakeQuestInfo(() => queue.Dequeue());
\r
100 var status = new Status
\r
102 QuestLastReset = new DateTime(2019, 1, 27, 5, 0, 0)
\r
104 questInfo.LoadState(status);
\r
105 InspectQuestList(questInfo, // 2019-1-27 10:00
\r
106 new[] {237}); // 【節分拡張任務】南方海域 艦隊決戦
\r
107 PAssert.That(() => questInfo.Quests[0].Id == 237);
\r
108 InspectQuestList(questInfo, new[] {201}); // 2019-1-28 05:00
\r
109 PAssert.That(() => questInfo.Quests[0].Id == 201);
\r
113 public void NotImplemented()
\r
115 var questInfo = MakeQuestInfo(() => new DateTime(2015, 1, 1));
\r
116 InspectQuestList(questInfo, new[] {679});
\r
117 PAssert.That(() => questInfo.Quests[0].Count.Spec.Material.Length == 0);
\r
120 private JsonObject Js(object obj) => new JsonObject(obj);
\r
122 private object CreateQuestList(int[] ids) => Js(new
\r
124 api_list = ids.Select(id => CreateQuest(id, 2))
\r
127 private object CreateQuest(int id, int state)
\r
132 api_category = id / 100,
\r
137 api_get_material = new int[0],
\r
138 api_progress_flag = 0
\r
142 private void InspectQuestList(QuestInfo questInfo, int[] ids)
\r
144 questInfo.InspectQuestList("api_tab_id=0", CreateQuestList(ids));
\r
149 /// 状態をロードするときに獲得資材に特殊資材のリストを追加しない
\r
152 public void LoadStateNotAppendMaterialList()
\r
154 var questInfo = MakeQuestInfo(() => new DateTime(2015, 1, 1));
\r
155 var status = new Status
\r
165 Material = new[] {0, 2000, 0, 0, 0, 0, 0, 4}
\r
168 QuestCountList = new[]
\r
170 new QuestCount {Id = 854, NowArray = new[] {1, 0, 1, 0}}
\r
173 questInfo.LoadState(status);
\r
174 PAssert.That(() => questInfo.Quests[0].Material.Length == 8);
\r
177 private QuestInfo MakeQuestInfo(Func<DateTime> nowFunc)
\r
179 return new QuestInfo(new QuestCountList(), nowFunc);
\r