1 // Copyright (C) 2014, 2015 Kazuhiro Fujieda <fujieda@users.osdn.me>
\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
7 // http://www.apache.org/licenses/LICENSE-2.0
\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
16 using System.Collections.Generic;
\r
18 using ExpressionToCodeLib;
\r
19 using KancolleSniffer.Log;
\r
20 using KancolleSniffer.Util;
\r
21 using Microsoft.VisualStudio.TestTools.UnitTesting;
\r
24 namespace KancolleSniffer.Test
\r
26 using Sniffer = SnifferTest.TestingSniffer;
\r
29 public class LoggerTest
\r
32 public void Initialize()
\r
34 ExpressionToCodeConfiguration.GlobalAssertionConfiguration = ExpressionToCodeConfiguration
\r
35 .GlobalAssertionConfiguration.WithPrintedListLengthLimit(200).WithMaximumValueLength(1000);
\r
39 public void InspectMissionResult()
\r
41 var sniffer = new Sniffer();
\r
44 sniffer.SetLogWriter((path, s, h) =>
\r
48 }, () => new DateTime(2015, 1, 1));
\r
49 sniffer.SkipMaster();
\r
50 sniffer.EnableLog(LogType.Mission);
\r
51 SnifferTest.SniffLogFile(sniffer, "mission_result_001");
\r
52 PAssert.That(() => "日付,結果,遠征,燃料,弾薬,鋼材,ボーキ,開発資材,高速修復材,高速建造材,改修資材" == header);
\r
53 PAssert.That(() => "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0,0|" +
\r
54 "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0,0|" +
\r
55 "2015-01-01 00:00:00,大成功,MO作戦,0,0,360,420,1,0,0,0|" +
\r
56 "2015-01-01 00:00:00,失敗,東京急行(弐),0,0,0,0,0,0,0,0|"
\r
61 public void MissionResultGetScrew()
\r
63 var sniffer = new Sniffer();
\r
66 sniffer.SetLogWriter((path, s, h) =>
\r
70 }, () => new DateTime(2019, 1, 1));
\r
71 sniffer.SkipMaster();
\r
72 sniffer.EnableLog(LogType.Mission);
\r
73 SnifferTest.SniffLogFile(sniffer, "mission_result_002");
\r
74 PAssert.That(() => "日付,結果,遠征,燃料,弾薬,鋼材,ボーキ,開発資材,高速修復材,高速建造材,改修資材" == header);
\r
75 PAssert.That(() => "2019-01-01 00:00:00,大成功,南西諸島離島防衛作戦,0,0,1800,975,0,0,0,1|"
\r
80 /// 出力先に書けないときは一時ファイルに書き込む
\r
83 public void WriteTmpFileWhenCantWriteTarget()
\r
85 var mock = new Mock<LogWriter.IFile>();
\r
86 var writer = new LogWriter(null, mock.Object);
\r
88 const string str = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0";
\r
90 mock.Setup(l => l.AppendAllText(It.IsAny<string>(), It.IsAny<string>()))
\r
91 .Callback<string, string>((file, s) =>
\r
93 if (file.EndsWith(".csv"))
\r
94 throw new IOException();
\r
95 if (file.EndsWith(".tmp"))
\r
98 mock.SetupSequence(l => l.Exists(It.IsAny<string>())).Returns(false).Returns(true);
\r
99 writer.Write("遠征報告書", str, "");
\r
100 PAssert.That(() => "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n" == tmp);
\r
104 public void MergeTmpFile()
\r
106 MergeTmpFileMain(false);
\r
110 public void FailToMergeTmpFile()
\r
112 MergeTmpFileMain(true);
\r
115 private void MergeTmpFileMain(bool failToMerge)
\r
117 var mock = new Mock<LogWriter.IFile>();
\r
118 var writer = new LogWriter(null, mock.Object);
\r
120 var tmp = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n";
\r
122 mock.Setup(l => l.Exists(It.IsAny<string>())).Returns(true);
\r
123 mock.Setup(l => l.ReadAllText(It.IsAny<string>()))
\r
124 .Returns((string path) => path.EndsWith(".tmp") ? tmp : "");
\r
125 mock.Setup(l => l.AppendAllText(It.IsAny<string>(), It.IsAny<string>()))
\r
126 .Callback<string, string>((file, s) =>
\r
128 if (file.EndsWith(".tmp"))
\r
130 if (file.EndsWith(".csv"))
\r
133 throw new IOException();
\r
137 const string str = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0";
\r
138 writer.Write("遠征報告書", str, "");
\r
139 var result = failToMerge ? tmp : csv;
\r
141 "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n" +
\r
142 "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0\r\n" == result);
\r
146 public void InspectBattleResult()
\r
148 var sniffer = new Sniffer();
\r
150 sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2017, 1, 1));
\r
151 sniffer.EnableLog(LogType.Battle);
\r
152 SnifferTest.SniffLogFile(sniffer, "battle_001");
\r
154 "2017-01-01 00:00:00,カレー洋制圧戦,1,出撃,A,T字戦(有利),警戒陣,梯形陣,敵潜水教導艦隊,,," +
\r
155 "隼鷹改二(Lv157),57/62,利根改二(Lv151),66/66,千代田航改二(Lv159),50/65,千歳航改二(Lv159),65/65,大井改二(Lv57),40/43,秋月改(Lv142),42/42," +
\r
156 "潜水ヨ級(elite),34/34,潜水ヨ級,5/24,潜水ヨ級,0/24,潜水カ級(elite),0/27,潜水カ級,0/19,潜水カ級,0/19,248~249,0,制空権確保,4-2|"
\r
161 /// 7隻編成の場合は7隻目を6隻目に重ねる
\r
164 public void InspectShip7BattleResult()
\r
166 var sniffer = new Sniffer();
\r
168 sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2017, 1, 1));
\r
169 sniffer.EnableLog(LogType.Battle);
\r
170 SnifferTest.SniffLogFile(sniffer, "ship7battle_001");
\r
172 "2017-01-01 00:00:00,台湾沖/ルソン島沖,5,出撃,S,同航戦,単縦陣,単縦陣,深海通商破部隊 前衛水雷戦隊,,," +
\r
173 "あきつ丸改(Lv81),40/40,那智改二(Lv151),63/63,Roma改(Lv99),83/92,阿武隈改二(Lv98),40/45,霞改二(Lv96),13/31,潮改二(Lv94)・不知火改(Lv85),31/33・32/32," +
\r
174 "軽巡ホ級(flagship),0/53,駆逐ロ級後期型,0/37,駆逐ロ級後期型,0/37,駆逐ロ級後期型,0/37,駆逐イ級,0/20,駆逐イ級,0/20,317~318,0,制空権確保,40-2|"
\r
182 public void InspectShip2BattleResult()
\r
184 var sniffer = new Sniffer();
\r
186 sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2019, 1, 1));
\r
187 sniffer.EnableLog(LogType.Battle);
\r
188 SnifferTest.SniffLogFile(sniffer, "battle_003");
\r
189 Assert.IsFalse(sniffer.IsBattleResultError);
\r
190 Assert.AreEqual("2019-01-01 00:00:00,鎮守府正面海域,1,出撃,S,反航戦,単縦陣,単縦陣,敵偵察艦,駆逐艦,睦月," +
\r
191 "早波改(Lv54),32/32,五月雨(Lv20),16/16,,,,,,,,,駆逐ハ級,0/24,,,,,,,,,,,0,0,,1-1|",
\r
199 public void InspectAirRaidBattle()
\r
201 var sniffer = new Sniffer();
\r
203 sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2019, 1, 1));
\r
204 sniffer.EnableLog(LogType.Battle);
\r
205 SnifferTest.SniffLogFile(sniffer, "airraid_battle_001");
\r
206 Assert.AreEqual("2019-01-01 00:00:00,アリューシャン列島沖,12,出撃,S,同航戦,単縦陣,輪形陣,,,," +
\r
207 "基地航空隊1(Lv0),200/200,基地航空隊2(Lv0),200/200,基地航空隊3(Lv0),200/200,,,,,,," +
\r
208 "北方棲妹,790/790,砲台小鬼,130/130,砲台小鬼,130/130,飛行場姫,500/500,飛行場姫,500/500,集積地棲姫,600/600,425~426,231,航空優勢,44-3|",
\r
216 public void InspectAirRaidBattleBeforeBoss()
\r
218 var sniffer = new Sniffer();
\r
220 sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2019, 1, 1));
\r
221 sniffer.EnableLog(LogType.Battle);
\r
222 SnifferTest.SniffLogFile(sniffer, "airraid_battle_003");
\r
223 Assert.AreEqual("2019-01-01 00:00:00,北太平洋ハワイ諸島戦域,22,出撃,A,T字戦(不利),単縦陣,輪形陣,,,," +
\r
224 "基地航空隊1(Lv0),200/200,基地航空隊2(Lv0),188/200,基地航空隊3(Lv0),200/200,,,,,,," +
\r
225 "中枢棲姫,900/900,飛行場姫,500/500,飛行場姫,500/500,飛行場姫,500/500,砲台小鬼,130/130,集積地棲姫,600/600,471~473,212,航空優勢,44-4|",
\r
230 public void InspectMaterial()
\r
232 var sniffer = new Sniffer();
\r
234 var first = new DateTime(2015, 1, 1, 0, 0, 0);
\r
236 new Queue<DateTime>(new[] {first, first.AddMinutes(10), first.AddMinutes(15), first.AddMinutes(20)});
\r
237 sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, queue.Dequeue);
\r
238 sniffer.EnableLog(LogType.Material);
\r
239 SnifferTest.SniffLogFile(sniffer, "material_001");
\r
240 PAssert.That(() => "2015-01-01 00:00:00,26178,26742,21196,33750,1426,1574,2185,10|" +
\r
241 "2015-01-01 00:10:00,24595,25353,18900,32025,1427,1576,2187,10|" +
\r
242 "2015-01-01 00:20:00,23463,25064,17314,31765,1427,1572,2187,10|"
\r
247 public void InspectCreateItem()
\r
249 var sniffer = new Sniffer();
\r
251 sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));
\r
252 sniffer.EnableLog(LogType.CreateItem);
\r
253 SnifferTest.SniffLogFile(sniffer, "createitem_001");
\r
254 PAssert.That(() => "2015-01-01 00:00:00,12cm単装砲,小口径主砲,10,10,30,10,綾波改二(145),120|" +
\r
255 "2015-01-01 00:00:00,失敗,,10,10,30,10,綾波改二(145),120|"
\r
260 public void InspectCreateItemMulti()
\r
262 var sniffer = new Sniffer();
\r
264 sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2019, 1, 1));
\r
265 sniffer.EnableLog(LogType.CreateItem);
\r
266 SnifferTest.SniffLogFile(sniffer, "createitem_002");
\r
267 Assert.AreEqual("2019-01-01 00:00:00,失敗,,10,10,30,10,大淀改(167),120|" +
\r
268 "2019-01-01 00:00:00,61cm三連装魚雷,魚雷,10,10,30,10,大淀改(167),120|" +
\r
269 "2019-01-01 00:00:00,失敗,,10,10,30,10,大淀改(167),120|",
\r
274 public void InspectGetShip()
\r
276 var sniffer = new Sniffer();
\r
278 sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));
\r
279 sniffer.EnableLog(LogType.CreateShip);
\r
280 SnifferTest.SniffLogFile(sniffer, "createship_001");
\r
281 PAssert.That(() => "2015-01-01 00:00:00,通常艦建造,雷,駆逐艦,30,30,30,30,1,1,綾波改二(145),120|" +
\r
282 "2015-01-01 00:00:00,大型艦建造,霧島,巡洋戦艦,1500,1500,2000,1000,1,0,綾波改二(145),120|"
\r
287 public void InspectRemodelSlot()
\r
289 var sniffer = new Sniffer();
\r
291 sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2015, 1, 1));
\r
292 sniffer.EnableLog(LogType.RemodelSlot);
\r
293 SnifferTest.SniffLogFile(sniffer, "remodel_slot_001");
\r
294 PAssert.That(() => "2015-01-01 00:00:00,12.7cm連装砲,4,○,,,,10,30,60,0,1,1,明石改(50),島風改(131)|" +
\r
295 "2015-01-01 00:00:00,12.7cm連装砲,5,×,,,,10,30,60,0,1,1,明石改(50),|" +
\r
296 "2015-01-01 00:00:00,12.7cm連装砲,7,○,,12.7cm連装砲,1,10,30,60,0,1,1,明石改(50),島風改(131)|" +
\r
297 "2015-01-01 00:00:00,91式高射装置,10,○,○,10cm連装高角砲,2,0,0,60,40,9,7,明石改(50),摩耶改(98)|"
\r
301 private JsonObject Js(object obj) => JsonObject.CreateJsonObject(obj);
\r
304 public void Achievement()
\r
306 var logger = new Logger(null, null, null);
\r
307 logger.EnableLog(LogType.Achievement);
\r
309 var dateEnum = new[]
\r
311 new DateTime(2017, 3, 31, 21, 0, 0),
\r
312 new DateTime(2017, 3, 31, 22, 0, 0),
\r
313 new DateTime(2017, 4, 1, 1, 0, 0),
\r
314 new DateTime(2017, 4, 1, 2, 0, 0),
\r
315 new DateTime(2017, 4, 1, 3, 0, 0),
\r
316 new DateTime(2017, 4, 2, 2, 0, 0),
\r
317 new DateTime(2017, 4, 2, 3, 0, 0),
\r
318 new DateTime(2017, 4, 2, 4, 0, 0)
\r
320 logger.SetWriter((path, s, h) => { result += s + "|"; }, () =>
\r
322 dateEnum.MoveNext();
\r
323 // ReSharper disable once PossibleNullReferenceException
\r
324 return (DateTime)dateEnum.Current;
\r
326 for (var i = 0; i < 6; i++)
\r
327 logger.InspectBasic(Js(new{api_experience = i * 1000}));
\r
328 logger.InspectBattleResult(Js(new {api_get_exmap_rate = "100"}));
\r
329 logger.InspectMapNext(Js(new {api_maparea_id = 0, api_mapinfo_no = 0, api_no = 0, api_event_id = 0, api_get_eo_rate = 75}));
\r
331 "2017-03-31 21:00:00,0,0|2017-03-31 21:00:00,0,0|2017-03-31 22:00:00,1000,0|" +
\r
332 "2017-04-01 03:00:00,4000,0|2017-04-02 02:00:00,5000,0|" +
\r
333 "2017-04-02 03:00:00,5000,100|2017-04-02 04:00:00,5000,75|"
\r
338 public void InspectClearItemGet()
\r
340 var sniffer = new Sniffer();
\r
342 sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2017, 5, 1));
\r
343 sniffer.EnableLog(LogType.Achievement);
\r
344 SnifferTest.SniffLogFile(sniffer, "clearitemget_001");
\r
346 "2017-05-01 00:00:00,45417045,0|2017-05-01 00:00:00,45417045,350|" == result);
\r
350 /// 晴嵐(六三一空)任務の場合はapi_bounus_countがない
\r
353 public void InspectClearItemGetSeiran631Ku()
\r
355 var sniffer = new Sniffer(true);
\r
356 sniffer.SetLogWriter((path, s, h) => { }, () => new DateTime(2017, 5, 1));
\r
357 sniffer.EnableLog(LogType.Achievement);
\r
358 sniffer.Sniff("/kcsapi/api_req_quest/clearitemget",
\r
359 "api%5Fquest%5Fid=656&api%5Fverno=1",
\r
361 @"{""api_result"":1,""api_result_msg"":""成功"",""api_data"":
\r
362 {""api_material"":[0,0,0,0],""api_bounus"":[
\r
363 {""api_type"":15,""api_count"":1,""api_item"":{""api_id_from"":9999,""api_id_to"":9999,
\r
364 ""api_message"":""第一潜水隊運用航空隊:「晴嵐(六三一空)」の新編成を<br>完了しました!""}}
\r