OSDN Git Service

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