1 // Copyright (C) 2014 Kazuhiro Fujieda <fujieda@users.sourceforge.jp>
\r
3 // This program is part of KancolleSniffer.
\r
5 // KancolleSniffer is free software: you can redistribute it and/or modify
\r
6 // it under the terms of the GNU General Public License as published by
\r
7 // the Free Software Foundation, either version 3 of the License, or
\r
8 // (at your option) any later version.
\r
10 // This program is distributed in the hope that it will be useful,
\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 // GNU General Public License for more details.
\r
15 // You should have received a copy of the GNU General Public License
\r
16 // along with this program; if not, see <http://www.gnu.org/licenses/>.
\r
19 using System.Collections.Generic;
\r
22 using Codeplex.Data;
\r
23 using ExpressionToCodeLib;
\r
24 using Microsoft.VisualStudio.TestTools.UnitTesting;
\r
27 namespace KancolleSniffer.Test
\r
30 public class LoggerTest
\r
32 private IEnumerable<string> ReadLogFile(string name)
\r
34 using (var file = SnifferTest.OpenLogFile(name))
\r
37 while ((line = file.ReadLine()) != null)
\r
43 public void InspectMissionResult()
\r
45 var sniffer = new Sniffer();
\r
48 sniffer.SetLogWriter((path, s, h) =>
\r
52 }, () => new DateTime(2015, 1, 1));
\r
53 sniffer.SkipMaster();
\r
54 SnifferTest.SniffLogFile(sniffer, "mission_result_001");
\r
55 PAssert.That(() => "日付,結果,遠征,燃料,弾薬,鋼材,ボーキ,開発資材,高速修復材,高速建造材" == header);
\r
56 PAssert.That(() => "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0|" +
\r
57 "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0|" +
\r
58 "2015-01-01 00:00:00,大成功,MO作戦,0,0,360,420,1,0,0|" +
\r
59 "2015-01-01 00:00:00,失敗,東京急行(弐),0,0,0,0,0,0,0|"
\r
64 /// 出力先に書けないときは一時ファイルに書き込む
\r
67 public void WriteTmpFileWhenCantWriteTarget()
\r
69 var mock = new Mock<LogWriter.IFile>();
\r
70 var writer = new LogWriter(mock.Object);
\r
72 const string str = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0";
\r
74 mock.Setup(l => l.AppendAllText(It.IsAny<string>(), It.IsAny<string>()))
\r
75 .Callback<string, string>((file, s) =>
\r
77 if (file.EndsWith(".csv"))
\r
78 throw new IOException();
\r
79 if (file.EndsWith(".tmp"))
\r
82 mock.SetupSequence(l => l.Exists(It.IsAny<string>())).Returns(false).Returns(true);
\r
83 writer.Write("遠征報告書", str, "");
\r
84 PAssert.That(() => "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n" == tmp);
\r
88 public void MergeTmpFile()
\r
90 MergeTmpFileMain(false);
\r
94 public void FaileToMergeTmpFile()
\r
96 MergeTmpFileMain(true);
\r
99 private void MergeTmpFileMain(bool failToMerge)
\r
101 var mock = new Mock<LogWriter.IFile>();
\r
102 var writer = new LogWriter(mock.Object);
\r
104 var tmp = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n";
\r
106 mock.Setup(l => l.Exists(It.IsAny<string>())).Returns(true);
\r
107 mock.Setup(l => l.ReadAllText(It.IsAny<string>()))
\r
108 .Returns((string path) => path.EndsWith(".tmp") ? tmp : "");
\r
109 mock.Setup(l => l.AppendAllText(It.IsAny<string>(), It.IsAny<string>()))
\r
110 .Callback<string, string>((file, s) =>
\r
112 if (file.EndsWith(".tmp"))
\r
114 if (file.EndsWith(".csv"))
\r
117 throw new IOException();
\r
121 const string str = "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0";
\r
122 writer.Write("遠征報告書", str, "");
\r
123 var result = failToMerge ? tmp : csv;
\r
125 "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,0,0\r\n" +
\r
126 "2015-01-01 00:00:00,成功,長距離練習航海,0,100,30,0,0,1,0\r\n" == result);
\r