public void StartTest5_NotepadLikeCreateFile() { String dir = Path.GetRandomFileName(); // まあ確率的に例外とかないだろう Directory.CreateDirectory(dir); try { String[][] expectedRows = new String[][]{ new String[]{"2013-05-17T20:07:49", "10", "PUBLIC", "12133621", "白 菜2", "テスト2"}, new String[]{"2013-05-17T20:07:50", "11", "PARTY", "12133622", "白 菜3", "テスト3"} }; int row = 0; using (IPso2LogWatcherFactory factory = new Pso2LogWatcherFactory()) using (IPso2LogWatcher watcher = factory.CreatePso2LogWatcher()) { StartTestState5[] state = new StartTestState5[] { StartTestState5.WaitingAssertRow1 }; watcher.Pso2LogEvent += (s, e) => { string[] expectedCols = expectedRows[row++]; int col = 0; Assert.AreEqual(expectedCols[col++], e.Time); Assert.AreEqual(expectedCols[col++], e.MessageID); Assert.AreEqual(expectedCols[col++], e.SendTo); Assert.AreEqual(expectedCols[col++], e.FromID); Assert.AreEqual(expectedCols[col++], e.From); Assert.AreEqual(expectedCols[col++], e.Message); lock (state) { state[0]++; Monitor.Pulse(state); } }; using (TextWriter log = new StreamWriter( new FileStream( Path.Combine(dir, "ChatLog20130519_00.txt"), FileMode.CreateNew, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite ), Encoding.Unicode ) ) { log.WriteLine("2013-05-17T20:07:48\t9\tGUILD\t12133620\t白 菜\tテスト"); log.Flush(); watcher.Start(dir); Thread.Sleep(1000); // これを入れないと読み込みの終端シークより前に書き込みが終わってしまう log.WriteLine("2013-05-17T20:07:49\t10\tPUBLIC\t12133621\t白 菜2\tテスト2"); log.Flush(); } lock (state) { if (state[0] != StartTestState5.AssertedRow1) { Monitor.Wait(state, 3000); } Assert.AreEqual(StartTestState5.AssertedRow1, state[0]); } File.Create(Path.Combine(dir, "ChatLog20130520_00.txt")).Close(); File.Delete(Path.Combine(dir, "ChatLog20130520_00.txt")); Thread.Sleep(100); using (TextWriter log = new StreamWriter( new FileStream( Path.Combine(dir, "ChatLog20130520_00.txt"), FileMode.CreateNew, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite ), Encoding.Unicode ) ) { log.WriteLine("2013-05-17T20:07:50\t11\tPARTY\t12133622\t白 菜3\tテスト3"); log.Flush(); } lock (state) { if (state[0] != StartTestState5.AssertedRow2) { Monitor.Wait(state, 3000); } Assert.AreEqual(StartTestState5.AssertedRow2, state[0]); } watcher.Stop(); } } finally { Directory.Delete(dir, true); } }
public void StartTest5_NotepadLikeCreateFile() { String dir = Path.GetRandomFileName(); // まあ確率的に例外とかないだろう Directory.CreateDirectory(dir); try { String[][] expectedRows = new String[][] { new String[] { "2013-05-17T20:07:49", "10", "PUBLIC", "12133621", "白 菜2", "テスト2" }, new String[] { "2013-05-17T20:07:50", "11", "PARTY", "12133622", "白 菜3", "テスト3" } }; int row = 0; using (IPso2LogWatcherFactory factory = new Pso2LogWatcherFactory()) using (IPso2LogWatcher watcher = factory.CreatePso2LogWatcher()) { StartTestState5[] state = new StartTestState5[] { StartTestState5.WaitingAssertRow1 }; watcher.Pso2LogEvent += (s, e) => { string[] expectedCols = expectedRows[row++]; int col = 0; Assert.AreEqual(expectedCols[col++], e.Time); Assert.AreEqual(expectedCols[col++], e.MessageID); Assert.AreEqual(expectedCols[col++], e.SendTo); Assert.AreEqual(expectedCols[col++], e.FromID); Assert.AreEqual(expectedCols[col++], e.From); Assert.AreEqual(expectedCols[col++], e.Message); lock (state) { state[0]++; Monitor.Pulse(state); } }; using (TextWriter log = new StreamWriter( new FileStream( Path.Combine(dir, "ChatLog20130519_00.txt"), FileMode.CreateNew, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite ), Encoding.Unicode ) ) { log.WriteLine("2013-05-17T20:07:48\t9\tGUILD\t12133620\t白 菜\tテスト"); log.Flush(); watcher.Start(dir); Thread.Sleep(1000); // これを入れないと読み込みの終端シークより前に書き込みが終わってしまう log.WriteLine("2013-05-17T20:07:49\t10\tPUBLIC\t12133621\t白 菜2\tテスト2"); log.Flush(); } lock (state) { if (state[0] != StartTestState5.AssertedRow1) { Monitor.Wait(state, 3000); } Assert.AreEqual(StartTestState5.AssertedRow1, state[0]); } File.Create(Path.Combine(dir, "ChatLog20130520_00.txt")).Close(); File.Delete(Path.Combine(dir, "ChatLog20130520_00.txt")); Thread.Sleep(100); using (TextWriter log = new StreamWriter( new FileStream( Path.Combine(dir, "ChatLog20130520_00.txt"), FileMode.CreateNew, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite ), Encoding.Unicode ) ) { log.WriteLine("2013-05-17T20:07:50\t11\tPARTY\t12133622\t白 菜3\tテスト3"); log.Flush(); } lock (state) { if (state[0] != StartTestState5.AssertedRow2) { Monitor.Wait(state, 3000); } Assert.AreEqual(StartTestState5.AssertedRow2, state[0]); } watcher.Stop(); } } finally { Directory.Delete(dir, true); } }