应文浩wenhao.ying@xiaobao100.com bce2612b64 feat: 完善具体实现
2026-04-06 15:25:34 +08:00

54 lines
1.5 KiB
C#

using FluentAssertions;
using FreeCode.Tools;
using FreeCode.Tests.Unit.Helpers;
using Xunit;
namespace FreeCode.Tests.Unit.Tools;
public sealed class BashToolTests
{
private readonly BashTool _sut = new();
[Fact]
public async Task ExecuteAsync_EchoCommand_ReturnsOutput()
{
var context = TestHelper.CreateContext();
var result = await _sut.ExecuteAsync(new BashToolInput("echo"), context);
result.IsError.Should().BeFalse();
result.Data.Stdout.Should().NotBeNull();
result.Data.ExitCode.Should().Be(0);
}
[Theory]
[InlineData("ls -la", true)]
[InlineData("rm file.txt", false)]
public void IsReadOnly_ClassifiesCommandsCorrectly(string command, bool expected)
{
_sut.IsReadOnly(new BashToolInput(command)).Should().Be(expected);
}
[Fact]
public async Task ExecuteAsync_WithShortTimeout_InterruptsProcess()
{
var context = TestHelper.CreateContext();
var result = await _sut.ExecuteAsync(new BashToolInput("sleep 1", timeout: 25), context);
result.Data.Interrupted.Should().BeTrue();
result.Data.ExitCode.Should().NotBe(0);
}
[Fact]
public async Task ExecuteAsync_InBackground_ReturnsBackgroundTaskId()
{
var context = TestHelper.CreateContext();
var result = await _sut.ExecuteAsync(new BashToolInput("sleep 1", runInBackground: true), context);
result.IsError.Should().BeFalse();
result.Data.BackgroundTaskId.Should().NotBeNullOrWhiteSpace();
}
}