1 // Copyright (C) 2018 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.Model;
\r
21 using Microsoft.VisualStudio.TestTools.UnitTesting;
\r
23 namespace KancolleSniffer.Test
\r
26 public class LogProcessorTest
\r
29 public static void Initialize(TestContext context)
\r
31 ExpressionToCodeConfiguration.GlobalAssertionConfiguration = ExpressionToCodeConfiguration
\r
32 .GlobalAssertionConfiguration.WithPrintedListLengthLimit(200).WithMaximumValueLength(1000);
\r
36 /// 古い遠征報告書に改修資材の数字を追加する
\r
39 public void EnseiLog()
\r
41 var processor = new LogProcessor();
\r
44 "2018-09-10 17:45:09,大成功,北方鼠輸送作戦,589,498,0,0,0,0,0",
\r
45 "2018-09-10 17:53:34,成功,長距離練習航海,0,117,34,0,0,1,0"
\r
47 var result = processor.Process(log, "遠征報告書.csv", DateTime.MinValue, DateTime.MaxValue, false);
\r
48 PAssert.That(() => result.SequenceEqual(new[]
\r
50 "[\"2018-09-10 17:45:09\",\"大成功\",\"北方鼠輸送作戦\",\"589\",\"498\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"]",
\r
51 ",\n[\"2018-09-10 17:53:34\",\"成功\",\"長距離練習航海\",\"0\",\"117\",\"34\",\"0\",\"0\",\"1\",\"0\",\"0\"]"
\r
59 public void BattleLog()
\r
61 var processor = new LogProcessor(null, new Dictionary<string, string> {{"鎮守府正面海域", "1-1"}});
\r
64 "2018-09-08 11:28:01,鎮守府正面海域,3,ボス,A,同航戦,単縦陣,単縦陣,敵主力艦隊,駆逐艦,雷,浜波改(Lv78),32/32,涼風(Lv10),3/16,,,,,,,,,軽巡ホ級,0/33,駆逐イ級,0/20,駆逐イ級,7/20,,,,,,,0,0,"
\r
66 var result = processor.Process(log, "海戦・ドロップ報告書.csv", DateTime.MinValue, DateTime.MaxValue, false);
\r
69 "[\"2018-09-08 11:28:01\",\"鎮守府正面海域\",\"3\",\"ボス\",\"A\",\"同航戦\",\"単縦陣\",\"単縦陣\",\"敵主力艦隊\",\"駆逐艦\",\"雷\"," +
\r
70 "\"浜波改(Lv78)\",\"32/32\",\"涼風(Lv10)\",\"3/16\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"," +
\r
71 "\"軽巡ホ級\",\"0/33\",\"駆逐イ級\",\"0/20\",\"駆逐イ級\",\"7/20\",\"\",\"\",\"\",\"\",\"\",\"\",\"0\",\"0\",\"\",\"涼風(Lv10)\",\"\",\"1-1\"]");
\r
75 /// 資材ログの最後に現在値を示すレコードを追加する
\r
78 public void MaterialLogWithCurrentRecord()
\r
80 var processor = new LogProcessor(new[]
\r
82 new MaterialCount {Now = 2001}, new MaterialCount {Now = 2002}, new MaterialCount {Now = 2003},
\r
83 new MaterialCount {Now = 2004},
\r
84 new MaterialCount {Now = 201}, new MaterialCount {Now = 202}, new MaterialCount {Now = 203},
\r
85 new MaterialCount {Now = 100}
\r
87 var now = new DateTime(2018, 1, 1);
\r
88 var log = "2018-09-10 20:36:34,294892,296784,259518,294588,2484,2975,2550,3";
\r
90 var result = processor.Process(new[] {log}, "資材ログ.csv", DateTime.MinValue, DateTime.MaxValue, false, now)
\r
94 "[\"2018-09-10 20:36:34\",\"294892\",\"296784\",\"259518\",\"294588\",\"2484\",\"2975\",\"2550\",\"3\"]");
\r
95 var date = Logger.FormatDateTime(now);
\r
98 $",\n[\"{date}\",\"2001\",\"2002\",\"2003\",\"2004\",\"201\",\"202\",\"203\",\"100\"]", "現在値");
\r
102 /// 資材グラフの描画を高速化するために値をすべて数値にする
\r
105 public void MaterialLogInNumberType()
\r
107 var processor = new LogProcessor();
\r
108 var log = "2018-09-10 20:36:34,294892,296784,259518,294588,2484,2975,2550,3";
\r
110 var result = processor.Process(new[] {log}, "資材ログ.csv", DateTime.MinValue, DateTime.MaxValue, true)
\r
112 PAssert.That(() => result.Length == 1, "現在値の出力なし");
\r
113 PAssert.That(() => result[0] == "[1536579394000,294892,296784,259518,294588,2484,2975,2550,3]");
\r
117 /// 指定された範囲のログを出力する
\r
120 public void Range()
\r
124 "2018-09-09 23:58:35,66023314,0",
\r
125 "2018-09-10 08:08:31,66023314,0",
\r
126 "2018-09-10 11:03:01,66024154,0"
\r
128 var processor = new LogProcessor();
\r
129 Func<DateTime, DateTime, IEnumerable<string>> rangeProcessor =
\r
130 (from, to) => processor.Process(log, "戦果.csv", from, to, false);
\r
133 () => rangeProcessor(DateTime.MinValue, DateTime.MaxValue).SequenceEqual(new[]
\r
135 "[\"2018-09-09 23:58:35\",\"66023314\",\"0\"]",
\r
136 ",\n[\"2018-09-10 08:08:31\",\"66023314\",\"0\"]",
\r
137 ",\n[\"2018-09-10 11:03:01\",\"66024154\",\"0\"]"
\r
140 () => rangeProcessor(DateTime.MinValue, new DateTime(2018, 9, 10)).SequenceEqual(new[]
\r
141 {"[\"2018-09-09 23:58:35\",\"66023314\",\"0\"]"}
\r
144 () => rangeProcessor(new DateTime(2018, 9, 10), DateTime.MaxValue).SequenceEqual(new[]
\r
146 "[\"2018-09-10 08:08:31\",\"66023314\",\"0\"]",
\r
147 ",\n[\"2018-09-10 11:03:01\",\"66024154\",\"0\"]"
\r
150 () => rangeProcessor(new DateTime(2018, 9, 10), new DateTime(2018, 9, 10, 11, 0, 0)).SequenceEqual(new[]
\r
152 "[\"2018-09-10 08:08:31\",\"66023314\",\"0\"]"
\r
157 /// 想定と異なる日付フォーマットに対応する。
\r
160 public void DateFormat()
\r
162 var processor = new LogProcessor();
\r
164 var body = ",大型艦建造,まるゆ,潜水艦,1500,1500,2000,1000,1,0,瑞鶴改二甲(163),120";
\r
166 ",\"大型艦建造\",\"まるゆ\",\"潜水艦\",\"1500\",\"1500\",\"2000\",\"1000\",\"1\",\"0\",\"瑞鶴改二甲(163)\",\"120\"]";
\r
168 Func<string, string> dateProcessor =
\r
169 date => processor.Process(new[] {date + body}, "建造報告書", DateTime.MinValue, DateTime.MaxValue, false)
\r
171 var era = "30-09-10 20:13:39";
\r
172 PAssert.That(() => "[\"2018-09-10 20:13:39\"" + expected == dateProcessor(era), "和暦を西暦に直す");
\r
173 var excel = "2018/9/10 20:13";
\r
174 PAssert.That(() => "[\"2018-09-10 20:13:00\"" + expected == dateProcessor(excel), "Excelの形式から変換する");
\r
181 public void TruncatedLog()
\r
183 var processor = new LogProcessor();
\r
186 "2014-12-15 23:10:34,29734,29855,28016,41440,1407,1529,2151,13",
\r
187 "2014-12-15 23:13:29,29709,29819,28019,41440,1407,1529,21",
\r
188 "2014-12-15 23:16:06,29710,29819,28018,41440,1407,1529,2151,13"
\r
190 var result = processor.Process(logs, "資材ログ", DateTime.MinValue, DateTime.MaxValue, true);
\r
191 PAssert.That(() => result.SequenceEqual(new[]
\r
193 "[1418652634000,29734,29855,28016,41440,1407,1529,2151,13]",
\r
194 ",\n[1418652966000,29710,29819,28018,41440,1407,1529,2151,13]"
\r