-
Notifications
You must be signed in to change notification settings - Fork 263
Expand file tree
/
Copy pathMockFileWriteAllBytesTests.cs
More file actions
203 lines (158 loc) · 7.48 KB
/
MockFileWriteAllBytesTests.cs
File metadata and controls
203 lines (158 loc) · 7.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
using System.Collections.Generic;
using NUnit.Framework;
using XFS = System.IO.Abstractions.TestingHelpers.MockUnixSupport;
using System.Threading.Tasks;
using System.Threading;
namespace System.IO.Abstractions.TestingHelpers.Tests
{
public class MockFileWriteAllBytesTests
{
[Test]
public void MockFile_WriteAllBytes_ShouldThrowDirectoryNotFoundExceptionIfPathDoesNotExists()
{
var fileSystem = new MockFileSystem();
string path = XFS.Path(@"c:\something\file.txt");
var fileContent = new byte[] { 1, 2, 3, 4 };
TestDelegate action = () => fileSystem.File.WriteAllBytes(path, fileContent);
Assert.Throws<DirectoryNotFoundException>(action);
}
[Test]
public void MockFile_WriteAllBytes_ShouldWriteDataToMemoryFileSystem()
{
string path = XFS.Path(@"c:\something\demo.txt");
var fileSystem = new MockFileSystem();
var fileContent = new byte[] { 1, 2, 3, 4 };
fileSystem.AddDirectory(XFS.Path(@"c:\something"));
fileSystem.File.WriteAllBytes(path, fileContent);
Assert.AreEqual(fileContent, fileSystem.GetFile(path).Contents);
}
[Test]
public void MockFile_WriteAllBytes_ShouldThrowAnUnauthorizedAccessExceptionIfFileIsHidden()
{
string path = XFS.Path(@"c:\something\demo.txt");
var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
{ path, new MockFileData("this is hidden") },
});
fileSystem.File.SetAttributes(path, FileAttributes.Hidden);
TestDelegate action = () => fileSystem.File.WriteAllBytes(path, new byte[] { 123 });
Assert.Throws<UnauthorizedAccessException>(action, "Access to the path '{0}' is denied.", path);
}
[Test]
[WindowsOnly(WindowsSpecifics.StrictPathRules)]
public void MockFile_WriteAllBytes_ShouldThrowAnArgumentExceptionIfContainsIllegalCharacters()
{
var fileSystem = new MockFileSystem();
fileSystem.AddDirectory(XFS.Path(@"C:"));
TestDelegate action = () => fileSystem.File.WriteAllBytes(XFS.Path(@"C:\a<b.txt"), new byte[] { 123 });
Assert.Throws<ArgumentException>(action);
}
[Test]
public void MockFile_WriteAllBytes_ShouldThrowAnArgumentNullExceptionIfPathIsNull()
{
var fileSystem = new MockFileSystem();
TestDelegate action = () => fileSystem.File.WriteAllBytes(null, new byte[] { 123 });
Assert.Throws<ArgumentNullException>(action);
}
[Test]
public void MockFile_WriteAllBytes_ShouldThrowAnArgumentNullExceptionIfBytesAreNull()
{
var fileSystem = new MockFileSystem();
string path = XFS.Path(@"c:\something\demo.txt");
TestDelegate action = () => fileSystem.File.WriteAllBytes(path, null);
var exception = Assert.Throws<ArgumentNullException>(action);
Assert.That(exception.Message, Does.StartWith("Value cannot be null."));
Assert.That(exception.ParamName, Is.EqualTo("bytes"));
}
[Test]
public void MockFile_WriteAllBytes_ShouldWriteASeparateCopyToTheFileSystem()
{
var fileSystem = new MockFileSystem();
string path = XFS.Path(@"c:\something\file.bin");
fileSystem.AddDirectory(XFS.Path(@"c:\something"));
var fileContent = new byte[] { 1, 2, 3, 4 };
fileSystem.File.WriteAllBytes(path, fileContent);
for(int i = 0; i < fileContent.Length; i++)
{
fileContent[i] += 1;
}
var readAgain = fileSystem.File.ReadAllBytes(path);
Assert.AreNotEqual(fileContent, readAgain);
}
#if FEATURE_ASYNC_FILE
[Test]
public void MockFile_WriteAllBytesAsync_ShouldThrowDirectoryNotFoundExceptionIfPathDoesNotExists()
{
var fileSystem = new MockFileSystem();
string path = XFS.Path(@"c:\something\file.txt");
var fileContent = new byte[] { 1, 2, 3, 4 };
AsyncTestDelegate action = () => fileSystem.File.WriteAllBytesAsync(path, fileContent);
Assert.ThrowsAsync<DirectoryNotFoundException>(action);
}
[Test]
public void MockFile_WriteAllTextAsync_ShouldThrowOperationCanceledExceptionIfCancelled()
{
// Arrange
const string path = "test.txt";
var fileSystem = new MockFileSystem();
// Act
Assert.ThrowsAsync<OperationCanceledException>(async () =>
await fileSystem.File.WriteAllTextAsync(
path,
"content",
new CancellationToken(canceled: true))
);
// Assert
Assert.IsFalse(fileSystem.File.Exists(path));
}
[Test]
public async Task MockFile_WriteAllBytesAsync_ShouldWriteDataToMemoryFileSystem()
{
string path = XFS.Path(@"c:\something\demo.txt");
var fileSystem = new MockFileSystem();
var fileContent = new byte[] { 1, 2, 3, 4 };
fileSystem.AddDirectory(XFS.Path(@"c:\something"));
await fileSystem.File.WriteAllBytesAsync(path, fileContent);
Assert.AreEqual(fileContent, fileSystem.GetFile(path).Contents);
}
[Test]
public void MockFile_WriteAllBytesAsync_ShouldThrowAnUnauthorizedAccessExceptionIfFileIsHidden()
{
string path = XFS.Path(@"c:\something\demo.txt");
var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
{ path, new MockFileData("this is hidden") },
});
fileSystem.File.SetAttributes(path, FileAttributes.Hidden);
AsyncTestDelegate action = () => fileSystem.File.WriteAllBytesAsync(path, new byte[] { 123 });
Assert.ThrowsAsync<UnauthorizedAccessException>(action, "Access to the path '{0}' is denied.", path);
}
[Test]
[WindowsOnly(WindowsSpecifics.StrictPathRules)]
public void MockFile_WriteAllBytesAsync_ShouldThrowAnArgumentExceptionIfContainsIllegalCharacters()
{
var fileSystem = new MockFileSystem();
fileSystem.AddDirectory(XFS.Path(@"C:"));
AsyncTestDelegate action = () => fileSystem.File.WriteAllBytesAsync(XFS.Path(@"C:\a<b.txt"), new byte[] { 123 });
Assert.ThrowsAsync<ArgumentException>(action);
}
[Test]
public void MockFile_WriteAllBytesAsync_ShouldThrowAnArgumentNullExceptionIfPathIsNull()
{
var fileSystem = new MockFileSystem();
AsyncTestDelegate action = () => fileSystem.File.WriteAllBytesAsync(null, new byte[] { 123 });
Assert.ThrowsAsync<ArgumentNullException>(action);
}
[Test]
public void MockFile_WriteAllBytesAsync_ShouldThrowAnArgumentNullExceptionIfBytesAreNull()
{
var fileSystem = new MockFileSystem();
string path = XFS.Path(@"c:\something\demo.txt");
AsyncTestDelegate action = () => fileSystem.File.WriteAllBytesAsync(path, null);
var exception = Assert.ThrowsAsync<ArgumentNullException>(action);
Assert.That(exception.Message, Does.StartWith("Value cannot be null."));
Assert.That(exception.ParamName, Is.EqualTo("bytes"));
}
#endif
}
}