OSDN Git Service

ShipInfoとItemInfoから辞書を分離する
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer.Test / BattleTest.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 ExpressionToCodeLib;\r
17 using KancolleSniffer.Model;\r
18 using KancolleSniffer.Util;\r
19 using Microsoft.VisualStudio.TestTools.UnitTesting;\r
20 \r
21 namespace KancolleSniffer.Test\r
22 {\r
23     [TestClass]\r
24     public class BattleTest\r
25     {\r
26         private ItemInfo _itemInfo;\r
27         private ShipInfo _shipInfo;\r
28         private BattleInfo _battleInfo;\r
29 \r
30         private string[] ReadAllLines(string log)\r
31         {\r
32             using (var logfile = SnifferTest.OpenLogFile(log))\r
33                 return logfile.ReadToEnd().Split(new [] {"\r\n"}, StringSplitOptions.None);\r
34         }\r
35 \r
36         [TestInitialize]\r
37         public void Initialize()\r
38         {\r
39             _itemInfo = new ItemInfo(new ItemMaster(), new ItemInventry());\r
40             _shipInfo = new ShipInfo(new ShipMaster(), new ShipInventry(), _itemInfo);\r
41             _battleInfo = new BattleInfo(_shipInfo, _itemInfo);\r
42         }\r
43 \r
44         /// <summary>\r
45         /// 連撃を受けて女神が発動する\r
46         /// </summary>\r
47         [TestMethod]\r
48         public void CauseRepairGoddessByDoubleAttack()\r
49         {\r
50             var logs = ReadAllLines("damecon_001");\r
51             var items = JsonParser.Parse("[[[],[],[],[],[43]]]");\r
52             dynamic battle = JsonParser.Parse(logs[2]);\r
53             _shipInfo.InjectShips(battle, items);\r
54             _battleInfo.InspectBattle(logs[0], logs[1], battle);\r
55             dynamic result = JsonParser.Parse(logs[5]);\r
56             _battleInfo.InspectBattleResult(result);\r
57             PAssert.That(() => _shipInfo.Fleets[2].Ships[4].NowHp == 31);\r
58         }\r
59 \r
60         /// <summary>\r
61         /// 夜戦で戦艦の攻撃を受ける\r
62         /// </summary>\r
63         [TestMethod]\r
64         public void AttackedByBattleShipInMidnight()\r
65         {\r
66             var logs = ReadAllLines("midnight_002");\r
67             var battle = JsonParser.Parse(logs[3]);\r
68             _shipInfo.InjectShips(battle, JsonParser.Parse(logs[0]));\r
69             _battleInfo.InspectBattle(logs[1], logs[2], battle);\r
70             _battleInfo.InspectBattleResult(JsonParser.Parse(logs[6]));\r
71             PAssert.That(() => _shipInfo.Fleets[0].Ships[3].NowHp == 12);\r
72         }\r
73 \r
74         private dynamic Data(string json) => ((dynamic)JsonParser.Parse(json)).api_data;\r
75 \r
76         /// <summary>\r
77         /// NPC友軍の支援攻撃がある\r
78         /// </summary>\r
79         [TestMethod]\r
80         public void NpcFriendFleetAttack()\r
81         {\r
82             var logs = ReadAllLines("friendfleet_001");\r
83             var battle = Data(logs[3]);\r
84             _shipInfo.InjectShips(battle, JsonParser.Parse(logs[0]));\r
85             _battleInfo.InspectBattle(logs[1], logs[2], battle);\r
86             _battleInfo.InspectBattle(logs[4], logs[5], Data(logs[6]));\r
87             _battleInfo.InspectBattleResult(Data(logs[9]));\r
88             PAssert.That(() => !_battleInfo.DisplayedResultRank.IsError);\r
89         }\r
90 \r
91         /// <summary>\r
92         /// 空襲戦で轟沈する\r
93         /// </summary>\r
94         [TestMethod]\r
95         public void LdAirbattleHaveSunkenShip()\r
96         {\r
97             var logs = ReadAllLines("ld_airbattle_001");\r
98             var battle = Data(logs[3]);\r
99             _shipInfo.InjectShips(battle, JsonParser.Parse(logs[0]));\r
100             _battleInfo.InspectBattle(logs[1], logs[2], battle);\r
101             _battleInfo.InspectBattleResult(Data(logs[6]));\r
102             PAssert.That(() => !_battleInfo.DisplayedResultRank.IsError);\r
103         }\r
104 \r
105         /// <summary>\r
106         /// 空襲戦で女神が発動して復活する\r
107         /// </summary>\r
108         [TestMethod]\r
109         public void LdAirbattleHaveRevivedShip()\r
110         {\r
111             var logs = ReadAllLines("ld_airbattle_002");\r
112             var battle = Data(logs[3]);\r
113             _shipInfo.InjectShips(battle, JsonParser.Parse(logs[0]));\r
114             _battleInfo.InspectBattle(logs[1], logs[2], battle);\r
115             _battleInfo.InspectBattleResult(Data(logs[6]));\r
116             PAssert.That(() => !_battleInfo.DisplayedResultRank.IsError);\r
117         }\r
118 \r
119         /// <summary>\r
120         /// 機動対敵連合の雷撃戦でダメコンが発動する\r
121         /// </summary>\r
122         [TestMethod]\r
123         public void TreiggerDameconInCombinedBattle()\r
124         {\r
125             var logs = ReadAllLines("damecon_002");\r
126             var battle = Data(logs[3]);\r
127             _shipInfo.InjectShips(battle, JsonParser.Parse(logs[0]));\r
128             _battleInfo.InspectBattle(logs[1], logs[2], battle);\r
129             _battleInfo.InspectBattle(logs[4], logs[5], Data(logs[6]));\r
130             _battleInfo.InspectBattleResult(Data(logs[9]));\r
131             PAssert.That(() => !_battleInfo.DisplayedResultRank.IsError);\r
132         }\r
133     }\r
134 }