using System; using NixWslWrapper.Core.Domain; using Xunit; namespace NixWslWrapper.Tests { public class CoreTests { [Fact] public void WslTarget_ValidParameters_ShouldConstructCorrectly() { var target = new WslTarget("Debian", "root", "/some/path"); Assert.Equal("Debian", target.Distribution); Assert.Equal("root", target.User); Assert.Equal("/some/path", target.NixProfilePath); } [Theory] [InlineData("", "root", "/path")] [InlineData("Debian", "", "/path")] [InlineData("Debian", "root", "")] [InlineData(null, "root", "/path")] [InlineData("Debian", null, "/path")] [InlineData("Debian", "root", null)] public void WslTarget_InvalidParameters_ShouldThrowArgumentException(string? distro, string? user, string? profile) { Assert.Throws(() => new WslTarget(distro!, user!, profile!)); } [Fact] public void WslTarget_Equality_ShouldBeTrueForSameValues() { var target1 = new WslTarget("Debian", "root", "/path"); var target2 = new WslTarget("debian", "ROOT", "/path"); // case-insensitive for distro/user Assert.Equal(target1, target2); } [Fact] public void NixArguments_EmptyArgs_ShouldReturnEmptyEscapedString() { var args = new NixArguments(Array.Empty()); Assert.Equal(string.Empty, args.ToEscapedString()); } [Fact] public void NixArguments_WithSpecialCharacters_ShouldEscapeDoubleQuotes() { var args = new NixArguments(new[] { "run", "nixpkgs#hello", "--argstr", "msg", "hello \"world\"" }); string escaped = args.ToEscapedString(); Assert.Equal("\"run\" \"nixpkgs#hello\" \"--argstr\" \"msg\" \"hello \\\"world\\\"\"", escaped); } [Fact] public void ExecutionResult_Success_ShouldSetCorrectProperties() { var result = ExecutionResult.Success(); Assert.True(result.IsSuccess); Assert.Equal(0, result.ExitCode); Assert.Null(result.ErrorMessage); } [Fact] public void ExecutionResult_Failure_ShouldSetCorrectProperties() { var result = ExecutionResult.Failure(5, "Access Denied"); Assert.False(result.IsSuccess); Assert.Equal(5, result.ExitCode); Assert.Equal("Access Denied", result.ErrorMessage); } } }