Introduced some unit testing. Cleaned up some classes in Beam. Overhauled source link generation.

This commit is contained in:
2025-05-10 17:20:33 +03:00
parent bfdcdb1f3b
commit a086cfa02b
23 changed files with 386 additions and 185 deletions
+27
View File
@@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Beam.Dynamic\Beam.Dynamic.csproj" />
<ProjectReference Include="..\Beam.Exports\Beam.Exports.csproj" />
<ProjectReference Include="..\Beam\Beam.csproj" />
</ItemGroup>
<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>
</Project>
+92
View File
@@ -0,0 +1,92 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Beam.Tests {
public class SouceLinkBuilder {
[Fact]
public void ShouldConstruct_NoErrors() {
_ = new SourceLinkBuilder("example.com");
}
[Fact]
public void ShouldBuild_NoErrors() {
_ = new SourceLinkBuilder("example.com").Build();
}
[Fact]
public void ShouldBuild_Correctly() {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
var link = k.Build();
Assert.Equal("https://example.com/", link.Link.ToString()); // trailing slash for RFC standardization stuff
}
[Fact]
public void ShouldBuild_SegmentAddsCorrectly() {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
k.AddSegment("folder1");
var link = k.Build();
Assert.Equal("https://example.com/folder1", link.Link.ToString());
}
[Fact]
public void ShouldThrow_EmptySegmentsDisallowed() {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
Assert.Throws<ArgumentException>(() => {
k.AddSegment("");
});
}
[Theory]
[InlineData("folder1", "folder2", "folder3")]
[InlineData("f1", "f5", "f6")]
public void ShouldBuild_MultipleSegmentsCorrect(params string[] segments) {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
foreach (var segment in segments) {
k.AddSegment(segment);
}
StringBuilder builder = new();
builder.Append("https://example.com/");
foreach(var segment in segments) {
builder.Append(segment + "/");
}
// Remove trailing slash
builder.Remove(builder.Length - 1, 1);
var link = k.Build();
Assert.Equal(builder.ToString(), link.Link.ToString());
}
[Fact]
public void ShouldBuild_SingleParameterCorrect() {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
k.AddSegment("f1");
k.AddParameters(0, "?q=");
var link = k.Build("foo");
Assert.Equal("https://example.com/f1?q=foo", link.Link.ToString());
}
[Fact]
public void ShouldBuild_MultiParameterCorrect() {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
k.AddSegment("f1");
k.AddParameters(0, "?q=", "?m=");
var link = k.Build("foo", "bar");
Assert.Equal("https://example.com/f1?q=foo?m=bar", link.Link.ToString());
}
[Fact]
public void ShouldBuild_MultiParameterCorrectWithSuffix() {
var k = new SourceLinkBuilder("example.com");
Assert.NotNull(k);
k.AddSegment("f1", "&");
k.AddParameters(0, "?q=", "?m=");
var link = k.Build("foo", "bar");
Assert.Equal("https://example.com/f1?q=foo&?m=bar", link.Link.ToString());
}
}
}
+7
View File
@@ -0,0 +1,7 @@
namespace Beam.Tests {
public class UnitTest1 {
[Fact]
public void Test1() {
}
}
}