// Copyright (c) Microsoft Corporation. All rights reserved. // MessageExtensionTests.cs using AutoGen.Core; using AutoGen.DotnetInteractive.Extension; using FluentAssertions; using Xunit; namespace AutoGen.DotnetInteractive.Tests; [Trait("Category", "UnitV1")] public class MessageExtensionTests { [Fact] public void ExtractCodeBlock_WithSingleCodeBlock_ShouldReturnCodeBlock() { // Arrange var message = new TextMessage(Role.Assistant, "```csharp\nConsole.WriteLine(\"Hello, World!\");\n```"); var codeBlockPrefix = "```csharp"; var codeBlockSuffix = "```"; // Act var codeBlock = message.ExtractCodeBlock(codeBlockPrefix, codeBlockSuffix); codeBlock.Should().BeEquivalentTo("Console.WriteLine(\"Hello, World!\");"); } [Fact] public void ExtractCodeBlock_WithMultipleCodeBlocks_ShouldReturnFirstCodeBlock() { // Arrange var message = new TextMessage(Role.Assistant, "```csharp\nConsole.WriteLine(\"Hello, World!\");\n```\n```csharp\nConsole.WriteLine(\"Hello, World!\");\n```"); var codeBlockPrefix = "```csharp"; var codeBlockSuffix = "```"; // Act var codeBlock = message.ExtractCodeBlock(codeBlockPrefix, codeBlockSuffix); codeBlock.Should().BeEquivalentTo("Console.WriteLine(\"Hello, World!\");"); } [Fact] public void ExtractCodeBlock_WithNoCodeBlock_ShouldReturnNull() { // Arrange var message = new TextMessage(Role.Assistant, "Hello, World!"); var codeBlockPrefix = "```csharp"; var codeBlockSuffix = "```"; // Act var codeBlock = message.ExtractCodeBlock(codeBlockPrefix, codeBlockSuffix); codeBlock.Should().BeNull(); } [Fact] public void ExtractCodeBlocks_WithMultipleCodeBlocks_ShouldReturnAllCodeBlocks() { // Arrange var message = new TextMessage(Role.Assistant, "```csharp\nConsole.WriteLine(\"Hello, World!\");\n```\n```csharp\nConsole.WriteLine(\"Hello, World!\");\n```"); var codeBlockPrefix = "```csharp"; var codeBlockSuffix = "```"; // Act var codeBlocks = message.ExtractCodeBlocks(codeBlockPrefix, codeBlockSuffix); codeBlocks.Should().HaveCount(2); codeBlocks.ElementAt(0).Should().BeEquivalentTo("Console.WriteLine(\"Hello, World!\");"); codeBlocks.ElementAt(1).Should().BeEquivalentTo("Console.WriteLine(\"Hello, World!\");"); } [Fact] public void ExtractCodeBlocks_WithNoCodeBlock_ShouldReturnEmpty() { // Arrange var message = new TextMessage(Role.Assistant, "Hello, World!"); var codeBlockPrefix = "```csharp"; var codeBlockSuffix = "```"; // Act var codeBlocks = message.ExtractCodeBlocks(codeBlockPrefix, codeBlockSuffix); codeBlocks.Should().BeEmpty(); } }