OSDN Git Service

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