Initial commit to new repository
This commit is contained in:
95
src/AxCopilot.Tests/Services/ContextCondenserTests.cs
Normal file
95
src/AxCopilot.Tests/Services/ContextCondenserTests.cs
Normal file
@@ -0,0 +1,95 @@
|
||||
using System.Reflection;
|
||||
using AxCopilot.Models;
|
||||
using AxCopilot.Services.Agent;
|
||||
using FluentAssertions;
|
||||
using Xunit;
|
||||
|
||||
namespace AxCopilot.Tests.Services;
|
||||
|
||||
public class ContextCondenserTests
|
||||
{
|
||||
[Fact]
|
||||
public void TruncateToolResults_PreservesMessageMetadataOnCompression()
|
||||
{
|
||||
var messages = new List<ChatMessage>
|
||||
{
|
||||
new()
|
||||
{
|
||||
Role = "assistant",
|
||||
Content = "{\"type\":\"tool_result\",\"output\":\"" + new string('a', 4200) + "\"}",
|
||||
Timestamp = new DateTime(2026, 4, 3, 1, 0, 0),
|
||||
MetaKind = "tool_result",
|
||||
MetaRunId = "run-1",
|
||||
Feedback = "like",
|
||||
AttachedFiles = [@"E:\sample\a.txt"],
|
||||
Images =
|
||||
[
|
||||
new ImageAttachment
|
||||
{
|
||||
FileName = "image.png",
|
||||
MimeType = "image/png",
|
||||
Base64 = "AAA"
|
||||
}
|
||||
]
|
||||
},
|
||||
new() { Role = "user", Content = "recent-1" },
|
||||
new() { Role = "assistant", Content = "recent-2" },
|
||||
new() { Role = "user", Content = "recent-3" },
|
||||
new() { Role = "assistant", Content = "recent-4" },
|
||||
new() { Role = "user", Content = "recent-5" },
|
||||
new() { Role = "assistant", Content = "recent-6" },
|
||||
};
|
||||
|
||||
var changed = InvokePrivateStatic<bool>("TruncateToolResults", messages);
|
||||
|
||||
changed.Should().BeTrue();
|
||||
messages[0].MetaKind.Should().Be("tool_result");
|
||||
messages[0].MetaRunId.Should().Be("run-1");
|
||||
messages[0].Feedback.Should().Be("like");
|
||||
messages[0].AttachedFiles.Should().ContainSingle().Which.Should().Be(@"E:\sample\a.txt");
|
||||
messages[0].Images.Should().ContainSingle();
|
||||
messages[0].Images![0].FileName.Should().Be("image.png");
|
||||
messages[0].Content.Length.Should().BeLessThan(4200);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TruncateToolResults_PreservesMetadataForLongAssistantMessage()
|
||||
{
|
||||
var messages = new List<ChatMessage>
|
||||
{
|
||||
new()
|
||||
{
|
||||
Role = "assistant",
|
||||
Content = new string('b', 5000),
|
||||
Timestamp = new DateTime(2026, 4, 3, 1, 5, 0),
|
||||
MetaKind = "analysis",
|
||||
MetaRunId = "run-2",
|
||||
AttachedFiles = [@"E:\sample\b.txt"],
|
||||
},
|
||||
new() { Role = "user", Content = "recent-1" },
|
||||
new() { Role = "assistant", Content = "recent-2" },
|
||||
new() { Role = "user", Content = "recent-3" },
|
||||
new() { Role = "assistant", Content = "recent-4" },
|
||||
new() { Role = "user", Content = "recent-5" },
|
||||
new() { Role = "assistant", Content = "recent-6" },
|
||||
};
|
||||
|
||||
var changed = InvokePrivateStatic<bool>("TruncateToolResults", messages);
|
||||
|
||||
changed.Should().BeTrue();
|
||||
messages[0].MetaKind.Should().Be("analysis");
|
||||
messages[0].MetaRunId.Should().Be("run-2");
|
||||
messages[0].AttachedFiles.Should().ContainSingle().Which.Should().Be(@"E:\sample\b.txt");
|
||||
messages[0].Content.Length.Should().BeLessThan(5000);
|
||||
}
|
||||
|
||||
private static T InvokePrivateStatic<T>(string methodName, params object?[] arguments)
|
||||
{
|
||||
var method = typeof(ContextCondenser).GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Static);
|
||||
method.Should().NotBeNull();
|
||||
|
||||
var result = method!.Invoke(null, arguments);
|
||||
result.Should().NotBeNull();
|
||||
return (T)result!;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user