86 lines
3.1 KiB
C#
86 lines
3.1 KiB
C#
using Sdt.Config;
|
|
using Xunit;
|
|
|
|
namespace DevTool.Tests;
|
|
|
|
public sealed class WorkspaceLoaderTests
|
|
{
|
|
[Fact]
|
|
public void FindAndLoad_DoesNotThrow_WhenAutoDiscoverHitsStrictLegacyProject()
|
|
{
|
|
var root = Path.Combine(Path.GetTempPath(), "sdt-workspace-" + Guid.NewGuid().ToString("N"));
|
|
Directory.CreateDirectory(root);
|
|
File.WriteAllText(Path.Combine(root, "devtool.json"), """
|
|
{
|
|
"name": "legacy",
|
|
"version": "0.1.0",
|
|
"targets": [
|
|
{
|
|
"id": "build",
|
|
"label": "Build",
|
|
"group": "Build",
|
|
"command": "dotnet",
|
|
"args": ["build"],
|
|
"workingDir": ".",
|
|
"dependsOn": []
|
|
}
|
|
],
|
|
"workflows": []
|
|
}
|
|
""");
|
|
|
|
Environment.SetEnvironmentVariable("SDT_LEGACY_MODE", null);
|
|
var result = WorkspaceLoader.FindAndLoad(root);
|
|
Assert.Null(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void ResolveProjectRoot_AcceptsAbsolutePaths()
|
|
{
|
|
var root = Path.GetFullPath(Path.Combine(Path.GetTempPath(), "ws-" + Guid.NewGuid().ToString("N")));
|
|
var abs = Path.GetFullPath(Path.Combine(Path.GetTempPath(), "proj-" + Guid.NewGuid().ToString("N")));
|
|
var project = new WorkspaceProject { Path = abs };
|
|
|
|
var resolved = WorkspaceLoader.ResolveProjectRoot(root, project);
|
|
Assert.Equal(abs, resolved, ignoreCase: OperatingSystem.IsWindows());
|
|
}
|
|
|
|
[Fact]
|
|
public void WorkspaceProject_AdditionalFields_DefaultsAreSafe()
|
|
{
|
|
var project = new WorkspaceProject();
|
|
Assert.Empty(project.Tags);
|
|
Assert.Empty(project.ToolFamilies);
|
|
Assert.False(project.Disabled);
|
|
}
|
|
|
|
[Fact]
|
|
public void WorkspaceConfig_FavoritesDefaultToEmpty()
|
|
{
|
|
var workspace = new WorkspaceConfig();
|
|
Assert.Empty(workspace.Favorites);
|
|
Assert.True(workspace.Inventory.Enabled);
|
|
Assert.Equal(4, workspace.Inventory.MaxDepth);
|
|
Assert.Contains("*.slnx", workspace.Inventory.IncludeMarkers);
|
|
}
|
|
|
|
[Fact]
|
|
public void FindAndLoad_AutoDiscover_AddsOnlyDevtoolProjects_NotMarkerOnlyCandidates()
|
|
{
|
|
var workspaceRoot = Path.Combine(Path.GetTempPath(), "sdt-ws-auto-" + Guid.NewGuid().ToString("N"));
|
|
var current = Path.Combine(workspaceRoot, "current");
|
|
var markerOnly = Path.Combine(workspaceRoot, "marker");
|
|
Directory.CreateDirectory(current);
|
|
Directory.CreateDirectory(markerOnly);
|
|
File.WriteAllText(Path.Combine(current, "devtool.json"), """{"name":"current","version":"0.1.0","workflows":[]}""");
|
|
File.WriteAllText(Path.Combine(markerOnly, "marker.csproj"), "<Project />");
|
|
|
|
var loaded = WorkspaceLoader.FindAndLoad(current);
|
|
Assert.NotNull(loaded);
|
|
Assert.Contains(loaded!.Value.Config.Projects, p =>
|
|
WorkspaceLoader.ResolveProjectRoot(loaded.Value.WorkspaceRoot, p).Equals(Path.GetFullPath(current), StringComparison.OrdinalIgnoreCase));
|
|
Assert.DoesNotContain(loaded.Value.Config.Projects, p =>
|
|
WorkspaceLoader.ResolveProjectRoot(loaded.Value.WorkspaceRoot, p).Equals(Path.GetFullPath(markerOnly), StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
}
|