Skip to content

Commit 77474a7

Browse files
committed
Added methods to handle loading data from embedded files
1 parent 43e914b commit 77474a7

6 files changed

Lines changed: 80 additions & 1 deletion

File tree

TestHelpers.Tests/MockFileSystemTests.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using System.Collections;
22
using System.Collections.Generic;
33
using System.Linq;
4+
using System.Reflection;
5+
using System.Text;
46
using NUnit.Framework;
57

68
namespace System.IO.Abstractions.TestingHelpers.Tests
@@ -204,5 +206,32 @@ public void MockFileSystem_AddFile_ShouldMatchCapitalization_PartialMatch_Furthe
204206
Assert.Contains(@"C:\test\subtest\new\SUBDirectory\", fileSystem.AllDirectories.ToList());
205207
Assert.Contains(@"C:\LOUD\SUBLOUD\new\SUBDirectory\", fileSystem.AllDirectories.ToList());
206208
}
209+
210+
[Test]
211+
public void MockFileSystem_AddFileFromEmbeddedResource_ShouldAddTheFile()
212+
{
213+
// Arrange
214+
var fileSystem = new MockFileSystem();
215+
216+
// Act
217+
fileSystem.AddFileFromEmbeddedResource(@"C:\TestFile.txt", Assembly.GetExecutingAssembly(), "System.IO.Abstractions.TestingHelpers.Tests.TestFiles.TestFile.txt");
218+
var result = fileSystem.GetFile(@"C:\TestFile.txt");
219+
220+
// Assert
221+
Assert.AreEqual(new UTF8Encoding().GetBytes("This is a test file."), result.Contents);
222+
}
223+
224+
[Test]
225+
public void MockFileSystem_AddFilesFromEmbeddedResource_ShouldAddAllTheFiles()
226+
{
227+
// Arrange
228+
var fileSystem = new MockFileSystem();
229+
230+
//Act
231+
fileSystem.AddFilesFromEmbeddedNamespace(@"C:\", Assembly.GetExecutingAssembly(), "System.IO.Abstractions.TestingHelpers.Tests.TestFiles");
232+
233+
Assert.Contains(@"C:\TestFile.txt", fileSystem.AllFiles.ToList());
234+
Assert.Contains(@"C:\SecondTestFile.txt", fileSystem.AllFiles.ToList());
235+
}
207236
}
208237
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a the second test file.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a test file.

TestHelpers.Tests/TestHelpers.Tests.csproj

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@
2323
<SignAssembly>True</SignAssembly>
2424
</PropertyGroup>
2525

26+
<ItemGroup>
27+
<None Remove="TestFiles\SecondTestFile.txt" />
28+
<None Remove="TestFiles\TestFile.txt" />
29+
</ItemGroup>
30+
31+
<ItemGroup>
32+
<EmbeddedResource Include="TestFiles\SecondTestFile.txt" />
33+
<EmbeddedResource Include="TestFiles\TestFile.txt" />
34+
</ItemGroup>
35+
2636
<ItemGroup>
2737
<ProjectReference Include="../System.IO.Abstractions/System.IO.Abstractions.csproj" />
2838
<ProjectReference Include="../TestingHelpers/TestingHelpers.csproj" />

TestingHelpers/IMockFileDataAccessor.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using System.Reflection;
23

34
namespace System.IO.Abstractions.TestingHelpers
45
{
@@ -17,6 +18,9 @@ public interface IMockFileDataAccessor
1718
void AddFile(string path, MockFileData mockFile);
1819
void AddDirectory(string path);
1920

21+
void AddFileFromEmbeddedResource(string path, Assembly resourceAssembly, string embeddedResourcePath);
22+
void AddFilesFromEmbeddedNamespace(string path, Assembly resourceAssembly, string embeddedRresourcePath);
23+
2024
/// <summary>
2125
/// Removes the file.
2226
/// </summary>

TestingHelpers/MockFileSystem.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Generic;
22
using System.Globalization;
33
using System.Linq;
4+
using System.Reflection;
45

56
namespace System.IO.Abstractions.TestingHelpers
67
{
@@ -190,7 +191,40 @@ public void AddDirectory(string path)
190191
}
191192
}
192193

193-
public void RemoveFile(string path)
194+
public void AddFileFromEmbeddedResource(string path, Assembly resourceAssembly, string embeddedResourcePath)
195+
{
196+
using (var embeddedResourceStream = resourceAssembly.GetManifestResourceStream(embeddedResourcePath))
197+
{
198+
if (embeddedResourceStream == null)
199+
{
200+
throw new Exception("Resource not found in assembly");
201+
}
202+
203+
using (var streamReader = new BinaryReader(embeddedResourceStream))
204+
{
205+
var fileData = streamReader.ReadBytes((int)embeddedResourceStream.Length);
206+
AddFile(path, new MockFileData(fileData));
207+
}
208+
}
209+
}
210+
211+
public void AddFilesFromEmbeddedNamespace(string path, Assembly resourceAssembly, string embeddedRresourcePath)
212+
{
213+
var matchingResources = resourceAssembly.GetManifestResourceNames().Where(f => f.StartsWith(embeddedRresourcePath));
214+
foreach (var resource in matchingResources)
215+
{
216+
using (var embeddedResourceStream = resourceAssembly.GetManifestResourceStream(resource))
217+
using (var streamReader = new BinaryReader(embeddedResourceStream))
218+
{
219+
var fileName = resource.Substring(embeddedRresourcePath.Length + 1);
220+
var fileData = streamReader.ReadBytes((int)embeddedResourceStream.Length);
221+
var filePath = Path.Combine(path, fileName);
222+
AddFile(filePath, new MockFileData(fileData));
223+
}
224+
}
225+
}
226+
227+
public void RemoveFile(string path)
194228
{
195229
path = FixPath(path);
196230

0 commit comments

Comments
 (0)