-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTests.cs
More file actions
111 lines (92 loc) · 3.62 KB
/
Tests.cs
File metadata and controls
111 lines (92 loc) · 3.62 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.Reflection;
using System.Text;
using Microsoft.CodeAnalysis.Testing;
using Microsoft.CodeAnalysis.Text;
using TestLibrary;
using VerifyCS = CodingFlow.OptionsBindingsGenerator.UnitTests.CSharpSourceGeneratorVerifier<CodingFlow.OptionsBindingsGenerator.Main>;
namespace CodingFlow.OptionsBindingsGenerator.UnitTests;
public class Tests
{
private Assembly implementationAssembly;
[SetUp]
public void Setup()
{
implementationAssembly = GetAssembly("OptionsBindingsGenerator");
}
[Test]
public async Task NoBindings()
{
var source = await ReadCSharpFile<NoBindingsOptions>(true);
await new VerifyCS.Test
{
CompilerDiagnostics = CompilerDiagnostics.None,
TestState = {
ReferenceAssemblies = ReferenceAssemblies.Net.Net90,
AdditionalReferences =
{
implementationAssembly,
GetAssembly("TestLibrary")
},
Sources = { source },
GeneratedSources =
{
},
},
}.RunAsync();
}
[Test]
public async Task MixedBindings()
{
var sourceOne = await ReadCSharpFile<NatsServiceOptions>(true);
var sourceTwo = await ReadCSharpFile<ServiceStreamConsumerOptions>(true);
var generatedClass = await ReadCSharpFileByName(true, "OptionsBindings");
await new VerifyCS.Test
{
CompilerDiagnostics = CompilerDiagnostics.None,
TestState = {
ReferenceAssemblies = ReferenceAssemblies.Net.Net90,
AdditionalReferences =
{
implementationAssembly,
GetAssembly("TestLibrary")
},
Sources = { sourceOne, sourceTwo },
GeneratedSources =
{
(typeof(Main), "OptionsBindings.generated.cs", SourceText.From(generatedClass, Encoding.UTF8, SourceHashAlgorithm.Sha256)),
},
},
}.RunAsync();
}
private static Assembly GetAssembly(string name)
{
var implementationAssemblyName = Assembly.GetExecutingAssembly().GetReferencedAssemblies().First(a => a.FullName.Contains(name));
return Assembly.Load(implementationAssemblyName);
}
private static async Task<string> ReadCSharpFile<T>(bool isTestLibrary)
{
var filenameWithoutExtension = typeof(T).Name;
return await ReadCSharpFileByName(isTestLibrary, filenameWithoutExtension);
}
private static async Task<string> ReadCSharpFileByName(bool isTestLibrary, string filenameWithoutExtension)
{
var searchPattern = $"{filenameWithoutExtension}*.cs";
return await ReadFile(isTestLibrary, searchPattern);
}
private static async Task<string> ReadFile(bool isTestLibrary, string searchPattern)
{
var currentDirectory = GetCurrentDirectory();
var targetDirectory = isTestLibrary ? GetTestLibraryDirectory(currentDirectory) : currentDirectory;
var file = targetDirectory.GetFiles(searchPattern).First();
using var fileReader = new StreamReader(file.OpenRead());
return await fileReader.ReadToEndAsync();
}
private static DirectoryInfo? GetCurrentDirectory()
{
return Directory.GetParent(Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.FullName);
}
private static DirectoryInfo GetTestLibraryDirectory(DirectoryInfo currentDirectory)
{
return currentDirectory.Parent.GetDirectories("TestLibrary").First();
}
}