Files
kompas3d-mcp/tests/Kompas.Mcp.Tests/KompasInstallLocatorTests.cs
T

56 lines
2.4 KiB
C#

using Kompas.Mcp.Core.Interop;
namespace Kompas.Mcp.Tests;
/// <summary>
/// Разбор значения <c>LocalServer32</c>. Тесты кроссплатформенные намеренно: значения — всегда
/// Windows-пути, но гоняются они и на Linux-раннере, поэтому разбор в локаторе не опирается
/// на <c>Path</c>.
/// </summary>
[Trait("Category", "Unit")]
public sealed class KompasInstallLocatorTests
{
[Theory]
// Реальное значение на v24 Home — путь в кавычках.
[InlineData("\"C:\\Program Files\\ASCON\\KOMPAS-3D v24 Home\\Bin\\kHome.Exe\"",
"C:\\Program Files\\ASCON\\KOMPAS-3D v24 Home\\Bin\\kHome.Exe")]
[InlineData("C:\\ASCON\\Bin\\kompas.exe", "C:\\ASCON\\Bin\\kompas.exe")]
// Без кавычек аргументы отрезаются по расширению, а не по первому пробелу.
[InlineData("C:\\Program Files\\ASCON\\Bin\\kHome.Exe /automation",
"C:\\Program Files\\ASCON\\Bin\\kHome.Exe")]
public void ParseServerCommand_extracts_executable(string raw, string expected)
=> Assert.Equal(expected, KompasInstallLocator.ParseServerCommand(raw));
[Theory]
[InlineData(null)]
[InlineData("")]
[InlineData(" ")]
public void ParseServerCommand_returns_null_for_empty(string? raw)
=> Assert.Null(KompasInstallLocator.ParseServerCommand(raw));
[Fact]
public void ParseServerCommand_returns_null_for_unclosed_quote()
=> Assert.Null(KompasInstallLocator.ParseServerCommand("\"C:\\ASCON\\Bin\\kHome.Exe"));
[Fact]
public void InstallRootFromServerCommand_strips_bin_subdirectory()
{
var root = KompasInstallLocator.InstallRootFromServerCommand(
"\"C:\\Program Files\\ASCON\\KOMPAS-3D v24 Home\\Bin\\kHome.Exe\"");
Assert.Equal("C:\\Program Files\\ASCON\\KOMPAS-3D v24 Home", root);
}
[Fact]
public void InstallRootFromServerCommand_keeps_directory_when_not_bin()
{
var root = KompasInstallLocator.InstallRootFromServerCommand("\"C:\\ASCON\\KOMPAS\\kHome.Exe\"");
Assert.Equal("C:\\ASCON\\KOMPAS", root);
}
[Fact]
public void InstallRootFromServerCommand_returns_null_for_empty()
=> Assert.Null(KompasInstallLocator.InstallRootFromServerCommand(null));
}