OSDN Git Service

cf3a2116c2e792260487b5b49602d388de319991
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer.Test / QuestInfoTest.cs
1 // Copyright (C) 2017 Kazuhiro Fujieda <fujieda@users.osdn.me>\r
2 //\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
6 //\r
7 //    http://www.apache.org/licenses/LICENSE-2.0\r
8 //\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
14 \r
15 using System;\r
16 using System.Collections.Generic;\r
17 using System.Linq;\r
18 using ExpressionToCodeLib;\r
19 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
20 \r
21 namespace KancolleSniffer.Test\r
22 {\r
23     [TestClass]\r
24     public class QuestInfoTest\r
25     {\r
26         [TestMethod]\r
27         public void AdjustCount()\r
28         {\r
29             var count = new QuestCount\r
30             {\r
31                 Spec = new QuestSpec {Max = 7},\r
32                 Now = 3\r
33             };\r
34             count.AdjustCount(0);\r
35             PAssert.That(() => count.Now == 3);\r
36             count.AdjustCount(50);\r
37             PAssert.That(() => count.Now == 4);\r
38             count.AdjustCount(80);\r
39             PAssert.That(() => count.Now == 6);\r
40             count.AdjustCount(100);\r
41             PAssert.That(() => count.Now == 7);\r
42             count.Now = 14;\r
43             count.AdjustCount(100);\r
44             PAssert.That(() => count.Now == 14);\r
45             count.AdjustCount(80);\r
46             PAssert.That(() => count.Now == 6);\r
47             count.AdjustCount(50);\r
48             PAssert.That(() => count.Now == 5);\r
49             count.AdjustCount(0);\r
50             PAssert.That(() => count.Now == 3);\r
51         }\r
52 \r
53         [TestMethod]\r
54         public void AdjustCountWithShift()\r
55         {\r
56             var count = new QuestCount\r
57             {\r
58                 Spec = new QuestSpec {Max = 7, Shift = 1},\r
59                 Now = 3\r
60             };\r
61             count.AdjustCount(0);\r
62             PAssert.That(() => count.Now == 2);\r
63             count.AdjustCount(50);\r
64             PAssert.That(() => count.Now == 3);\r
65             count.AdjustCount(80);\r
66             PAssert.That(() => count.Now == 6);\r
67             count.AdjustCount(100);\r
68             PAssert.That(() => count.Now == 7);\r
69             count.Now = 14;\r
70             count.AdjustCount(100);\r
71             PAssert.That(() => count.Now == 14);\r
72             count.AdjustCount(80);\r
73             PAssert.That(() => count.Now == 6);\r
74             count.AdjustCount(50);\r
75             PAssert.That(() => count.Now == 5);\r
76             count.AdjustCount(0);\r
77             PAssert.That(() => count.Now == 2);\r
78         }\r
79 \r
80         [TestMethod]\r
81         public void AdjestCountNowArray()\r
82         {\r
83             var count = new QuestCount\r
84             {\r
85                 Spec = new QuestSpec {MaxArray = new[] {36, 6, 24, 12}},\r
86                 NowArray = new[] {1, 2, 3, 4}\r
87             };\r
88             count.AdjustCount(50);\r
89             PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 2, 3, 4}));\r
90             count.AdjustCount(100);\r
91             PAssert.That(() => count.NowArray.SequenceEqual(new[] {36, 6, 24, 12}));\r
92             count.NowArray = new[] {38, 12, 19, 12};\r
93             count.AdjustCount(100);\r
94             PAssert.That(() => count.NowArray.SequenceEqual(new[] {38, 12, 24, 12}));\r
95         }\r
96 \r
97         [TestMethod]\r
98         public void ResetQuest()\r
99         {\r
100             var queue = new Queue<DateTime>(new[]\r
101             {\r
102                 new DateTime(2017, 11, 1, 5, 0, 0), new DateTime(2017, 11, 6, 5, 0, 0),\r
103                 new DateTime(2017, 12, 1, 5, 0, 0)\r
104             });\r
105             var questInfo = new QuestInfo(null, null, () => queue.Dequeue());\r
106             var status = new Status\r
107             {\r
108                 QuestCountList = new[]\r
109                 {\r
110                     new QuestCount {Id = 201, Now = 1}, new QuestCount {Id = 213, Now = 1},\r
111                     new QuestCount {Id = 265, Now = 1}, new QuestCount {Id = 822, Now = 1}\r
112                 },\r
113                 QuestLastReset = new DateTime(2017, 10, 31, 5, 0, 0)\r
114             };\r
115             questInfo.LoadState(status);\r
116             questInfo.InspectQuestList(Js(new\r
117             {\r
118                 api_list = new[]\r
119                     {new {api_no = 201, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}}\r
120             }));\r
121             questInfo.SaveState(status);\r
122             PAssert.That(() =>\r
123                 status.QuestCountList.Select(qc => new {qc.Id, qc.Now}).SequenceEqual(new[]\r
124                     {new {Id = 213, Now = 1}, new {Id = 822, Now = 1}})); // デイリーとマンスリーが消える\r
125             questInfo.InspectQuestList(Js(new\r
126             {\r
127                 api_list = new[]\r
128                     {new {api_no = 201, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}}\r
129             }));\r
130             questInfo.SaveState(status);\r
131             PAssert.That(() =>\r
132                 status.QuestCountList.Select(qc => new {qc.Id, qc.Now}).SequenceEqual(new[]\r
133                     {new {Id = 822, Now = 1}})); // ウィークリーが消える\r
134             questInfo.InspectQuestList(Js(new\r
135             {\r
136                 api_list = new[]\r
137                     {new {api_no = 201, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}}\r
138             }));\r
139             questInfo.SaveState(status);\r
140             PAssert.That(() => status.QuestCountList.Length == 0); // クォータリーが消える\r
141         }\r
142 \r
143         private JsonObject Js(object obj) => JsonObject.CreateJsonObject(obj);\r
144 \r
145         /// <summary>\r
146         /// 201: 敵艦隊を撃滅せよ!\r
147         /// 210: 敵艦隊を10回邀撃せよ!\r
148         /// 214: あ号\r
149         /// 216: 敵艦隊主力を撃滅せよ!\r
150         /// </summary>\r
151         [TestMethod]\r
152         public void BattleResult_201_216_210_214()\r
153         {\r
154             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
155             questInfo.InspectQuestList(Js(new\r
156             {\r
157                 api_list = new[]\r
158                 {\r
159                     new {api_no = 201, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
160                     new {api_no = 210, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
161                     new {api_no = 214, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
162                     new {api_no = 216, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
163                 }\r
164             }));\r
165 \r
166             questInfo.InspectMapStart(Js(new\r
167             {\r
168                 api_maparea_id = 1,\r
169                 api_mapinfo_no = 1,\r
170                 api_event_id = 4\r
171             }));\r
172             var quests = questInfo.Quests;\r
173             // 出撃カウント\r
174             PAssert.That(() => quests[2].Id == 214 && quests[2].Count.NowArray[0] == 1);\r
175             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
176             // 道中S勝利\r
177             PAssert.That(() => quests.Select(q => new {q.Id, q.Count.Now}).SequenceEqual(new[]\r
178             {\r
179                 new {Id = 201, Now = 1}, new {Id = 210, Now = 1},\r
180                 new {Id = 214, Now = 0}, new {Id = 216, Now = 1}\r
181             }));\r
182             PAssert.That(() => quests[2].Id == 214 &&\r
183                                quests[2].Count.NowArray.SequenceEqual(new[] {1, 1, 0, 0}));\r
184 \r
185             questInfo.InspectMapNext(Js(new\r
186             {\r
187                 api_maparea_id = 1,\r
188                 api_mapinfo_no = 1,\r
189                 api_event_id = 5\r
190             }));\r
191             // ボスB勝利\r
192             questInfo.InspectBattleResult(Js(new {api_win_rank = "B"}));\r
193             PAssert.That(() => quests.Select(q => new {q.Id, q.Count.Now}).SequenceEqual(new[]\r
194             {\r
195                 new {Id = 201, Now = 2}, new {Id = 210, Now = 2},\r
196                 new {Id = 214, Now = 0}, new {Id = 216, Now = 2}\r
197             }));\r
198             // ボス敗北\r
199             PAssert.That(() => quests[2].Id == 214 && quests[2].Count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}));\r
200             questInfo.InspectBattleResult(Js(new {api_win_rank = "C"}));\r
201             PAssert.That(() => quests.Select(q => new {q.Id, q.Count.Now}).SequenceEqual(new[]\r
202             {\r
203                 new {Id = 201, Now = 2}, new {Id = 210, Now = 3},\r
204                 new {Id = 214, Now = 0}, new {Id = 216, Now = 2}\r
205             }));\r
206             PAssert.That(() => quests[2].Id == 214 && quests[2].Count.NowArray.SequenceEqual(new[] {1, 1, 2, 1}));\r
207         }\r
208 \r
209         /// <summary>\r
210         /// 211: 敵空母を3隻撃沈せよ!\r
211         /// 212: 敵輸送船団を叩け!\r
212         /// 213: 海上通商破壊作戦\r
213         /// 218: 敵補給艦を3隻撃沈せよ!\r
214         /// </summary>\r
215         [TestMethod]\r
216         public void BattleResult_211_212_218_213_220_221()\r
217         {\r
218             var battleInfo = new BattleInfo(null, null);\r
219             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1)) {AcceptMax = 6};\r
220             questInfo.InspectQuestList(Js(new\r
221             {\r
222                 api_list = new[]\r
223                 {\r
224                     new {api_no = 211, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
225                     new {api_no = 212, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
226                     new {api_no = 213, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
227                     new {api_no = 218, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
228                     new {api_no = 220, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
229                     new {api_no = 221, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
230                 }\r
231             }));\r
232             // 補給艦1隻と空母2隻\r
233             battleInfo.InjectEnemyResultStatus(new[]\r
234             {\r
235                 new ShipStatus {NowHp = 0, MaxHp = 130, Spec = new ShipSpec {Id = 1558, ShipType = 15}},\r
236                 new ShipStatus {NowHp = 0, MaxHp = 90, Spec = new ShipSpec {Id = 1543, ShipType = 8}},\r
237                 new ShipStatus {NowHp = 0, MaxHp = 90, Spec = new ShipSpec {Id = 1543, ShipType = 8}},\r
238                 new ShipStatus {NowHp = 0, MaxHp = 96, Spec = new ShipSpec {Id = 1528, ShipType = 11}},\r
239                 new ShipStatus {NowHp = 0, MaxHp = 70, Spec = new ShipSpec {Id = 1523, ShipType = 7}},\r
240                 new ShipStatus {NowHp = 1, MaxHp = 70, Spec = new ShipSpec {Id = 1523, ShipType = 7}}\r
241             }, new ShipStatus[0]);\r
242             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
243             PAssert.That(() =>\r
244                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
245                     .SequenceEqual(new[]\r
246                     {\r
247                         new {Id = 211, Now = 2}, new {Id = 212, Now = 1}, new {Id = 213, Now = 1},\r
248                         new {Id = 218, Now = 1}, new {Id = 220, Now = 2}, new {Id = 221, Now = 1}\r
249                     }));\r
250         }\r
251 \r
252         /// <summary>\r
253         /// 228: 海上護衛戦\r
254         /// 230: 敵潜水艦を制圧せよ!\r
255         /// </summary>\r
256         [TestMethod]\r
257         public void BattleResult_228_230()\r
258         {\r
259             var battleInfo = new BattleInfo(null, null);\r
260             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
261             questInfo.InspectQuestList(Js(new\r
262             {\r
263                 api_list = new[]\r
264                 {\r
265                     new {api_no = 228, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
266                     new {api_no = 230, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
267                 }\r
268             }));\r
269             // 潜水艦3\r
270             battleInfo.InjectEnemyResultStatus(new[]\r
271             {\r
272                 new ShipStatus {NowHp = 0, MaxHp = 27, Spec = new ShipSpec {Id = 1532, ShipType = 13}},\r
273                 new ShipStatus {NowHp = 0, MaxHp = 19, Spec = new ShipSpec {Id = 1530, ShipType = 13}},\r
274                 new ShipStatus {NowHp = 0, MaxHp = 19, Spec = new ShipSpec {Id = 1530, ShipType = 13}}\r
275             }, new ShipStatus[0]);\r
276             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
277             PAssert.That(() =>\r
278                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
279                     .SequenceEqual(new[]\r
280                     {\r
281                         new {Id = 228, Now = 3}, new {Id = 230, Now = 3}\r
282                     }));\r
283         }\r
284 \r
285         /// <summary>\r
286         /// 226: 南西諸島海域の制海権を握れ!\r
287         /// </summary>\r
288         [TestMethod]\r
289         public void BattleResult_226()\r
290         {\r
291             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
292             questInfo.InspectQuestList(Js(new\r
293             {\r
294                 api_list = new[]\r
295                 {\r
296                     new {api_no = 226, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
297                 }\r
298             }));\r
299 \r
300             questInfo.InspectMapStart(Js(new\r
301             {\r
302                 api_maparea_id = 2,\r
303                 api_mapinfo_no = 1,\r
304                 api_event_id = 4\r
305             }));\r
306             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
307             PAssert.That(() =>\r
308                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
309                     .SequenceEqual(new[] {new {Id = 226, Now = 0}}));\r
310             questInfo.InspectMapNext(Js(new\r
311             {\r
312                 api_maparea_id = 2,\r
313                 api_mapinfo_no = 1,\r
314                 api_event_id = 5\r
315             }));\r
316             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
317             PAssert.That(() =>\r
318                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
319                     .SequenceEqual(new[] {new {Id = 226, Now = 1}}));\r
320             questInfo.InspectMapStart(Js(new\r
321             {\r
322                 api_maparea_id = 2,\r
323                 api_mapinfo_no = 1,\r
324                 api_event_id = 4\r
325             }));\r
326             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
327             PAssert.That(() =>\r
328                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
329                     .SequenceEqual(new[] {new {Id = 226, Now = 1}}));\r
330         }\r
331 \r
332         /// <summary>\r
333         /// // 243: 南方海域珊瑚諸島沖の制空権を握れ!\r
334         /// </summary>\r
335         [TestMethod]\r
336         public void BattleResult_243()\r
337         {\r
338             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
339             questInfo.InspectQuestList(Js(new\r
340             {\r
341                 api_list = new[]\r
342                 {\r
343                     new {api_no = 243, api_category = 2, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
344                 }\r
345             }));\r
346 \r
347             questInfo.InspectMapStart(Js(new\r
348             {\r
349                 api_maparea_id = 5,\r
350                 api_mapinfo_no = 2,\r
351                 api_event_id = 5\r
352             }));\r
353             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
354             PAssert.That(() =>\r
355                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
356                     .SequenceEqual(new[] {new {Id = 243, Now = 0}}));\r
357 \r
358             questInfo.InspectMapNext(Js(new\r
359             {\r
360                 api_maparea_id = 5,\r
361                 api_mapinfo_no = 2,\r
362                 api_event_id = 5\r
363             }));\r
364             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
365             PAssert.That(() =>\r
366                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
367                     .SequenceEqual(new[] {new {Id = 243, Now = 1}}));\r
368         }\r
369 \r
370         /// <summary>\r
371         /// 822: 沖ノ島海域迎撃戦\r
372         /// 854: 戦果拡張任務!「Z作戦」前段作戦\r
373         /// </summary>\r
374         [TestMethod]\r
375         public void BattleResult_822_854()\r
376         {\r
377             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
378             questInfo.InspectQuestList(Js(new\r
379             {\r
380                 api_list = new[]\r
381                 {\r
382                     new {api_no = 822, api_category = 8, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
383                     new {api_no = 854, api_category = 8, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
384                 }\r
385             }));\r
386 \r
387             questInfo.InspectMapNext(Js(new\r
388             {\r
389                 api_maparea_id = 2,\r
390                 api_mapinfo_no = 4,\r
391                 api_event_id = 5\r
392             }));\r
393             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
394             questInfo.InspectMapNext(Js(new\r
395             {\r
396                 api_maparea_id = 6,\r
397                 api_mapinfo_no = 1,\r
398                 api_event_id = 5\r
399             }));\r
400             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
401             questInfo.InspectMapNext(Js(new\r
402             {\r
403                 api_maparea_id = 6,\r
404                 api_mapinfo_no = 3,\r
405                 api_event_id = 5\r
406             }));\r
407             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
408             questInfo.InspectMapNext(Js(new\r
409             {\r
410                 api_maparea_id = 6,\r
411                 api_mapinfo_no = 4,\r
412                 api_event_id = 5\r
413             }));\r
414             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
415             PAssert.That(() => questInfo.Quests[1].Count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}));\r
416             PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
417             questInfo.InspectMapNext(Js(new\r
418             {\r
419                 api_maparea_id = 2,\r
420                 api_mapinfo_no = 4,\r
421                 api_event_id = 5\r
422             }));\r
423             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
424             PAssert.That(() => questInfo.Quests[1].Count.NowArray.SequenceEqual(new[] {2, 1, 1, 1}));\r
425             PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
426         }\r
427 \r
428         /// <summary>\r
429         /// 302: 大規模演習\r
430         /// 303: 「演習」で練度向上!\r
431         /// 304: 「演習」で他提督を圧倒せよ!\r
432         /// 311: 精鋭艦隊演習\r
433         /// </summary>\r
434         [TestMethod]\r
435         public void PracticeResult_303_304_302_311()\r
436         {\r
437             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
438             questInfo.InspectQuestList(Js(new\r
439             {\r
440                 api_list = new[]\r
441                 {\r
442                     new {api_no = 302, api_category = 3, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
443                     new {api_no = 303, api_category = 3, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
444                     new {api_no = 304, api_category = 3, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
445                     new {api_no = 311, api_category = 3, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
446                 }\r
447             }));\r
448 \r
449             questInfo.InspectPracticeResult(Js(new {api_win_rank = "C"}));\r
450             questInfo.InspectPracticeResult(Js(new {api_win_rank = "A"}));\r
451             PAssert.That(() =>\r
452                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
453                     .SequenceEqual(new[]\r
454                     {\r
455                         new {Id = 302, Now = 1}, new {Id = 303, Now = 2}, new {Id = 304, Now = 1},\r
456                         new {Id = 311, Now = 1}\r
457                     }));\r
458         }\r
459 \r
460         /// <summary>\r
461         /// 402: 「遠征」を3回成功させよう!\r
462         /// 403: 「遠征」を10回成功させよう!\r
463         /// 404: 大規模遠征作戦、発令!\r
464         /// 410: 南方への輸送作戦を成功させよ!\r
465         /// 411: 南方への鼠輸送を継続実施せよ!\r
466         /// </summary>\r
467         [TestMethod]\r
468         public void MissionResult_402_403_404_410_411()\r
469         {\r
470             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
471             questInfo.InspectQuestList(Js(new\r
472             {\r
473                 api_list = new[]\r
474                 {\r
475                     new {api_no = 402, api_category = 4, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
476                     new {api_no = 403, api_category = 4, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
477                     new {api_no = 404, api_category = 4, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
478                     new {api_no = 410, api_category = 4, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
479                     new {api_no = 411, api_category = 4, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
480                 }\r
481             }));\r
482 \r
483             questInfo.InspectDeck(Js(\r
484                 new[]\r
485                 {\r
486                     new {api_id = 2, api_mission = new[] {2, 6}},\r
487                     new {api_id = 3, api_mission = new[] {2, 37}},\r
488                     new {api_id = 4, api_mission = new[] {2, 2}}\r
489                 }));\r
490             questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
491             questInfo.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 2}));\r
492             questInfo.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 0}));\r
493             PAssert.That(() =>\r
494                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
495                     .SequenceEqual(new[]\r
496                     {\r
497                         new {Id = 402, Now = 2}, new {Id = 403, Now = 2}, new {Id = 404, Now = 2},\r
498                         new {Id = 410, Now = 1}, new {Id = 411, Now = 1}\r
499                     }));\r
500         }\r
501 \r
502         /// <summary>\r
503         /// 426: 海上通商航路の警戒を厳とせよ!\r
504         /// </summary>\r
505         [TestMethod]\r
506         public void MissionResult_426()\r
507         {\r
508             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
509             questInfo.InspectQuestList(Js(new\r
510             {\r
511                 api_list = new[]\r
512                 {\r
513                     new {api_no = 426, api_category = 4, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
514                 }\r
515             }));\r
516 \r
517             questInfo.InspectDeck(Js(\r
518                 new[]\r
519                 {\r
520                     new {api_id = 2, api_mission = new[] {2, 3}},\r
521                     new {api_id = 3, api_mission = new[] {2, 4}},\r
522                     new {api_id = 4, api_mission = new[] {2, 5}},\r
523                 }));\r
524             questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
525             questInfo.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
526             questInfo.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
527             PAssert.That(() =>\r
528                 questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1, 0}));\r
529             questInfo.InspectDeck(Js(\r
530                 new[]\r
531                 {\r
532                     new {api_id = 2, api_mission = new[] {2, 10}},\r
533                 }));\r
534             questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
535             PAssert.That(() =>\r
536                 questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}));\r
537         }\r
538 \r
539         /// <summary>\r
540         /// 428: 近海に侵入する敵潜を制圧せよ!\r
541         /// </summary>\r
542         [TestMethod]\r
543         public void MissionResult_428()\r
544         {\r
545             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
546             questInfo.InspectQuestList(Js(new\r
547             {\r
548                 api_list = new[]\r
549                 {\r
550                     new {api_no = 428, api_category = 4, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
551                 }\r
552             }));\r
553 \r
554             questInfo.InspectDeck(Js(\r
555                 new[]\r
556                 {\r
557                     new {api_id = 2, api_mission = new[] {2, 4}},\r
558                     new {api_id = 3, api_mission = new[] {2, 101}},\r
559                     new {api_id = 4, api_mission = new[] {2, 102}},\r
560                 }));\r
561             questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
562             questInfo.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
563             questInfo.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
564             PAssert.That(() =>\r
565                 questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
566         }\r
567 \r
568         /// <summary>\r
569         /// 503: 艦隊大整備!\r
570         /// 504: 艦隊酒保祭り!\r
571         /// </summary>\r
572         [TestMethod]\r
573         public void Powerup_503_504()\r
574         {\r
575             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
576             questInfo.InspectQuestList(Js(new\r
577             {\r
578                 api_list = new[]\r
579                 {\r
580                     new {api_no = 503, api_category = 5, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
581                     new {api_no = 504, api_category = 5, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
582                 }\r
583             }));\r
584 \r
585             questInfo.CountNyukyo();\r
586             questInfo.CountCharge();\r
587             PAssert.That(() =>\r
588                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
589                     .SequenceEqual(new[] {new {Id = 503, Now = 1}, new {Id = 504, Now = 1}}));\r
590         }\r
591 \r
592         /// <summary>\r
593         /// 605: 新装備「開発」指令\r
594         /// 606: 新造艦「建造」指令\r
595         /// 607: 装備「開発」集中強化!\r
596         /// 608: 艦娘「建造」艦隊強化!\r
597         /// 609: 軍縮条約対応!\r
598         /// 619: 装備の改修強化\r
599         /// </summary>\r
600         [TestMethod]\r
601         public void Kousyou_605_606_607_608_609_619()\r
602         {\r
603             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1)) {AcceptMax = 6};\r
604             questInfo.InspectQuestList(Js(new\r
605             {\r
606                 api_list = new[]\r
607                 {\r
608                     new {api_no = 605, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
609                     new {api_no = 606, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
610                     new {api_no = 607, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
611                     new {api_no = 608, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
612                     new {api_no = 609, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
613                     new {api_no = 619, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
614                 }\r
615             }));\r
616 \r
617             questInfo.CountCreateItem();\r
618             questInfo.CountCreateShip();\r
619             questInfo.InspectDestroyShip("api%5Fship%5Fid=98159%2C98166%2C98168&api%5Fverno=1");\r
620             questInfo.CountRemodelSlot();\r
621             PAssert.That(() =>\r
622                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
623                     .SequenceEqual(new[]\r
624                     {\r
625                         new {Id = 605, Now = 1}, new {Id = 606, Now = 1}, new {Id = 607, Now = 1},\r
626                         new {Id = 608, Now = 1}, new {Id = 609, Now = 3}, new {Id = 619, Now = 1}\r
627                     }));\r
628         }\r
629 \r
630         /// <summary>\r
631         /// 613: 資源の再利用\r
632         /// 638: 対空機銃量産\r
633         /// 663: 新型艤装の継続研究\r
634         /// 673: 装備開発力の整備\r
635         /// 674: 工廠環境の整備\r
636         /// 675: 運用装備の統合整備\r
637         /// 676: 装備開発力の集中整備\r
638         /// 677: 継戦支援能力の整備\r
639         /// </summary>\r
640         [TestMethod]\r
641         public void DestroyItem_613_638_663_673_674_675_676_677()\r
642         {\r
643             var itemInfo = new ItemInfo();\r
644             var questInfo = new QuestInfo(itemInfo, null, () => new DateTime(2015, 1, 1)) {AcceptMax = 8};\r
645 \r
646             itemInfo.InjectItemSpec(new[]\r
647             {\r
648                 new ItemSpec {Id = 1, Name = "12cm単装砲", Type = 1},\r
649                 new ItemSpec {Id = 37, Name = "7.7mm機銃", Type = 21},\r
650                 new ItemSpec {Id = 19, Name = "九六式艦戦", Type = 6},\r
651                 new ItemSpec {Id = 4, Name = "14cm単装砲", Type = 2},\r
652                 new ItemSpec {Id = 11, Name = "15.2cm単装砲", Type = 4},\r
653                 new ItemSpec {Id = 75, Name = "ドラム缶(輸送用)", Type = 30},\r
654                 new ItemSpec {Id = 7, Name = "35.6cm連装砲", Type = 3},\r
655                 new ItemSpec {Id = 25, Name = "零式水上偵察機", Type = 10},\r
656                 new ItemSpec {Id = 13, Name = "61cm三連装魚雷", Type = 5}\r
657             });\r
658             itemInfo.InjectItems(new[] {1, 37, 19, 4, 11, 75, 7, 25, 13});\r
659             questInfo.InspectQuestList(Js(new\r
660             {\r
661                 api_list = new[]\r
662                 {\r
663                     new {api_no = 613, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
664                     new {api_no = 638, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
665                     new {api_no = 663, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
666                     new {api_no = 673, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
667                     new {api_no = 674, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
668                     new {api_no = 675, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
669                     new {api_no = 676, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
670                     new {api_no = 677, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
671                 }\r
672             }));\r
673             questInfo.InspectDestroyItem("api%5Fslotitem%5Fids=1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9&api%5Fverno=1", null);\r
674             PAssert.That(() =>\r
675                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now}).Take(5).SequenceEqual(new[]\r
676                 {\r
677                     new {Id = 613, Now = 1}, new {Id = 638, Now = 1}, new {Id = 663, Now = 1},\r
678                     new {Id = 673, Now = 1}, new {Id = 674, Now = 1}\r
679                 }));\r
680             var q675 = questInfo.Quests[5];\r
681             PAssert.That(() => q675.Id == 675 && q675.Count.NowArray.SequenceEqual(new[] {1, 1}));\r
682             var q676 = questInfo.Quests[6];\r
683             PAssert.That(() => q676.Id == 676 && q676.Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
684             var q677 = questInfo.Quests[7];\r
685             PAssert.That(() => q677.Id == 677 && q677.Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
686         }\r
687 \r
688         /// <summary>\r
689         /// 702: 艦の「近代化改修」を実施せよ!\r
690         /// 703: 「近代化改修」を進め、戦備を整えよ!\r
691         /// </summary>\r
692         [TestMethod]\r
693         public void Powerup_702_703()\r
694         {\r
695             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
696 \r
697             questInfo.InspectQuestList(Js(new\r
698             {\r
699                 api_list = new[]\r
700                 {\r
701                     new {api_no = 702, api_category = 7, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
702                     new {api_no = 703, api_category = 7, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
703                 }\r
704             }));\r
705             questInfo.InspectPowerup(Js(new {api_powerup_flag = 1}));\r
706             PAssert.That(() =>\r
707                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
708                     .SequenceEqual(new[] {new {Id = 702, Now = 1}, new {Id = 703, Now = 1}}));\r
709         }\r
710 \r
711         /// <summary>\r
712         /// 文字列表記にする\r
713         /// </summary>\r
714         [TestMethod]\r
715         public void ToStringTest()\r
716         {\r
717             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
718             var status = new Status\r
719             {\r
720                 QuestCountList = new[]\r
721                 {\r
722                     new QuestCount {Id = 211, Now = 2},\r
723                     new QuestCount {Id = 214, NowArray = new[] {20, 7, 10, 8}},\r
724                     new QuestCount {Id = 854, NowArray = new[] {2, 1, 1, 1}},\r
725                     new QuestCount {Id = 426, NowArray = new[] {1, 1, 1, 1}},\r
726                     new QuestCount {Id = 428, NowArray = new[] {1, 1, 1}}\r
727                 }\r
728             };\r
729             questInfo.LoadState(status);\r
730             PAssert.That(() => status.QuestCountList[0].ToString() == "2/3");\r
731             PAssert.That(() => status.QuestCountList[1].ToString() == "20/36 7/6 10/24 8/12");\r
732             var z = status.QuestCountList[2];\r
733             PAssert.That(() => z.ToString() == "4/4");\r
734             PAssert.That(() => z.ToToolTip() == "2-4 6-1 6-3 6-4");\r
735             z.NowArray = new[] {0, 0, 0, 0};\r
736             PAssert.That(() => z.ToToolTip() == "");\r
737             var q426 = status.QuestCountList[3];\r
738             PAssert.That(() => q426.ToString() == "4/4");\r
739             PAssert.That(() => q426.ToToolTip() == "警備任務 対潜警戒任務 海上護衛任務 強硬偵察任務");\r
740             var q428 = status.QuestCountList[4];\r
741             PAssert.That(() => q428.ToToolTip() == "対潜警戒任務1 海峡警備行動1 長時間対潜警戒1");\r
742             q428.NowArray = new[] {0, 1, 0};\r
743             PAssert.That(() => q428.ToToolTip() == "海峡警備行動1");\r
744         }\r
745     }\r
746 }