X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=KancolleSniffer.Test%2FQuestCounterTest.cs;h=d93ddf98d879011ab036ee97ffeb34b3259f42e7;hb=596f73416f78e960dac3725ac086c8c687dd3916;hp=42bb19cfd8ae4004de4c5671ccc163a279bb4e33;hpb=1413b93098b14ca657b78b3d400494b437a6bed8;p=kancollesniffer%2FKancolleSniffer.git diff --git a/KancolleSniffer.Test/QuestCounterTest.cs b/KancolleSniffer.Test/QuestCounterTest.cs index 42bb19c..d93ddf9 100644 --- a/KancolleSniffer.Test/QuestCounterTest.cs +++ b/KancolleSniffer.Test/QuestCounterTest.cs @@ -13,6 +13,7 @@ // limitations under the License. using System; +using System.Collections.Generic; using System.Linq; using DynaJson; using ExpressionToCodeLib; @@ -166,9 +167,12 @@ namespace KancolleSniffer.Test new QuestCount {Id = 872, NowArray = new[] {1, 1, 1, 1}}, new QuestCount {Id = 284, NowArray = new[] {1, 1, 1, 1}}, new QuestCount {Id = 226, Now = 2}, + new QuestCount {Id = 434, NowArray = new[] {1, 0, 1, 0, 1}}, new QuestCount {Id = 436, NowArray = new[] {1, 0, 1, 1, 1}}, new QuestCount {Id = 437, NowArray = new[] {1, 0, 1, 1}}, - new QuestCount {Id = 438, NowArray = new[] {1, 0, 1, 1}} + new QuestCount {Id = 438, NowArray = new[] {1, 0, 1, 1}}, + new QuestCount {Id = 439, NowArray = new[] {1, 0, 1, 1}}, + new QuestCount {Id = 440, NowArray = new[] {1, 0, 1, 1, 1}} } }; var countList = new QuestCountList(); @@ -181,13 +185,18 @@ namespace KancolleSniffer.Test new {api_id = 5, api_name = "海上護衛任務"}, new {api_id = 9, api_name = "タンカー護衛任務"}, new {api_id = 10, api_name = "強行偵察任務"}, + new {api_id = 11, api_name = "ボーキサイト輸送任務"}, + new {api_id = 40, api_name = "水上機前線輸送"}, + new {api_id = 41, api_name = "ブルネイ泊地沖哨戒"}, + new {api_id = 46, api_name = "南西海域戦闘哨戒"}, new {api_id = 100, api_name = "兵站強化任務"}, new {api_id = 101, api_name = "海峡警備行動"}, new {api_id = 102, api_name = "長時間対潜警戒"}, new {api_id = 104, api_name = "小笠原沖哨戒線"}, new {api_id = 105, api_name = "小笠原沖戦闘哨戒"}, new {api_id = 110, api_name = "南西方面航空偵察作戦"}, - new {api_id = 114, api_name = "南西諸島捜索撃滅戦"} + new {api_id = 114, api_name = "南西諸島捜索撃滅戦"}, + new {api_id = 142, api_name = "強行鼠輸送作戦"} })); new QuestInfo(countList).LoadState(status); Assert.AreEqual("2/3", status.QuestCountList[0].ToString()); @@ -229,6 +238,9 @@ namespace KancolleSniffer.Test var q226 = status.QuestCountList.First(q => q.Id == 226); Assert.AreEqual("2/5", q226.ToString()); Assert.AreEqual("", q226.ToToolTip()); + var q434 = status.QuestCountList.First(q => q.Id == 434); + Assert.AreEqual("1\u200a0\u200a1\u200a0\u200a1", q434.ToString()); + Assert.AreEqual("警備任務1 海上護衛任務0 兵站強化任務1 海峡警備行動0 タンカー護衛任務1", q434.ToToolTip()); var q436 = status.QuestCountList.First(q => q.Id == 436); Assert.AreEqual("1\u200a0\u200a1\u200a1\u200a1", q436.ToString()); Assert.AreEqual("練習航海1 長距離練習航海0 警備任務1 対潜警戒任務1 強行偵察任務1", q436.ToToolTip()); @@ -237,7 +249,13 @@ namespace KancolleSniffer.Test Assert.AreEqual("対潜警戒任務1 小笠原沖哨戒線0 小笠原沖戦闘哨戒1 南西方面航空偵察作戦1", q437.ToToolTip()); var q438 = status.QuestCountList.First(q => q.Id == 438); Assert.AreEqual("1\u200a0\u200a1\u200a1", q438.ToString()); - Assert.AreEqual("対潜警戒任務1 兵站強化任務0 タンカー護衛任務1 南西諸島捜索撃滅戦1", q438.ToToolTip()); + Assert.AreEqual("兵站強化任務1 対潜警戒任務0 タンカー護衛任務1 南西諸島捜索撃滅戦1", q438.ToToolTip()); + var q439 = status.QuestCountList.First(q => q.Id == 439); + Assert.AreEqual("1\u200a0\u200a1\u200a1", q439.ToString()); + Assert.AreEqual("海上護衛任務1 兵站強化任務0 ボーキサイト輸送任務1 南西方面航空偵察作戦1", q439.ToToolTip()); + var q440 = status.QuestCountList.First(q => q.Id == 440); + Assert.AreEqual("1\u200a0\u200a1\u200a1\u200a1", q440.ToString()); + Assert.AreEqual("ブルネイ泊地沖哨戒1 海上護衛任務0 水上機前線輸送1 強行鼠輸送作戦1 南西海域戦闘哨戒1", q440.ToToolTip()); } } @@ -326,7 +344,8 @@ namespace KancolleSniffer.Test private BattleInfo _battleInfo; - private ItemInfo _itemInfo; + private ItemInventory _itemInventory; + private ShipInventory _shipInventory; private QuestInfo _questInfo; private QuestCounter _questCounter; @@ -334,9 +353,10 @@ namespace KancolleSniffer.Test public void Initialize() { _battleInfo = new BattleInfo(null, null, null); - _itemInfo = new ItemInfo(new ItemMaster(), new ItemInventory()); + _itemInventory = new ItemInventory(); + _shipInventory = new ShipInventory(); _questInfo = new QuestInfo(new QuestCountList(), () => new DateTime(2015, 1, 1)); - _questCounter = new QuestCounter(_questInfo, _itemInfo, _battleInfo); + _questCounter = new QuestCounter(_questInfo, _itemInventory, _shipInventory, _battleInfo); } /// @@ -750,6 +770,36 @@ namespace KancolleSniffer.Test } /// + /// 840: 【節分任務】令和三年節分作戦 + /// + [TestMethod] + public void BattleResult_840() + { + var count = InjectQuest(840); + + _battleInfo.InjectResultStatus( + ShipStatusList(7, 2, 1), new ShipStatus[0], + new ShipStatus[0], new ShipStatus[0]); + + InjectMapNext(21, 5); + InjectBattleResult("A"); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0})); + _battleInfo.Result.Friend.Main = ShipStatusList(7, 2, 1, 1); + InjectBattleResult("B"); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0})); + InjectBattleResult("A"); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0})); + + _battleInfo.Result.Friend.Main = ShipStatusList(3, 2, 1, 1); + InjectMapNext(22, 5); + InjectBattleResult("A"); + _battleInfo.Result.Friend.Main = ShipStatusList(21, 2, 1, 1); + InjectMapNext(23, 5); + InjectBattleResult("A"); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1})); + } + + /// /// 822: 沖ノ島海域迎撃戦 /// 854: 戦果拡張任務!「Z作戦」前段作戦 /// @@ -1350,6 +1400,43 @@ namespace KancolleSniffer.Test } /// + /// 928: 歴戦「第十方面艦隊」、全力出撃! + /// + [TestMethod] + public void BattleResult_928() + { + var count = InjectQuest(928); + _battleInfo.InjectResultStatus( + new[] + { + ShipStatus("羽黒改二"), ShipStatus("那智"), ShipStatus(1), ShipStatus(1), ShipStatus(1), ShipStatus(1) + }, + new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]); + + InjectMapNext(732, 5); + InjectBattleResult("S"); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0})); + + _battleInfo.Result.Friend.Main[1] = ShipStatus("妙高"); + InjectBattleResult("A"); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {0, 0, 0})); + InjectBattleResult("S"); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 0, 0})); + + _battleInfo.Result.Friend.Main[0] = ShipStatus("妙高"); + _battleInfo.Result.Friend.Main[1] = ShipStatus("高雄"); + InjectMapNext(722, 5); + InjectBattleResult("S"); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 0})); + + _battleInfo.Result.Friend.Main[0] = ShipStatus("神風"); + _battleInfo.Result.Friend.Main[1] = ShipStatus("高雄"); + InjectMapNext(42, 5); + InjectBattleResult("S"); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1})); + } + + /// /// 280と854以降を同時に遂行していると854以降がカウントされないことがある /// [TestMethod] @@ -1441,6 +1528,29 @@ namespace KancolleSniffer.Test } /// + /// 329: 【節分任務】節分演習! + /// + [TestMethod] + public void PracticeResult_329() + { + var count = InjectQuest(329); + + _battleInfo.InjectResultStatus( + ShipStatusList(3, 2), + new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]); + InjectPracticeResult("S"); + Assert.AreEqual(0, count.Now, "軽巡、駆逐"); + + _battleInfo.Result.Friend.Main = ShipStatusList(3, 2, 1); + InjectPracticeResult("A"); + Assert.AreEqual(0, count.Now, "A勝利でカウントしない"); + + _battleInfo.Result.Friend.Main = ShipStatusList(3, 2, 1); + InjectPracticeResult("S"); + Assert.AreEqual(1, count.Now, "軽巡、駆逐、海防"); + } + + /// /// 330: 空母機動部隊、演習始め! /// [TestMethod] @@ -1561,6 +1671,60 @@ namespace KancolleSniffer.Test } /// + /// 345: 演習ティータイム! + /// + [TestMethod] + public void PracticeResult_345() + { + var count = InjectQuest(345); + + _battleInfo.InjectResultStatus(new []{ShipStatus("Warspite"), ShipStatus("金剛"), ShipStatus("Ark Royal"), ShipStatus("Richelieu"), ShipStatus("Perth")}, + new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]); + InjectPracticeResult("B"); + Assert.AreEqual(0, count.Now); + + InjectPracticeResult("A"); + Assert.AreEqual(0, count.Now); + + _battleInfo.Result.Friend.Main[3] = ShipStatus("Jervis"); + InjectPracticeResult("A"); + Assert.AreEqual(1, count.Now); + + _battleInfo.Result.Friend.Main[0] = ShipStatus("Janus"); + InjectPracticeResult("A"); + Assert.AreEqual(2, count.Now); + + _battleInfo.Result.Friend.Main[1] = ShipStatus("Richelieu"); + InjectPracticeResult("A"); + Assert.AreEqual(2, count.Now); + } + + /// + /// 346: 最精鋭!主力オブ主力、演習開始! + /// + [TestMethod] + public void PracticeResult_346() + { + var count = InjectQuest(346); + + _battleInfo.InjectResultStatus(new []{ShipStatus("夕雲改二"), ShipStatus("巻雲改二"), ShipStatus("風雲改二"), ShipStatus("秋雲改")}, + new ShipStatus[0], new ShipStatus[0], new ShipStatus[0]); + InjectPracticeResult("A"); + Assert.AreEqual(0, count.Now); + + InjectPracticeResult("S"); + Assert.AreEqual(0, count.Now); + + _battleInfo.Result.Friend.Main[3] = ShipStatus("秋雲改二"); + InjectPracticeResult("S"); + Assert.AreEqual(1, count.Now); + + _battleInfo.Result.Friend.Main[0] = ShipStatus("綾波改二"); + InjectPracticeResult("S"); + Assert.AreEqual(1, count.Now); + } + + /// /// 402: 「遠征」を3回成功させよう! /// 403: 「遠征」を10回成功させよう! /// 404: 大規模遠征作戦、発令! @@ -1641,6 +1805,37 @@ namespace KancolleSniffer.Test } /// + /// 434: 特設護衛船団司令部、活動開始! + /// + [TestMethod] + public void MissionResult_434() + { + var count = InjectQuest(434); + + _questCounter.InspectDeck(Js( + new[] + { + new {api_id = 2, api_mission = new[] {2, 3}}, + new {api_id = 3, api_mission = new[] {2, 5}}, + new {api_id = 4, api_mission = new[] {2, 100}} + })); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1})); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1})); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1})); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0, 0})); + + _questCounter.InspectDeck(Js( + new[] + { + new {api_id = 2, api_mission = new[] {2, 101}}, + new {api_id = 3, api_mission = new[] {2, 9}} + })); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1})); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1})); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1, 1})); + } + + /// /// 436: 練習航海及び警備任務を実施せよ! /// [TestMethod] @@ -1730,6 +1925,66 @@ namespace KancolleSniffer.Test } /// + /// 439: 兵站強化遠征任務【基本作戦】 + /// + [TestMethod] + public void MissionResult_439() + { + var count = InjectQuest(439); + + _questCounter.InspectDeck(Js( + new[] + { + new {api_id = 2, api_mission = new[] {2, 5}}, + new {api_id = 3, api_mission = new[] {2, 100}}, + new {api_id = 4, api_mission = new[] {2, 11}} + })); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1})); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1})); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1})); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0})); + + _questCounter.InspectDeck(Js( + new[] + { + new {api_id = 2, api_mission = new[] {2, 110}} + })); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1})); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1})); + } + + /// + /// 440: 兵站強化遠征任務【拡張作戦】 + /// + [TestMethod] + public void MissionResult_440() + { + var count = InjectQuest(440); + + _questCounter.InspectDeck(Js( + new[] + { + new {api_id = 2, api_mission = new[] {2, 41}}, + new {api_id = 3, api_mission = new[] {2, 5}}, + new {api_id = 4, api_mission = new[] {2, 40}} + })); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1})); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1})); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1})); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 0, 0})); + + _questCounter.InspectDeck(Js( + new[] + { + new {api_id = 2, api_mission = new[] {2, 142}}, + new {api_id = 3, api_mission = new[] {2, 46}} + })); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1})); + _questCounter.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new { api_clear_result = 1 })); + PAssert.That(() => count.NowArray.SequenceEqual(new[] {1, 1, 1, 1, 1})); + } + + /// /// 503: 艦隊大整備! /// 504: 艦隊酒保祭り! /// @@ -1780,6 +2035,8 @@ namespace KancolleSniffer.Test /// 643: 主力「陸攻」の調達 /// 645: 「洋上補給」物資の調達 /// 653: 工廠稼働!次期作戦準備! + /// 654: 精鋭複葉機飛行隊の編成 + /// 657: 新型兵装開発整備の強化 /// 663: 新型艤装の継続研究 /// 673: 装備開発力の整備 /// 674: 工廠環境の整備 @@ -1788,12 +2045,13 @@ namespace KancolleSniffer.Test /// 677: 継戦支援能力の整備 /// 678: 主力艦上戦闘機の更新 /// 680: 対空兵装の整備拡充 + /// 681: 航空戦力の再編増強準備 /// 688: 航空戦力の強化 /// [TestMethod] - public void DestroyItem_613_638_643_645_653_663_673_674_675_676_677_678_680_686_688() + public void DestroyItem_613_638_643_645_653_654_655_657_663_673_674_675_676_677_678_680_681_686_688() { - _itemInfo.InjectItemSpec(new[] + InjectItems(new[] { new ItemSpec {Id = 1, Name = "12cm単装砲", Type = 1}, new ItemSpec {Id = 37, Name = "7.7mm機銃", Type = 21}, @@ -1811,14 +2069,14 @@ namespace KancolleSniffer.Test new ItemSpec {Id = 23, Name = "九九式艦爆", Type = 7}, new ItemSpec {Id = 16, Name = "九七式艦攻", Type = 8}, new ItemSpec {Id = 3, Name = "10cm連装高角砲", Type = 1}, - new ItemSpec {Id = 121, Name = "94式高射装置", Type = 36} + new ItemSpec {Id = 121, Name = "94式高射装置", Type = 36}, + new ItemSpec {Id = 242, Name = "Swordfish", Type = 8}, + new ItemSpec {Id = 249, Name = "Fulmar", Type = 6} }); - var items = new[] {1, 37, 19, 4, 11, 75, 7, 25, 13, 20, 28, 31, 35, 23, 16, 3, 121}; - _itemInfo.InjectItems(items); - var questList = new[] {613, 638, 643, 645, 653, 663, 673, 674, 675, 676, 677, 678, 680, 686, 688}; + var questList = new[] {613, 638, 643, 645, 655, 653, 654, 657, 663, 673, 674, 675, 676, 677, 678, 680, 681, 686, 688}; InjectQuestList(questList); _questCounter.InspectDestroyItem( - $"api%5Fslotitem%5Fids={string.Join("%2C", Enumerable.Range(1, items.Length))}&api%5Fverno=1"); + $"api%5Fslotitem%5Fids={string.Join("%2C", Enumerable.Range(1, _itemInventory.Count))}&api%5Fverno=1"); var scalar = new[] { new {Id = 613, Now = 1}, new {Id = 638, Now = 1}, new {Id = 643, Now = 1}, new {Id = 645, Now = 1}, @@ -1832,10 +2090,13 @@ namespace KancolleSniffer.Test } var array = new[] { - new {Id = 675, NowArray = new[] {2, 1}}, new {Id = 676, NowArray = new[] {1, 1, 1}}, + new {Id = 654, NowArray = new[] {1, 1}}, new {Id = 655, NowArray = new[] {2, 1, 1, 1, 2}}, + new {Id = 657, NowArray = new[] {2, 1, 1}}, + new {Id = 675, NowArray = new[] {3, 1}}, new {Id = 676, NowArray = new[] {1, 1, 1}}, new {Id = 677, NowArray = new[] {1, 1, 1}}, new {Id = 678, NowArray = new[] {1, 1}}, new {Id = 680, NowArray = new[] {1, 2}}, new {Id = 686, NowArray = new[] {1, 1}}, - new {Id = 688, NowArray = new[] {2, 1, 1, 1}} + new {Id = 681, NowArray = new[] {1, 2}}, + new {Id = 688, NowArray = new[] {3, 1, 2, 1}} }; foreach (var e in array) { @@ -1845,6 +2106,11 @@ namespace KancolleSniffer.Test } } + private void InjectItems(IEnumerable specs) + { + _itemInventory.Add(specs.Select((s, i) => new ItemStatus{Id = i + 1, Spec = s})); + } + /// /// 702: 艦の「近代化改修」を実施せよ! /// 703: 「近代化改修」を進め、戦備を整えよ! @@ -1853,10 +2119,43 @@ namespace KancolleSniffer.Test public void PowerUp_702_703() { InjectQuestList(new[] {702, 703}); - _questCounter.InspectPowerUp(Js(new {api_powerup_flag = 1})); + _questCounter.InspectPowerUp("", Js(new {api_powerup_flag = 1})); PAssert.That(() => _questInfo.Quests.Select(q => new {q.Id, q.Count.Now}) .SequenceEqual(new[] {new {Id = 702, Now = 1}, new {Id = 703, Now = 1}})); } + + /// + /// 714: 「駆逐艦」の改修工事を実施せよ! + /// 715: 続:「駆逐艦」の改修工事を実施せよ! + /// + [TestMethod] + public void PowerUp_714_715() + { + var ships = new[] + { + ShipStatus(2), ShipStatus(2), ShipStatus(2), ShipStatus(2), + ShipStatus(3), ShipStatus(3), ShipStatus(3), ShipStatus(3) + }; + _shipInventory.Add(ships.Select((s, i) => + { + s.Id = i + 1; + return s; + })); + + var q714 = InjectQuest(714); + _questCounter.InspectPowerUp("api_id=3&api_id_items=1,2", Js(new {api_powerup_flag = 1})); + Assert.AreEqual(0, q714.Now); + _questCounter.InspectPowerUp("api_id=5&api_id_items=1,2,3", Js(new {api_powerup_flag = 1})); + Assert.AreEqual(0, q714.Now); + _questCounter.InspectPowerUp("api_id=4&api_id_items=1,2,3", Js(new {api_powerup_flag = 1})); + Assert.AreEqual(1, q714.Now); + + var q715 = InjectQuest(715); + _questCounter.InspectPowerUp("api_id=4&api_id_items=1,2,3", Js(new {api_powerup_flag = 1})); + Assert.AreEqual(0, q715.Now); + _questCounter.InspectPowerUp("api_id=4&api_id_items=5,6,7", Js(new {api_powerup_flag = 1})); + Assert.AreEqual(1, q715.Now); + } } } \ No newline at end of file