OSDN Git Service

任務の詳細をツールチップで表示する
[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         /// 503: 艦隊大整備!\r
504         /// 504: 艦隊酒保祭り!\r
505         /// </summary>\r
506         [TestMethod]\r
507         public void Powerup_503_504()\r
508         {\r
509             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
510             questInfo.InspectQuestList(Js(new\r
511             {\r
512                 api_list = new[]\r
513                 {\r
514                     new {api_no = 503, api_category = 5, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
515                     new {api_no = 504, api_category = 5, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
516                 }\r
517             }));\r
518 \r
519             questInfo.CountNyukyo();\r
520             questInfo.CountCharge();\r
521             PAssert.That(() =>\r
522                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
523                     .SequenceEqual(new[] {new {Id = 503, Now = 1}, new {Id = 504, Now = 1}}));\r
524         }\r
525 \r
526         /// <summary>\r
527         /// 605: 新装備「開発」指令\r
528         /// 606: 新造艦「建造」指令\r
529         /// 607: 装備「開発」集中強化!\r
530         /// 608: 艦娘「建造」艦隊強化!\r
531         /// 609: 軍縮条約対応!\r
532         /// 619: 装備の改修強化\r
533         /// </summary>\r
534         [TestMethod]\r
535         public void Kousyou_605_606_607_608_609_619()\r
536         {\r
537             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1)) {AcceptMax = 6};\r
538             questInfo.InspectQuestList(Js(new\r
539             {\r
540                 api_list = new[]\r
541                 {\r
542                     new {api_no = 605, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
543                     new {api_no = 606, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
544                     new {api_no = 607, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
545                     new {api_no = 608, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
546                     new {api_no = 609, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
547                     new {api_no = 619, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
548                 }\r
549             }));\r
550 \r
551             questInfo.CountCreateItem();\r
552             questInfo.CountCreateShip();\r
553             questInfo.InspectDestroyShip("api%5Fship%5Fid=98159%2C98166%2C98168&api%5Fverno=1");\r
554             questInfo.CountRemodelSlot();\r
555             PAssert.That(() =>\r
556                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
557                     .SequenceEqual(new[]\r
558                     {\r
559                         new {Id = 605, Now = 1}, new {Id = 606, Now = 1}, new {Id = 607, Now = 1},\r
560                         new {Id = 608, Now = 1}, new {Id = 609, Now = 3}, new {Id = 619, Now = 1}\r
561                     }));\r
562         }\r
563 \r
564         /// <summary>\r
565         /// 613: 資源の再利用\r
566         /// 638: 対空機銃量産\r
567         /// 673: 装備開発力の整備\r
568         /// 674: 工廠環境の整備\r
569         /// 675: 運用装備の統合整備\r
570         /// 676: 装備開発力の集中整備\r
571         /// 677: 継戦支援能力の整備\r
572         /// </summary>\r
573         [TestMethod]\r
574         public void DestroyItem_613_638_673_674_675_676_677()\r
575         {\r
576             var itemInfo = new ItemInfo();\r
577             var questInfo = new QuestInfo(itemInfo, null, () => new DateTime(2015, 1, 1)) {AcceptMax = 7};\r
578 \r
579             itemInfo.InjectItemSpec(new[]\r
580             {\r
581                 new ItemSpec {Id = 1, Name = "12cm単装砲", Type = 1},\r
582                 new ItemSpec {Id = 37, Name = "7.7mm機銃", Type = 21},\r
583                 new ItemSpec {Id = 19, Name = "九六式艦戦", Type = 6},\r
584                 new ItemSpec {Id = 4, Name = "14cm単装砲", Type = 2},\r
585                 new ItemSpec {Id = 11, Name = "15.2cm単装砲", Type = 4},\r
586                 new ItemSpec {Id = 75, Name = "ドラム缶(輸送用)", Type = 30},\r
587                 new ItemSpec {Id = 7, Name = "35.6cm連装砲", Type = 3},\r
588                 new ItemSpec {Id = 25, Name = "零式水上偵察機", Type = 10},\r
589                 new ItemSpec {Id = 13, Name = "61cm三連装魚雷", Type = 5}\r
590             });\r
591             itemInfo.InjectItems(new[] {1, 37, 19, 4, 11, 75, 7, 25, 13});\r
592             questInfo.InspectQuestList(Js(new\r
593             {\r
594                 api_list = new[]\r
595                 {\r
596                     new {api_no = 613, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
597                     new {api_no = 638, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
598                     new {api_no = 673, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
599                     new {api_no = 674, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
600                     new {api_no = 675, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
601                     new {api_no = 676, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
602                     new {api_no = 677, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
603                 }\r
604             }));\r
605             questInfo.InspectDestroyItem("api%5Fslotitem%5Fids=1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9&api%5Fverno=1", null);\r
606             PAssert.That(() =>\r
607                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now}).Take(4).SequenceEqual(new[]\r
608                 {\r
609                     new {Id = 613, Now = 1}, new {Id = 638, Now = 1},\r
610                     new {Id = 673, Now = 1}, new {Id = 674, Now = 1}\r
611                 }));\r
612             var q675 = questInfo.Quests[4];\r
613             PAssert.That(() => q675.Id == 675 && q675.Count.NowArray.SequenceEqual(new[] {1, 1}));\r
614             var q676 = questInfo.Quests[5];\r
615             PAssert.That(() => q676.Id == 676 && q676.Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
616             var q677 = questInfo.Quests[6];\r
617             PAssert.That(() => q677.Id == 677 && q677.Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
618         }\r
619 \r
620         /// <summary>\r
621         /// 702: 艦の「近代化改修」を実施せよ!\r
622         /// 703: 「近代化改修」を進め、戦備を整えよ!\r
623         /// </summary>\r
624         [TestMethod]\r
625         public void Powerup_702_703()\r
626         {\r
627             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
628 \r
629             questInfo.InspectQuestList(Js(new\r
630             {\r
631                 api_list = new[]\r
632                 {\r
633                     new {api_no = 702, api_category = 7, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0},\r
634                     new {api_no = 703, api_category = 7, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}\r
635                 }\r
636             }));\r
637             questInfo.InspectPowerup(Js(new {api_powerup_flag = 1}));\r
638             PAssert.That(() =>\r
639                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
640                     .SequenceEqual(new[] {new {Id = 702, Now = 1}, new {Id = 703, Now = 1}}));\r
641         }\r
642 \r
643         /// <summary>\r
644         /// 文字列表記にする\r
645         /// </summary>\r
646         [TestMethod]\r
647         public void ToStringTest()\r
648         {\r
649             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
650             var status = new Status\r
651             {\r
652                 QuestCountList = new[]\r
653                 {\r
654                     new QuestCount {Id = 211, Now = 2},\r
655                     new QuestCount {Id = 214, NowArray = new[] {20, 7, 10, 8}},\r
656                     new QuestCount {Id = 854, NowArray = new[] {2, 1, 1, 1}}\r
657                 }\r
658             };\r
659             questInfo.LoadState(status);\r
660             PAssert.That(() => status.QuestCountList[0].ToString() == "2/3");\r
661             PAssert.That(() => status.QuestCountList[1].ToString() == "20/36 7/6 10/24 8/12");\r
662             var z = status.QuestCountList[2];\r
663             PAssert.That(() => z.ToString() == "4/4");\r
664             PAssert.That(() => z.ToToolTip() == "2-4 6-1 6-3 6-4");\r
665             z.NowArray = new[] {0, 0, 0, 0};\r
666             PAssert.That(() => z.ToToolTip() == "");\r
667         }\r
668     }\r
669 }