-
-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathFileSystemClassGenerator.cs
More file actions
111 lines (92 loc) · 3.56 KB
/
Copy pathFileSystemClassGenerator.cs
File metadata and controls
111 lines (92 loc) · 3.56 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
using System.Text;
using Testably.Abstractions.Tests.SourceGenerator.Model;
// ReSharper disable StringLiteralTypo
namespace Testably.Abstractions.Tests.SourceGenerator.ClassGenerators;
internal class FileSystemClassGenerator : ClassGeneratorBase
{
/// <inheritdoc cref="ClassGeneratorBase.Marker" />
public override string Marker
=> "FileSystemTestBase<TFileSystem>";
/// <inheritdoc cref="ClassGeneratorBase.GenerateSource(StringBuilder, ClassModel)" />
protected override void GenerateSource(StringBuilder sourceBuilder, ClassModel @class)
=> sourceBuilder.Append(@$"
using Testably.Abstractions.Testing.FileSystemInitializer;
using Testably.Abstractions.TestHelpers;
using System.IO.Abstractions.TestingHelpers;
using Xunit.Abstractions;
namespace {@class.Namespace}
{{
public abstract partial class {@class.Name}<TFileSystem>
{{
protected {@class.Name}(TFileSystem fileSystem, ITimeSystem timeSystem)
: base(fileSystem, timeSystem)
{{
}}
}}
}}
namespace {@class.Namespace}.{@class.Name}
{{
// ReSharper disable once UnusedMember.Global
public sealed class MockFileSystemTests : {@class.Name}<Testably.Abstractions.Testing.MockFileSystem>, IDisposable
{{
/// <inheritdoc cref=""{@class.Name}{{TFileSystem}}.BasePath"" />
public override string BasePath => _directoryCleaner.BasePath;
private readonly IDirectoryCleaner _directoryCleaner;
public MockFileSystemTests() : this(new Testably.Abstractions.Testing.MockFileSystem())
{{
}}
private MockFileSystemTests(Testably.Abstractions.Testing.MockFileSystem mockFileSystem) : base(
mockFileSystem,
mockFileSystem.TimeSystem)
{{
_directoryCleaner = FileSystem
.SetCurrentDirectoryToEmptyTemporaryDirectory();
}}
/// <inheritdoc cref=""IDisposable.Dispose()"" />
public void Dispose()
=> _directoryCleaner.Dispose();
}}
// ReSharper disable once UnusedMember.Global
public sealed class TestableIoMockFileSystemTests : {@class.Name}<System.IO.Abstractions.TestingHelpers.MockFileSystem>, IDisposable
{{
/// <inheritdoc cref=""{@class.Name}{{TFileSystem}}.BasePath"" />
public override string BasePath => _directoryCleaner.BasePath;
private readonly IDirectoryCleaner _directoryCleaner;
public TestableIoMockFileSystemTests() : this(new System.IO.Abstractions.TestingHelpers.MockFileSystem())
{{
}}
private TestableIoMockFileSystemTests(System.IO.Abstractions.TestingHelpers.MockFileSystem mockFileSystem) : base(
mockFileSystem,
new RealTimeSystem())
{{
_directoryCleaner = FileSystem
.SetCurrentDirectoryToEmptyTemporaryDirectory();
}}
/// <inheritdoc cref=""IDisposable.Dispose()"" />
public void Dispose()
=> _directoryCleaner.Dispose();
}}
}}
#if !DEBUG || ENABLE_REALFILESYSTEMTESTS_IN_DEBUG
namespace {@class.Namespace}.{@class.Name}
{{
// ReSharper disable once UnusedMember.Global
[Collection(nameof(RealFileSystemTests))]
public sealed class RealFileSystemTests : {@class.Name}<RealFileSystem>, IDisposable
{{
/// <inheritdoc cref=""{@class.Name}{{TFileSystem}}.BasePath"" />
public override string BasePath => _directoryCleaner.BasePath;
private readonly IDirectoryCleaner _directoryCleaner;
public RealFileSystemTests(ITestOutputHelper testOutputHelper)
: base(new RealFileSystem(), new RealTimeSystem())
{{
_directoryCleaner = FileSystem
.SetCurrentDirectoryToEmptyTemporaryDirectory($""{@class.Namespace}{{FileSystem.Path.DirectorySeparatorChar}}{@class.Name}-"", testOutputHelper.WriteLine);
}}
/// <inheritdoc cref=""IDisposable.Dispose()"" />
public void Dispose()
=> _directoryCleaner.Dispose();
}}
}}
#endif");
}