forked from GitTools/GitVersion
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVersionWriterTests.cs
63 lines (53 loc) · 2.12 KB
/
VersionWriterTests.cs
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
using GitVersion.Core.Tests.Helpers;
using GitVersion.Extensions;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.Extensions.DependencyInjection;
namespace GitVersion.App.Tests;
[TestFixture]
public class VersionWriterTests : TestBase
{
private readonly IVersionWriter versionWriter;
public VersionWriterTests()
{
var sp = ConfigureServices(services => services.AddModule(new GitVersionAppModule()));
this.versionWriter = sp.GetRequiredService<IVersionWriter>();
}
[Test]
public void WriteVersionShouldWriteFileVersionWithNoPrereleaseTag()
{
var asm = GenerateAssembly(new Version(1, 0, 0), "");
string? version = string.Empty;
this.versionWriter.WriteTo(asm, v => version = v);
Assert.Multiple(() =>
{
Assert.That(asm, Is.Not.Null);
Assert.That(version, Is.EqualTo("1.0.0"));
});
}
[Test]
public void WriteVersionShouldWriteFileVersionWithPrereleaseTag()
{
var asm = GenerateAssembly(new Version(1, 0, 0), "-beta4");
string? version = string.Empty;
this.versionWriter.WriteTo(asm, v => version = v);
Assert.Multiple(() =>
{
Assert.That(asm, Is.Not.Null);
Assert.That(version, Is.EqualTo("1.0.0-beta4"));
});
}
private static Assembly GenerateAssembly(Version fileVersion, string prereleaseInfo)
{
var attribute = typeof(AssemblyInformationalVersionAttribute);
var csharpCode = $@"[assembly: {attribute.FullName}(""{fileVersion + prereleaseInfo}"")]";
var compilation = CSharpCompilation.Create("test-asm")
.WithOptions(new(OutputKind.DynamicallyLinkedLibrary))
.AddReferences(MetadataReference.CreateFromFile(typeof(object).Assembly.Location))
.AddReferences(MetadataReference.CreateFromFile(attribute.Assembly.Location))
.AddSyntaxTrees(CSharpSyntaxTree.ParseText(csharpCode));
using var memoryStream = new MemoryStream();
compilation.Emit(memoryStream);
return Assembly.Load(memoryStream.ToArray());
}
}