OSDN Git Service

c1c6b140db95ed916a68901c5986fea25f0a6387
[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 AdjustCount80Percent()\r
82         {\r
83             var count = new QuestCount\r
84             {\r
85                 Spec = new QuestSpec()\r
86             };\r
87             for (var shift = 0; shift <= 1; shift++)\r
88             {\r
89                 for (var max = 2; max <= 6; max++)\r
90                 {\r
91                     count.Spec.Max = max;\r
92                     count.Spec.Shift = shift;\r
93                     count.Now = 1;\r
94                     count.AdjustCount(80);\r
95                     PAssert.That(() => count.Now == count.Spec.Max - 1);\r
96                 }\r
97             }\r
98         }\r
99 \r
100         [TestMethod]\r
101         public void AdjestCountNowArray()\r
102         {\r
103             var count = new QuestCount\r
104             {\r
105                 Spec = new QuestSpec {MaxArray = new[] {36, 6, 24, 12}},\r
106                 NowArray = new[] {1, 2, 3, 4}\r
107             };\r
108             count.AdjustCount(50);\r
109             PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 2, 3, 4}));\r
110             count.AdjustCount(100);\r
111             PAssert.That(() => count.NowArray.SequenceEqual(new[] {36, 6, 24, 12}));\r
112             count.NowArray = new[] {38, 12, 19, 12};\r
113             count.AdjustCount(100);\r
114             PAssert.That(() => count.NowArray.SequenceEqual(new[] {38, 12, 24, 12}));\r
115         }\r
116 \r
117         [TestMethod]\r
118         public void ResetQuest()\r
119         {\r
120             var queue = new Queue<DateTime>(new[]\r
121             {\r
122                 new DateTime(2017, 11, 1, 5, 0, 0), new DateTime(2017, 11, 6, 5, 0, 0),\r
123                 new DateTime(2017, 12, 1, 5, 0, 0)\r
124             });\r
125             var questInfo = new QuestInfo(null, null, () => queue.Dequeue());\r
126             var status = new Status\r
127             {\r
128                 QuestCountList = new[]\r
129                 {\r
130                     new QuestCount {Id = 201, Now = 1}, new QuestCount {Id = 213, Now = 1},\r
131                     new QuestCount {Id = 265, Now = 1}, new QuestCount {Id = 822, Now = 1}\r
132                 },\r
133                 QuestLastReset = new DateTime(2017, 10, 31, 5, 0, 0)\r
134             };\r
135             questInfo.LoadState(status);\r
136             questInfo.InspectQuestList(CreateQuestList(new[] {201}));\r
137             questInfo.SaveState(status);\r
138             PAssert.That(() =>\r
139                 status.QuestCountList.Select(qc => new {qc.Id, qc.Now}).SequenceEqual(new[]\r
140                     {new {Id = 213, Now = 1}, new {Id = 822, Now = 1}})); // デイリーとマンスリーが消える\r
141             questInfo.InspectQuestList(CreateQuestList(new[] {201}));\r
142             questInfo.SaveState(status);\r
143             PAssert.That(() =>\r
144                 status.QuestCountList.Select(qc => new {qc.Id, qc.Now}).SequenceEqual(new[]\r
145                     {new {Id = 822, Now = 1}})); // ウィークリーが消える\r
146             questInfo.InspectQuestList(CreateQuestList(new[] {201}));\r
147             questInfo.SaveState(status);\r
148             PAssert.That(() => status.QuestCountList.Length == 0); // クォータリーが消える\r
149         }\r
150 \r
151         private JsonObject Js(object obj) => JsonObject.CreateJsonObject(obj);\r
152 \r
153         private object CreateQuestList(int[] ids) => Js(new\r
154         {\r
155             api_list =\r
156             ids.Select(id => new\r
157             {\r
158                 api_no = id,\r
159                 api_category = id / 100,\r
160                 api_state = 2,\r
161                 api_title = "",\r
162                 api_detail = "",\r
163                 api_get_material = new int[0],\r
164                 api_progress_flag = 0\r
165             })\r
166         });\r
167 \r
168         /// <summary>\r
169         /// 201: 敵艦隊を撃滅せよ!\r
170         /// 210: 敵艦隊を10回邀撃せよ!\r
171         /// 214: あ号\r
172         /// 216: 敵艦隊主力を撃滅せよ!\r
173         /// </summary>\r
174         [TestMethod]\r
175         public void BattleResult_201_216_210_214()\r
176         {\r
177             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
178             questInfo.InspectQuestList(CreateQuestList(new[] {201, 216, 210, 214}));\r
179 \r
180             questInfo.InspectMapStart(Js(new\r
181             {\r
182                 api_maparea_id = 1,\r
183                 api_mapinfo_no = 1,\r
184                 api_event_id = 4\r
185             }));\r
186             var quests = questInfo.Quests;\r
187             // 出撃カウント\r
188             PAssert.That(() => quests[2].Id == 214 && quests[2].Count.NowArray[0] == 1);\r
189             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
190             // 道中S勝利\r
191             PAssert.That(() => quests.Select(q => new {q.Id, q.Count.Now}).SequenceEqual(new[]\r
192             {\r
193                 new {Id = 201, Now = 1}, new {Id = 210, Now = 1},\r
194                 new {Id = 214, Now = 0}, new {Id = 216, Now = 1}\r
195             }));\r
196             PAssert.That(() => quests[2].Id == 214 &&\r
197                                quests[2].Count.NowArray.SequenceEqual(new[] {1, 1, 0, 0}));\r
198 \r
199             questInfo.InspectMapNext(Js(new\r
200             {\r
201                 api_maparea_id = 1,\r
202                 api_mapinfo_no = 1,\r
203                 api_event_id = 5\r
204             }));\r
205             // ボスB勝利\r
206             questInfo.InspectBattleResult(Js(new {api_win_rank = "B"}));\r
207             PAssert.That(() => quests.Select(q => new {q.Id, q.Count.Now}).SequenceEqual(new[]\r
208             {\r
209                 new {Id = 201, Now = 2}, new {Id = 210, Now = 2},\r
210                 new {Id = 214, Now = 0}, new {Id = 216, Now = 2}\r
211             }));\r
212             // ボス敗北\r
213             PAssert.That(() => quests[2].Id == 214 && quests[2].Count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}));\r
214             questInfo.InspectBattleResult(Js(new {api_win_rank = "C"}));\r
215             PAssert.That(() => quests.Select(q => new {q.Id, q.Count.Now}).SequenceEqual(new[]\r
216             {\r
217                 new {Id = 201, Now = 2}, new {Id = 210, Now = 3},\r
218                 new {Id = 214, Now = 0}, new {Id = 216, Now = 2}\r
219             }));\r
220             PAssert.That(() => quests[2].Id == 214 && quests[2].Count.NowArray.SequenceEqual(new[] {1, 1, 2, 1}));\r
221         }\r
222 \r
223         /// <summary>\r
224         /// 211: 敵空母を3隻撃沈せよ!\r
225         /// 212: 敵輸送船団を叩け!\r
226         /// 213: 海上通商破壊作戦\r
227         /// 218: 敵補給艦を3隻撃沈せよ!\r
228         /// </summary>\r
229         [TestMethod]\r
230         public void BattleResult_211_212_213_218_220_221()\r
231         {\r
232             var battleInfo = new BattleInfo(null, null);\r
233             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1)) {AcceptMax = 6};\r
234             questInfo.InspectQuestList(CreateQuestList(new[] {211, 212, 213, 218, 220, 221}));\r
235             // 補給艦1隻と空母2隻\r
236             battleInfo.InjectResultStatus(new ShipStatus[0], new ShipStatus[0], new[]\r
237             {\r
238                 new ShipStatus {NowHp = 0, MaxHp = 130, Spec = new ShipSpec {Id = 1558, ShipType = 15}},\r
239                 new ShipStatus {NowHp = 0, MaxHp = 90, Spec = new ShipSpec {Id = 1543, ShipType = 8}},\r
240                 new ShipStatus {NowHp = 0, MaxHp = 90, Spec = new ShipSpec {Id = 1543, ShipType = 8}},\r
241                 new ShipStatus {NowHp = 0, MaxHp = 96, Spec = new ShipSpec {Id = 1528, ShipType = 11}},\r
242                 new ShipStatus {NowHp = 0, MaxHp = 70, Spec = new ShipSpec {Id = 1523, ShipType = 7}},\r
243                 new ShipStatus {NowHp = 1, MaxHp = 70, Spec = new ShipSpec {Id = 1523, ShipType = 7}}\r
244             }, new ShipStatus[0]);\r
245             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
246             PAssert.That(() =>\r
247                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
248                     .SequenceEqual(new[]\r
249                     {\r
250                         new {Id = 211, Now = 2}, new {Id = 212, Now = 1}, new {Id = 213, Now = 1},\r
251                         new {Id = 218, Now = 1}, new {Id = 220, Now = 2}, new {Id = 221, Now = 1}\r
252                     }));\r
253         }\r
254 \r
255         /// <summary>\r
256         /// 228: 海上護衛戦\r
257         /// 230: 敵潜水艦を制圧せよ!\r
258         /// </summary>\r
259         [TestMethod]\r
260         public void BattleResult_228_230()\r
261         {\r
262             var battleInfo = new BattleInfo(null, null);\r
263             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
264             questInfo.InspectQuestList(CreateQuestList(new[] {228, 230}));\r
265             // 潜水艦3\r
266             battleInfo.InjectResultStatus(new ShipStatus[0], new ShipStatus[0], new[]\r
267             {\r
268                 new ShipStatus {NowHp = 0, MaxHp = 27, Spec = new ShipSpec {Id = 1532, ShipType = 13}},\r
269                 new ShipStatus {NowHp = 0, MaxHp = 19, Spec = new ShipSpec {Id = 1530, ShipType = 13}},\r
270                 new ShipStatus {NowHp = 0, MaxHp = 19, Spec = new ShipSpec {Id = 1530, ShipType = 13}}\r
271             }, new ShipStatus[0]);\r
272             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
273             PAssert.That(() =>\r
274                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
275                     .SequenceEqual(new[]\r
276                     {\r
277                         new {Id = 228, Now = 3}, new {Id = 230, Now = 3}\r
278                     }));\r
279         }\r
280 \r
281         /// <summary>\r
282         /// 226: 南西諸島海域の制海権を握れ!\r
283         /// </summary>\r
284         [TestMethod]\r
285         public void BattleResult_226()\r
286         {\r
287             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
288             questInfo.InspectQuestList(CreateQuestList(new[] {226}));\r
289 \r
290             questInfo.InspectMapStart(Js(new\r
291             {\r
292                 api_maparea_id = 2,\r
293                 api_mapinfo_no = 1,\r
294                 api_event_id = 4\r
295             }));\r
296             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
297             PAssert.That(() =>\r
298                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
299                     .SequenceEqual(new[] {new {Id = 226, Now = 0}}));\r
300             questInfo.InspectMapNext(Js(new\r
301             {\r
302                 api_maparea_id = 2,\r
303                 api_mapinfo_no = 1,\r
304                 api_event_id = 5\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 = 1}}));\r
310             questInfo.InspectMapStart(Js(new\r
311             {\r
312                 api_maparea_id = 2,\r
313                 api_mapinfo_no = 1,\r
314                 api_event_id = 4\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         }\r
321 \r
322         /// <summary>\r
323         /// // 243: 南方海域珊瑚諸島沖の制空権を握れ!\r
324         /// </summary>\r
325         [TestMethod]\r
326         public void BattleResult_243()\r
327         {\r
328             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
329             questInfo.InspectQuestList(CreateQuestList(new[] {243}));\r
330 \r
331             questInfo.InspectMapStart(Js(new\r
332             {\r
333                 api_maparea_id = 5,\r
334                 api_mapinfo_no = 2,\r
335                 api_event_id = 5\r
336             }));\r
337             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
338             PAssert.That(() =>\r
339                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
340                     .SequenceEqual(new[] {new {Id = 243, Now = 0}}));\r
341 \r
342             questInfo.InspectMapNext(Js(new\r
343             {\r
344                 api_maparea_id = 5,\r
345                 api_mapinfo_no = 2,\r
346                 api_event_id = 5\r
347             }));\r
348             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
349             PAssert.That(() =>\r
350                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
351                     .SequenceEqual(new[] {new {Id = 243, Now = 1}}));\r
352         }\r
353 \r
354         private ShipStatus ShipStatus(int shipType, int specId = 0) =>\r
355             new ShipStatus {NowHp = 1, Spec = new ShipSpec {Id = specId, ShipType = shipType}};\r
356 \r
357 \r
358         /// <summary>\r
359         /// 249: 「第五戦隊」出撃せよ!\r
360         /// </summary>\r
361         [TestMethod]\r
362         public void BattleResult_249()\r
363         {\r
364             var battleInfo = new BattleInfo(null, null);\r
365             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
366             questInfo.InspectQuestList(CreateQuestList(new[] {249}));\r
367 \r
368             battleInfo.InjectResultStatus(new[]\r
369             {\r
370                 ShipStatus(5, 319), ShipStatus(5, 192), ShipStatus(5, 194),\r
371                 ShipStatus(5, 193), ShipStatus(6, 189), ShipStatus(6, 188)\r
372             }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
373             questInfo.InspectMapNext(Js(new\r
374             {\r
375                 api_maparea_id = 2,\r
376                 api_mapinfo_no = 5,\r
377                 api_event_id = 4\r
378             }));\r
379             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
380             questInfo.InspectMapNext(Js(new\r
381             {\r
382                 api_maparea_id = 2,\r
383                 api_mapinfo_no = 5,\r
384                 api_event_id = 5\r
385             }));\r
386             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
387             PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
388             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
389             PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
390             questInfo.Quests[0].Count.Now = 0;\r
391 \r
392             battleInfo.Result.Friend.Main[1].NowHp = 0;\r
393             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
394             PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "那智改二轟沈");\r
395         }\r
396 \r
397         /// <summary>\r
398         /// 257: 「水雷戦隊」南西へ!\r
399         /// </summary>\r
400         [TestMethod]\r
401         public void BattleResult_257()\r
402         {\r
403             var battleInfo = new BattleInfo(null, null);\r
404             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
405             questInfo.InspectQuestList(CreateQuestList(new[] {257}));\r
406 \r
407             battleInfo.InjectResultStatus(new[]\r
408             {\r
409                 ShipStatus(3), ShipStatus(2), ShipStatus(2),\r
410                 ShipStatus(2), ShipStatus(2), ShipStatus(2)\r
411             }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
412             questInfo.InspectMapNext(Js(new\r
413             {\r
414                 api_maparea_id = 1,\r
415                 api_mapinfo_no = 4,\r
416                 api_event_id = 4\r
417             }));\r
418             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
419             questInfo.InspectMapNext(Js(new\r
420             {\r
421                 api_maparea_id = 1,\r
422                 api_mapinfo_no = 4,\r
423                 api_event_id = 5\r
424             }));\r
425             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
426             PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
427             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
428             PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
429             questInfo.Quests[0].Count.Now = 0;\r
430 \r
431             battleInfo.Result.Friend.Main[0].NowHp = 0;\r
432             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
433             PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "軽巡轟沈");\r
434             battleInfo.Result.Friend.Main[0].NowHp = 1;\r
435 \r
436             battleInfo.Result.Friend.Main[0].Spec.ShipType = 2;\r
437             battleInfo.Result.Friend.Main[1].Spec.ShipType = 3;\r
438             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
439             PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "旗艦が駆逐");\r
440             battleInfo.Result.Friend.Main[0].Spec.ShipType = 3;\r
441 \r
442             battleInfo.Result.Friend.Main[2].Spec.ShipType = 3;\r
443             battleInfo.Result.Friend.Main[3].Spec.ShipType = 3;\r
444             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
445             PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "軽巡が4隻");\r
446 \r
447             battleInfo.Result.Friend.Main[0].Spec.ShipType = 3;\r
448             battleInfo.Result.Friend.Main[3].Spec.ShipType = 4;\r
449             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
450             PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "駆逐軽巡以外");\r
451         }\r
452 \r
453         /// <summary>\r
454         /// 257: 「水上打撃部隊」南方へ!\r
455         /// </summary>\r
456         [TestMethod]\r
457         public void BattleResult_259()\r
458         {\r
459             var battleInfo = new BattleInfo(null, null);\r
460             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
461             questInfo.InspectQuestList(CreateQuestList(new[] {259}));\r
462 \r
463             battleInfo.InjectResultStatus(new[]\r
464             {\r
465                 ShipStatus(3, 183), ShipStatus(9, 276), ShipStatus(10, 411),\r
466                 ShipStatus(10, 412), ShipStatus(5, 193), ShipStatus(5, 194)\r
467             }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
468             questInfo.InspectMapNext(Js(new\r
469             {\r
470                 api_maparea_id = 5,\r
471                 api_mapinfo_no = 1,\r
472                 api_event_id = 4\r
473             }));\r
474             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
475             questInfo.InspectMapNext(Js(new\r
476             {\r
477                 api_maparea_id = 5,\r
478                 api_mapinfo_no = 1,\r
479                 api_event_id = 5\r
480             }));\r
481             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
482             PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
483             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
484             PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
485             questInfo.Quests[0].Count.Now = 0;\r
486 \r
487             battleInfo.Result.Friend.Main[0].NowHp = 0;\r
488             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
489             PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "軽巡轟沈");\r
490             battleInfo.Result.Friend.Main[0].NowHp = 1;\r
491 \r
492             battleInfo.Result.Friend.Main[4].Spec = new ShipSpec {Id = 136, ShipType = 9};\r
493             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
494             PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "戦艦4隻");\r
495             battleInfo.Result.Friend.Main[4].Spec = new ShipSpec {Id = 193, ShipType = 5};\r
496 \r
497             battleInfo.Result.Friend.Main[0].Spec = new ShipSpec {Id = 58, ShipType = 4};\r
498             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
499             PAssert.That(() => questInfo.Quests[0].Count.Now == 0, "軽巡なし");\r
500         }\r
501 \r
502         /// <summary>\r
503         /// 266: 「水上反撃部隊」突入せよ!\r
504         /// </summary>\r
505         [TestMethod]\r
506         public void BattleResult_266()\r
507         {\r
508             var battleInfo = new BattleInfo(null, null);\r
509             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
510             questInfo.InspectQuestList(CreateQuestList(new[] {266}));\r
511 \r
512             battleInfo.InjectResultStatus(new[]\r
513             {\r
514                 ShipStatus(2), ShipStatus(5), ShipStatus(3),\r
515                 ShipStatus(2), ShipStatus(2), ShipStatus(2)\r
516             }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
517             questInfo.InspectMapNext(Js(new\r
518             {\r
519                 api_maparea_id = 2,\r
520                 api_mapinfo_no = 5,\r
521                 api_event_id = 4\r
522             }));\r
523             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
524             questInfo.InspectMapNext(Js(new\r
525             {\r
526                 api_maparea_id = 2,\r
527                 api_mapinfo_no = 5,\r
528                 api_event_id = 5\r
529             }));\r
530             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
531             PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
532             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
533             PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
534 \r
535             battleInfo.Result.Friend.Main[1].NowHp = 0;\r
536             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
537             PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "轟沈あり");\r
538             battleInfo.Result.Friend.Main[1].NowHp = 1;\r
539 \r
540             battleInfo.Result.Friend.Main[0].Spec.ShipType = 3;\r
541             battleInfo.Result.Friend.Main[2].Spec.ShipType = 2;\r
542             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
543             PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "旗艦が軽巡");\r
544             battleInfo.Result.Friend.Main[0].Spec.ShipType = 2;\r
545             battleInfo.Result.Friend.Main[2].Spec.ShipType = 3;\r
546 \r
547             battleInfo.Result.Friend.Main[3].Spec.ShipType = 3;\r
548             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
549             PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "軽巡が2隻");\r
550         }\r
551 \r
552         /// <summary>\r
553         /// 822: 沖ノ島海域迎撃戦\r
554         /// 854: 戦果拡張任務!「Z作戦」前段作戦\r
555         /// </summary>\r
556         [TestMethod]\r
557         public void BattleResult_822_854()\r
558         {\r
559             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
560             questInfo.InspectQuestList(CreateQuestList(new[] {822, 854}));\r
561 \r
562             questInfo.InspectMapNext(Js(new\r
563             {\r
564                 api_maparea_id = 2,\r
565                 api_mapinfo_no = 4,\r
566                 api_event_id = 5\r
567             }));\r
568             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
569             questInfo.InspectMapNext(Js(new\r
570             {\r
571                 api_maparea_id = 6,\r
572                 api_mapinfo_no = 1,\r
573                 api_event_id = 5\r
574             }));\r
575             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
576             questInfo.InspectMapNext(Js(new\r
577             {\r
578                 api_maparea_id = 6,\r
579                 api_mapinfo_no = 3,\r
580                 api_event_id = 5\r
581             }));\r
582             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
583             questInfo.InspectMapNext(Js(new\r
584             {\r
585                 api_maparea_id = 6,\r
586                 api_mapinfo_no = 4,\r
587                 api_event_id = 5\r
588             }));\r
589             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
590             PAssert.That(() => questInfo.Quests[1].Count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}));\r
591             PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
592             questInfo.InspectMapNext(Js(new\r
593             {\r
594                 api_maparea_id = 2,\r
595                 api_mapinfo_no = 4,\r
596                 api_event_id = 5\r
597             }));\r
598             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
599             PAssert.That(() => questInfo.Quests[1].Count.NowArray.SequenceEqual(new[] {2, 1, 1, 1}));\r
600             PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
601         }\r
602 \r
603         /// <summary>\r
604         /// 861: 強行輸送艦隊、抜錨!\r
605         /// </summary>\r
606         [TestMethod]\r
607         public void MapNext_861()\r
608         {\r
609             var battleInfo = new BattleInfo(null, null);\r
610             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
611             questInfo.InspectQuestList(CreateQuestList(new[] {861}));\r
612 \r
613             battleInfo.InjectResultStatus(new[]\r
614             {\r
615                 ShipStatus(10), ShipStatus(22), ShipStatus(2),\r
616                 ShipStatus(2), ShipStatus(2), ShipStatus(2)\r
617             }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
618 \r
619             questInfo.InspectMapNext(Js(new\r
620             {\r
621                 api_maparea_id = 1,\r
622                 api_mapinfo_no = 6,\r
623                 api_event_id = 4\r
624             }));\r
625             questInfo.InspectMapNext(Js(new\r
626             {\r
627                 api_maparea_id = 1,\r
628                 api_mapinfo_no = 6,\r
629                 api_event_id = 8\r
630             }));\r
631             PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
632 \r
633             battleInfo.Result.Friend.Main[1].NowHp = 0;\r
634             questInfo.InspectMapNext(Js(new\r
635             {\r
636                 api_maparea_id = 1,\r
637                 api_mapinfo_no = 6,\r
638                 api_event_id = 8\r
639             }));\r
640             PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "轟沈あり");\r
641             battleInfo.Result.Friend.Main[1].NowHp = 1;\r
642 \r
643             battleInfo.Result.Friend.Main[2].Spec.ShipType = 10;\r
644             questInfo.InspectMapNext(Js(new\r
645             {\r
646                 api_maparea_id = 1,\r
647                 api_mapinfo_no = 6,\r
648                 api_event_id = 8\r
649             }));\r
650             PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "補給・航戦が3隻");\r
651         }\r
652 \r
653         /// <summary>\r
654         /// 862: 前線の航空偵察を実施せよ!\r
655         /// </summary>\r
656         [TestMethod]\r
657         public void BattleResult_862()\r
658         {\r
659             var battleInfo = new BattleInfo(null, null);\r
660             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
661             questInfo.InspectQuestList(CreateQuestList(new[] {862}));\r
662 \r
663             battleInfo.InjectResultStatus(new[]\r
664             {\r
665                 ShipStatus(2), ShipStatus(3), ShipStatus(3),\r
666                 ShipStatus(2), ShipStatus(2), ShipStatus(16)\r
667             }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
668             questInfo.InspectMapNext(Js(new\r
669             {\r
670                 api_maparea_id = 6,\r
671                 api_mapinfo_no = 3,\r
672                 api_event_id = 4\r
673             }));\r
674             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
675             questInfo.InspectMapNext(Js(new\r
676             {\r
677                 api_maparea_id = 6,\r
678                 api_mapinfo_no = 3,\r
679                 api_event_id = 5\r
680             }));\r
681             questInfo.InspectBattleResult(Js(new {api_win_rank = "B"}));\r
682             PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
683             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
684             PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
685 \r
686             battleInfo.Result.Friend.Main[1].NowHp = 0;\r
687             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
688             PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "轟沈あり");\r
689             battleInfo.Result.Friend.Main[1].NowHp = 1;\r
690 \r
691             battleInfo.Result.Friend.Main[4].Spec.ShipType = 16;\r
692             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
693             PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "水母2隻");\r
694         }\r
695 \r
696         /// <summary>\r
697         /// 873: 北方海域警備を実施せよ!\r
698         /// </summary>\r
699         [TestMethod]\r
700         public void BattleResult_873()\r
701         {\r
702             var battleInfo = new BattleInfo(null, null);\r
703             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
704             questInfo.InspectQuestList(CreateQuestList(new[] {873}));\r
705 \r
706             battleInfo.InjectResultStatus(new[]\r
707             {\r
708                 ShipStatus(3), ShipStatus(2), ShipStatus(2),\r
709                 ShipStatus(2), ShipStatus(2), ShipStatus(2)\r
710             }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
711             questInfo.InspectMapNext(Js(new\r
712             {\r
713                 api_maparea_id = 3,\r
714                 api_mapinfo_no = 1,\r
715                 api_event_id = 4\r
716             }));\r
717             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
718             questInfo.InspectMapNext(Js(new\r
719             {\r
720                 api_maparea_id = 3,\r
721                 api_mapinfo_no = 1,\r
722                 api_event_id = 5\r
723             }));\r
724             questInfo.InspectBattleResult(Js(new {api_win_rank = "B"}));\r
725             PAssert.That(() => questInfo.Quests[0].Count.NowArray[0] == 0);\r
726             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
727             PAssert.That(() => questInfo.Quests[0].Count.NowArray[0] == 1);\r
728 \r
729             battleInfo.Result.Friend.Main[0].Spec.ShipType = 2;\r
730             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
731             PAssert.That(() => questInfo.Quests[0].Count.NowArray[0] == 1, "軽巡なし");\r
732             battleInfo.Result.Friend.Main[0].Spec.ShipType = 3;\r
733 \r
734             questInfo.InspectMapNext(Js(new\r
735             {\r
736                 api_maparea_id = 3,\r
737                 api_mapinfo_no = 2,\r
738                 api_event_id = 5\r
739             }));\r
740             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
741             questInfo.InspectMapNext(Js(new\r
742             {\r
743                 api_maparea_id = 3,\r
744                 api_mapinfo_no = 3,\r
745                 api_event_id = 5\r
746             }));\r
747             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
748             PAssert.That(() => questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
749         }\r
750 \r
751         /// <summary>\r
752         /// 875: 精鋭「三一駆」、鉄底海域に突入せよ!\r
753         /// </summary>\r
754         [TestMethod]\r
755         public void BattleResult_875()\r
756         {\r
757             var battleInfo = new BattleInfo(null, null);\r
758             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
759             questInfo.InspectQuestList(CreateQuestList(new[] {875}));\r
760 \r
761             battleInfo.InjectResultStatus(new[]\r
762             {\r
763                 ShipStatus(2, 543), ShipStatus(8, 360), ShipStatus(11, 545),\r
764                 ShipStatus(18, 467), ShipStatus(11, 261), ShipStatus(2, 344)\r
765             }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
766             questInfo.InspectMapNext(Js(new\r
767             {\r
768                 api_maparea_id = 5,\r
769                 api_mapinfo_no = 4,\r
770                 api_event_id = 4\r
771             }));\r
772             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
773             questInfo.InspectMapNext(Js(new\r
774             {\r
775                 api_maparea_id = 5,\r
776                 api_mapinfo_no = 4,\r
777                 api_event_id = 5\r
778             }));\r
779             questInfo.InspectBattleResult(Js(new {api_win_rank = "A"}));\r
780             PAssert.That(() => questInfo.Quests[0].Count.Now == 0);\r
781             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
782             PAssert.That(() => questInfo.Quests[0].Count.Now == 1);\r
783 \r
784             battleInfo.Result.Friend.Main[5].NowHp = 0;\r
785             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
786             PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "朝霜改轟沈");\r
787             battleInfo.Result.Friend.Main[5].NowHp = 1;\r
788 \r
789             battleInfo.Result.Friend.Main[0].Spec.Id = 345;\r
790             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
791             PAssert.That(() => questInfo.Quests[0].Count.Now == 1, "長波改二なし");\r
792             battleInfo.Result.Friend.Main[0].Spec.Id = 543;\r
793 \r
794             battleInfo.Result.Friend.Main[5].Spec.Id = 345;\r
795             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
796             PAssert.That(() => questInfo.Quests[0].Count.Now == 2, "高波改");\r
797             battleInfo.Result.Friend.Main[5].Spec.Id = 359;\r
798             questInfo.InspectBattleResult(Js(new {api_win_rank = "S"}));\r
799             PAssert.That(() => questInfo.Quests[0].Count.Now == 3, "沖波改");\r
800         }\r
801 \r
802         /// <summary>\r
803         /// 302: 大規模演習\r
804         /// 303: 「演習」で練度向上!\r
805         /// 304: 「演習」で他提督を圧倒せよ!\r
806         /// 311: 精鋭艦隊演習\r
807         /// 318: 給糧艦「伊良湖」の支援\r
808         /// </summary>\r
809         [TestMethod]\r
810         public void PracticeResult_303_304_302_311_318()\r
811         {\r
812             var battleInfo = new BattleInfo(null, null);\r
813             var questInfo = new QuestInfo(null, battleInfo, () => new DateTime(2015, 1, 1));\r
814             questInfo.InspectQuestList(CreateQuestList(new[] {302, 303, 304, 311, 318}));\r
815 \r
816             battleInfo.InjectResultStatus(new[]\r
817             {\r
818                 ShipStatus(2, 543), ShipStatus(3, 488)\r
819             }, new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]);\r
820             questInfo.InspectPracticeResult(Js(new {api_win_rank = "C"}));\r
821             questInfo.InspectPracticeResult(Js(new {api_win_rank = "A"}));\r
822             PAssert.That(() =>\r
823                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
824                     .SequenceEqual(new[]\r
825                     {\r
826                         new {Id = 302, Now = 1}, new {Id = 303, Now = 2}, new {Id = 304, Now = 1},\r
827                         new {Id = 311, Now = 1}, new {Id = 318, Now = 0}\r
828                     }));\r
829             // 318\r
830             battleInfo.Result.Friend.Main[0] = ShipStatus(3, 200);\r
831             questInfo.InspectPracticeResult(Js(new {api_win_rank = "A"}));\r
832             PAssert.That(() => questInfo.Quests[4].Count.Now == 1);\r
833             questInfo.Quests[4].Count.Now = 3;\r
834             questInfo.InspectQuestList(CreateQuestList(new[] {318}));\r
835             PAssert.That(() => questInfo.Quests[4].Count.Now == 3, "進捗調節しない");\r
836         }\r
837 \r
838         /// <summary>\r
839         /// 402: 「遠征」を3回成功させよう!\r
840         /// 403: 「遠征」を10回成功させよう!\r
841         /// 404: 大規模遠征作戦、発令!\r
842         /// 410: 南方への輸送作戦を成功させよ!\r
843         /// 411: 南方への鼠輸送を継続実施せよ!\r
844         /// </summary>\r
845         [TestMethod]\r
846         public void MissionResult_402_403_404_410_411()\r
847         {\r
848             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
849             questInfo.InspectQuestList(CreateQuestList(new[] {402, 403, 404, 410, 411}));\r
850 \r
851             questInfo.InspectDeck(Js(\r
852                 new[]\r
853                 {\r
854                     new {api_id = 2, api_mission = new[] {2, 6}},\r
855                     new {api_id = 3, api_mission = new[] {2, 37}},\r
856                     new {api_id = 4, api_mission = new[] {2, 2}}\r
857                 }));\r
858             questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
859             questInfo.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 2}));\r
860             questInfo.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 0}));\r
861             PAssert.That(() =>\r
862                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
863                     .SequenceEqual(new[]\r
864                     {\r
865                         new {Id = 402, Now = 2}, new {Id = 403, Now = 2}, new {Id = 404, Now = 2},\r
866                         new {Id = 410, Now = 1}, new {Id = 411, Now = 1}\r
867                     }));\r
868         }\r
869 \r
870         /// <summary>\r
871         /// 426: 海上通商航路の警戒を厳とせよ!\r
872         /// </summary>\r
873         [TestMethod]\r
874         public void MissionResult_426()\r
875         {\r
876             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
877             questInfo.InspectQuestList(CreateQuestList(new[] {426}));\r
878 \r
879             questInfo.InspectDeck(Js(\r
880                 new[]\r
881                 {\r
882                     new {api_id = 2, api_mission = new[] {2, 3}},\r
883                     new {api_id = 3, api_mission = new[] {2, 4}},\r
884                     new {api_id = 4, api_mission = new[] {2, 5}}\r
885                 }));\r
886             questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
887             questInfo.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
888             questInfo.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
889             PAssert.That(() =>\r
890                 questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1, 0}));\r
891             questInfo.InspectDeck(Js(\r
892                 new[]\r
893                 {\r
894                     new {api_id = 2, api_mission = new[] {2, 10}}\r
895                 }));\r
896             questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
897             PAssert.That(() =>\r
898                 questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1, 1}));\r
899         }\r
900 \r
901         /// <summary>\r
902         /// 428: 近海に侵入する敵潜を制圧せよ!\r
903         /// </summary>\r
904         [TestMethod]\r
905         public void MissionResult_428()\r
906         {\r
907             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
908             questInfo.InspectQuestList(CreateQuestList(new[] {428}));\r
909 \r
910             questInfo.InspectDeck(Js(\r
911                 new[]\r
912                 {\r
913                     new {api_id = 2, api_mission = new[] {2, 4}},\r
914                     new {api_id = 3, api_mission = new[] {2, 101}},\r
915                     new {api_id = 4, api_mission = new[] {2, 102}}\r
916                 }));\r
917             questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1}));\r
918             questInfo.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1}));\r
919             questInfo.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1}));\r
920             PAssert.That(() =>\r
921                 questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1}));\r
922         }\r
923 \r
924         /// <summary>\r
925         /// 503: 艦隊大整備!\r
926         /// 504: 艦隊酒保祭り!\r
927         /// </summary>\r
928         [TestMethod]\r
929         public void Powerup_503_504()\r
930         {\r
931             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
932             questInfo.InspectQuestList(CreateQuestList(new[] {503, 504}));\r
933 \r
934             questInfo.CountNyukyo();\r
935             questInfo.CountCharge();\r
936             PAssert.That(() =>\r
937                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
938                     .SequenceEqual(new[] {new {Id = 503, Now = 1}, new {Id = 504, Now = 1}}));\r
939         }\r
940 \r
941         /// <summary>\r
942         /// 605: 新装備「開発」指令\r
943         /// 606: 新造艦「建造」指令\r
944         /// 607: 装備「開発」集中強化!\r
945         /// 608: 艦娘「建造」艦隊強化!\r
946         /// 609: 軍縮条約対応!\r
947         /// 619: 装備の改修強化\r
948         /// </summary>\r
949         [TestMethod]\r
950         public void Kousyou_605_606_607_608_609_619()\r
951         {\r
952             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1)) {AcceptMax = 6};\r
953             questInfo.InspectQuestList(CreateQuestList(new[] {605, 606, 607, 608, 609, 619}));\r
954 \r
955             questInfo.CountCreateItem();\r
956             questInfo.CountCreateShip();\r
957             questInfo.InspectDestroyShip("api%5Fship%5Fid=98159%2C98166%2C98168&api%5Fverno=1");\r
958             questInfo.CountRemodelSlot();\r
959             PAssert.That(() =>\r
960                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
961                     .SequenceEqual(new[]\r
962                     {\r
963                         new {Id = 605, Now = 1}, new {Id = 606, Now = 1}, new {Id = 607, Now = 1},\r
964                         new {Id = 608, Now = 1}, new {Id = 609, Now = 3}, new {Id = 619, Now = 1}\r
965                     }));\r
966         }\r
967 \r
968         /// <summary>\r
969         /// 613: 資源の再利用\r
970         /// 638: 対空機銃量産\r
971         /// 663: 新型艤装の継続研究\r
972         /// 673: 装備開発力の整備\r
973         /// 674: 工廠環境の整備\r
974         /// 675: 運用装備の統合整備\r
975         /// 676: 装備開発力の集中整備\r
976         /// 677: 継戦支援能力の整備\r
977         /// 678: 主力艦上戦闘機の更新\r
978         /// 680: 対空兵装の整備拡充\r
979         /// </summary>\r
980         [TestMethod]\r
981         public void DestroyItem_613_638_663_673_674_675_676_677_678()\r
982         {\r
983             var itemInfo = new ItemInfo();\r
984             var questInfo = new QuestInfo(itemInfo, null, () => new DateTime(2015, 1, 1)) {AcceptMax = 10};\r
985 \r
986             itemInfo.InjectItemSpec(new[]\r
987             {\r
988                 new ItemSpec {Id = 1, Name = "12cm単装砲", Type = 1},\r
989                 new ItemSpec {Id = 37, Name = "7.7mm機銃", Type = 21},\r
990                 new ItemSpec {Id = 19, Name = "九六式艦戦", Type = 6},\r
991                 new ItemSpec {Id = 4, Name = "14cm単装砲", Type = 2},\r
992                 new ItemSpec {Id = 11, Name = "15.2cm単装砲", Type = 4},\r
993                 new ItemSpec {Id = 75, Name = "ドラム缶(輸送用)", Type = 30},\r
994                 new ItemSpec {Id = 7, Name = "35.6cm連装砲", Type = 3},\r
995                 new ItemSpec {Id = 25, Name = "零式水上偵察機", Type = 10},\r
996                 new ItemSpec {Id = 13, Name = "61cm三連装魚雷", Type = 5},\r
997                 new ItemSpec {Id = 20, Name = "零式艦戦21型", Type = 6},\r
998                 new ItemSpec {Id = 28, Name = "22号水上電探", Type = 12},\r
999                 new ItemSpec {Id = 31, Name = "32号水上電探", Type = 13}\r
1000             });\r
1001             var items = new[] {1, 37, 19, 4, 11, 75, 7, 25, 13, 20, 28, 31};\r
1002             itemInfo.InjectItems(items);\r
1003             questInfo.InspectQuestList(CreateQuestList(new[]\r
1004                 {613, 638, 663, 673, 674, 675, 676, 677, 678, 680}));\r
1005             questInfo.InspectDestroyItem(\r
1006                 $"api%5Fslotitem%5Fids={string.Join("%2C", Enumerable.Range(1, items.Length))}&api%5Fverno=1", null);\r
1007             var scalar = new[]\r
1008             {\r
1009                 new {Id = 613, Now = 1}, new {Id = 638, Now = 1},\r
1010                 new {Id = 663, Now = 1}, new {Id = 673, Now = 1}, new {Id = 674, Now = 1}\r
1011             };\r
1012             foreach (var e in scalar)\r
1013             {\r
1014                 var c = Array.Find(questInfo.Quests, q => q.Id == e.Id).Count;\r
1015                 PAssert.That(() => c.Id == e.Id && c.Now == e.Now, $"{c.Id}");\r
1016             }\r
1017             var array = new[]\r
1018             {\r
1019                 new {Id = 675, NowArray = new[] {2, 1}}, new {Id = 676, NowArray = new[] {1, 1, 1}},\r
1020                 new {Id = 677, NowArray = new[] {1, 1, 1}}, new {Id = 678, NowArray = new[] {1, 1}},\r
1021                 new {Id = 680, NowArray = new[] {1, 2}}\r
1022             };\r
1023             foreach (var e in array)\r
1024             {\r
1025                 var c = Array.Find(questInfo.Quests, q => q.Id == e.Id).Count;\r
1026                 PAssert.That(() => c.Id == e.Id && c.NowArray.SequenceEqual(e.NowArray), $"{c.Id}");\r
1027             }\r
1028         }\r
1029 \r
1030         /// <summary>\r
1031         /// 702: 艦の「近代化改修」を実施せよ!\r
1032         /// 703: 「近代化改修」を進め、戦備を整えよ!\r
1033         /// </summary>\r
1034         [TestMethod]\r
1035         public void Powerup_702_703()\r
1036         {\r
1037             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
1038             questInfo.InspectQuestList(CreateQuestList(new[] {702, 703}));\r
1039             questInfo.InspectPowerup(Js(new {api_powerup_flag = 1}));\r
1040             PAssert.That(() =>\r
1041                 questInfo.Quests.Select(q => new {q.Id, q.Count.Now})\r
1042                     .SequenceEqual(new[] {new {Id = 702, Now = 1}, new {Id = 703, Now = 1}}));\r
1043         }\r
1044 \r
1045         [TestMethod]\r
1046         public void NotImplemented()\r
1047         {\r
1048             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
1049             questInfo.InspectQuestList(CreateQuestList(new[] {679}));\r
1050             PAssert.That(() => questInfo.Quests[0].Count.Spec.Material.Length == 0);\r
1051         }\r
1052 \r
1053         /// <summary>\r
1054         /// 文字列表記にする\r
1055         /// </summary>\r
1056         [TestMethod]\r
1057         public void ToStringTest()\r
1058         {\r
1059             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
1060             var status = new Status\r
1061             {\r
1062                 QuestCountList = new[]\r
1063                 {\r
1064                     new QuestCount {Id = 211, Now = 2},\r
1065                     new QuestCount {Id = 214, NowArray = new[] {20, 7, 10, 8}},\r
1066                     new QuestCount {Id = 854, NowArray = new[] {2, 1, 1, 1}},\r
1067                     new QuestCount {Id = 426, NowArray = new[] {1, 1, 1, 1}},\r
1068                     new QuestCount {Id = 428, NowArray = new[] {1, 1, 1}},\r
1069                     new QuestCount {Id = 873, NowArray = new[] {1, 1, 1}}\r
1070                 }\r
1071             };\r
1072             questInfo.LoadState(status);\r
1073             PAssert.That(() => status.QuestCountList[0].ToString() == "2/3");\r
1074             PAssert.That(() => status.QuestCountList[1].ToString() == "20/36 7/6 10/24 8/12");\r
1075             var z = status.QuestCountList[2];\r
1076             PAssert.That(() => z.ToString() == "4/4");\r
1077             PAssert.That(() => z.ToToolTip() == "2-4 6-1 6-3 6-4");\r
1078             z.NowArray = new[] {0, 0, 0, 0};\r
1079             PAssert.That(() => z.ToToolTip() == "");\r
1080             var q426 = status.QuestCountList[3];\r
1081             PAssert.That(() => q426.ToString() == "4/4");\r
1082             PAssert.That(() => q426.ToToolTip() == "警備任務 対潜警戒任務 海上護衛任務 強硬偵察任務");\r
1083             var q428 = status.QuestCountList[4];\r
1084             PAssert.That(() => q428.ToToolTip() == "対潜警戒任務1 海峡警備行動1 長時間対潜警戒1");\r
1085             q428.NowArray = new[] {0, 1, 0};\r
1086             PAssert.That(() => q428.ToToolTip() == "海峡警備行動1");\r
1087             var q873 = status.QuestCountList[5];\r
1088             PAssert.That(() => q873.ToString() == "3/3");\r
1089             PAssert.That(() => q873.ToToolTip() == "3-1 3-2 3-3");\r
1090         }\r
1091 \r
1092         /// <summary>\r
1093         /// 状態をロードするときに獲得資材に特殊資材のリストを追加しない\r
1094         /// </summary>\r
1095         [TestMethod]\r
1096         public void LoadStateNotAppendMaterialList()\r
1097         {\r
1098             var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1));\r
1099             var status = new Status\r
1100             {\r
1101                 QuestList = new[]\r
1102                 {\r
1103                     new QuestStatus\r
1104                     {\r
1105                         Id = 854,\r
1106                         Category = 8,\r
1107                         Name = "",\r
1108                         Detail = "",\r
1109                         Material = new[] {0, 2000, 0, 0, 0, 0, 0, 4}\r
1110                     }\r
1111                 },\r
1112                 QuestCountList = new[]\r
1113                 {\r
1114                     new QuestCount {Id = 854, NowArray = new[] {1, 0, 1, 0}}\r
1115                 }\r
1116             };\r
1117             questInfo.LoadState(status);\r
1118             PAssert.That(() => questInfo.Quests[0].Material.Length == 8);\r
1119         }\r
1120     }\r
1121 }