1
// ****************************************************************
2
// Copyright 2011, Charlie Poole
3
// This is free software licensed under the NUnit license. You may
4
// obtain a copy of the license at http://nunit.org
5
// ****************************************************************
13
namespace NUnit.Util.Tests
16
[Platform(Exclude = "Win95,Win98,WinMe")]
17
public class FileWatcherTests
19
private FileWatcher watcher;
20
private CounterEventHandler handler;
21
private static int watcherDelayMs = 100;
22
private string fileName;
23
private string tempFileName;
26
public void CreateFile()
28
string tempDir = Path.GetTempPath();
29
fileName = Path.Combine(tempDir, "temp.txt");
30
tempFileName = Path.Combine(tempDir, "newTempFile.txt");
32
StreamWriter writer = new StreamWriter(fileName);
33
writer.Write("Hello");
36
handler = new CounterEventHandler();
37
watcher = new FileWatcher(fileName, watcherDelayMs);
38
watcher.Changed += new FileChangedHandler(handler.OnChanged);
43
public void DeleteFile()
46
FileInfo fileInfo = new FileInfo(fileName);
49
FileInfo temp = new FileInfo(tempFileName);
50
if (temp.Exists) temp.Delete();
54
[Platform("Linux, Net", Reason="Fails under Mono on Windows")]
55
public void MultipleCloselySpacedChangesTriggerWatcherOnlyOnce()
57
for (int i = 0; i < 3; i++)
59
StreamWriter writer = new StreamWriter(fileName, true);
60
writer.WriteLine("Data");
62
System.Threading.Thread.Sleep(20);
64
WaitForTimerExpiration();
65
Assert.AreEqual(1, handler.Counter);
66
Assert.AreEqual(Path.GetFullPath(fileName), handler.FileName);
70
[Platform("Linux, Net", Reason="Fails under Mono on Windows")]
71
public void ChangingFileTriggersWatcher()
73
StreamWriter writer = new StreamWriter(fileName);
74
writer.Write("Goodbye");
77
WaitForTimerExpiration();
78
Assert.AreEqual(1, handler.Counter);
79
Assert.AreEqual(Path.GetFullPath(fileName), handler.FileName);
83
[Platform(Exclude = "Linux", Reason = "Attribute change triggers watcher")]
84
public void ChangingAttributesDoesNotTriggerWatcher()
86
FileInfo fi = new FileInfo(fileName);
87
FileAttributes attr = fi.Attributes;
88
fi.Attributes = FileAttributes.Hidden | attr;
90
WaitForTimerExpiration();
91
Assert.AreEqual(0, handler.Counter);
95
public void CopyingFileDoesNotTriggerWatcher()
97
FileInfo fi = new FileInfo(fileName);
98
fi.CopyTo(tempFileName);
101
WaitForTimerExpiration();
102
Assert.AreEqual(0, handler.Counter);
105
private static void WaitForTimerExpiration()
107
System.Threading.Thread.Sleep(watcherDelayMs * 2);
110
private class CounterEventHandler
116
get { return counter; }
118
public String FileName
120
get { return fileName; }
123
public void OnChanged(String fullPath)
1
// ****************************************************************
2
// Copyright 2011, Charlie Poole
3
// This is free software licensed under the NUnit license. You may
4
// obtain a copy of the license at http://nunit.org
5
// ****************************************************************
13
namespace NUnit.Util.Tests
16
[Platform(Exclude = "Win95,Win98,WinMe")]
17
public class FileWatcherTests
19
private FileWatcher watcher;
20
private CounterEventHandler handler;
21
private static int watcherDelayMs = 100;
22
private string fileName;
23
private string tempFileName;
26
public void CreateFile()
28
string tempDir = Path.GetTempPath();
29
fileName = Path.Combine(tempDir, "temp.txt");
30
tempFileName = Path.Combine(tempDir, "newTempFile.txt");
32
StreamWriter writer = new StreamWriter(fileName);
33
writer.Write("Hello");
36
handler = new CounterEventHandler();
37
watcher = new FileWatcher(fileName, watcherDelayMs);
38
watcher.Changed += new FileChangedHandler(handler.OnChanged);
43
public void DeleteFile()
46
FileInfo fileInfo = new FileInfo(fileName);
49
FileInfo temp = new FileInfo(tempFileName);
50
if (temp.Exists) temp.Delete();
54
[Platform("Linux, Net", Reason="Fails under Mono on Windows")]
55
public void MultipleCloselySpacedChangesTriggerWatcherOnlyOnce()
57
for (int i = 0; i < 3; i++)
59
StreamWriter writer = new StreamWriter(fileName, true);
60
writer.WriteLine("Data");
62
System.Threading.Thread.Sleep(20);
64
WaitForTimerExpiration();
65
Assert.AreEqual(1, handler.Counter);
66
Assert.AreEqual(Path.GetFullPath(fileName), handler.FileName);
70
[Platform("Linux, Net", Reason="Fails under Mono on Windows")]
71
public void ChangingFileTriggersWatcher()
73
StreamWriter writer = new StreamWriter(fileName);
74
writer.Write("Goodbye");
77
WaitForTimerExpiration();
78
Assert.AreEqual(1, handler.Counter);
79
Assert.AreEqual(Path.GetFullPath(fileName), handler.FileName);
83
[Platform(Exclude = "Linux", Reason = "Attribute change triggers watcher")]
84
public void ChangingAttributesDoesNotTriggerWatcher()
86
FileInfo fi = new FileInfo(fileName);
87
FileAttributes attr = fi.Attributes;
88
fi.Attributes = FileAttributes.Hidden | attr;
90
WaitForTimerExpiration();
91
Assert.AreEqual(0, handler.Counter);
95
public void CopyingFileDoesNotTriggerWatcher()
97
FileInfo fi = new FileInfo(fileName);
98
fi.CopyTo(tempFileName);
101
WaitForTimerExpiration();
102
Assert.AreEqual(0, handler.Counter);
105
private static void WaitForTimerExpiration()
107
System.Threading.Thread.Sleep(watcherDelayMs * 2);
110
private class CounterEventHandler
116
get { return counter; }
118
public String FileName
120
get { return fileName; }
123
public void OnChanged(String fullPath)