Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

.Net: Enable unit tests to build and pass on .NET Framework #6326

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dotnet/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
<PackageVersion Include="System.Linq.Async" Version="6.0.1" />
<PackageVersion Include="System.Memory.Data" Version="8.0.0" />
<PackageVersion Include="System.Numerics.Tensors" Version="8.0.0" />
<PackageVersion Include="System.Text.Json" Version="8.0.2" />
<PackageVersion Include="System.Text.Json" Version="8.0.3" />
<PackageVersion Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
<PackageVersion Include="System.ValueTuple" Version="4.5.0" />
<!-- Tokenizers -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<AssemblyName>SemanticKernel.Connectors.AzureAISearch.UnitTests</AssemblyName>
<RootNamespace>SemanticKernel.Connectors.AzureAISearch.UnitTests</RootNamespace>
<TargetFramework>net8.0</TargetFramework>
<TargetFrameworks>net8.0;net462</TargetFrameworks>
<IsTestProject>true</IsTestProject>
<Nullable>enable</Nullable>
<ImplicitUsings>disable</ImplicitUsings>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<AssemblyName>SemanticKernel.Connectors.GoogleVertexAI.UnitTests</AssemblyName>
<RootNamespace>SemanticKernel.Connectors.GoogleVertexAI.UnitTests</RootNamespace>
<TargetFramework>net8.0</TargetFramework>
<TargetFrameworks>net8.0;net462</TargetFrameworks>
<IsTestProject>true</IsTestProject>
<Nullable>enable</Nullable>
<ImplicitUsings>disable</ImplicitUsings>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

using System;
using System.Buffers;
using System.IO;
using System.Text.Json;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.Google.Core;
Expand Down Expand Up @@ -94,67 +95,72 @@ public void WriteWhenRoleIsUserReturnsUser()
{
// Arrange
var converter = new AuthorRoleConverter();
var bufferWriter = new ArrayBufferWriter<byte>();
using var writer = new Utf8JsonWriter(bufferWriter);
var stream = new MemoryStream();
using var writer = new Utf8JsonWriter(stream);

// Act
converter.Write(writer, AuthorRole.User, JsonSerializerOptions.Default);
writer.Flush();

// Assert
Assert.Equal("\"user\""u8, bufferWriter.GetSpan().Trim((byte)'\0'));
Assert.Equal("\"user\""u8.ToArray(), stream.ToArray());
}

[Fact]
public void WriteWhenRoleIsAssistantReturnsModel()
{
// Arrange
var converter = new AuthorRoleConverter();
var bufferWriter = new ArrayBufferWriter<byte>();
using var writer = new Utf8JsonWriter(bufferWriter);
var stream = new MemoryStream();
using var writer = new Utf8JsonWriter(stream);

// Act
converter.Write(writer, AuthorRole.Assistant, JsonSerializerOptions.Default);
writer.Flush();

// Assert
Assert.Equal("\"model\""u8, bufferWriter.GetSpan().Trim((byte)'\0'));
Assert.Equal("\"model\""u8.ToArray(), stream.ToArray());
}

[Fact]
public void WriteWhenRoleIsToolReturnsFunction()
{
// Arrange
var converter = new AuthorRoleConverter();
var bufferWriter = new ArrayBufferWriter<byte>();
using var writer = new Utf8JsonWriter(bufferWriter);
var stream = new MemoryStream();
using var writer = new Utf8JsonWriter(stream);

// Act
converter.Write(writer, AuthorRole.Tool, JsonSerializerOptions.Default);
writer.Flush();

// Assert
Assert.Equal("\"function\""u8, bufferWriter.GetSpan().Trim((byte)'\0'));
Assert.Equal("\"function\""u8.ToArray(), stream.ToArray());
}

[Fact]
public void WriteWhenRoleIsNullReturnsNull()
{
// Arrange
var converter = new AuthorRoleConverter();
var bufferWriter = new ArrayBufferWriter<byte>();
using var writer = new Utf8JsonWriter(bufferWriter);
var stream = new MemoryStream();
using var writer = new Utf8JsonWriter(stream);

// Act
converter.Write(writer, null, JsonSerializerOptions.Default);
writer.Flush();

// Assert
Assert.Equal("null"u8, bufferWriter.GetSpan().Trim((byte)'\0'));
Assert.Equal("null"u8.ToArray(), stream.ToArray());
}

[Fact]
public void WriteWhenRoleIsNotUserOrAssistantOrToolThrows()
{
// Arrange
var converter = new AuthorRoleConverter();
using var writer = new Utf8JsonWriter(new ArrayBufferWriter<byte>());
var stream = new MemoryStream();
using var writer = new Utf8JsonWriter(stream);

// Act
void Act()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public GeminiChatGenerationFunctionCallingTests()
{
this._responseContent = File.ReadAllText(ChatTestDataFilePath);
this._responseContentWithFunction = File.ReadAllText(ChatTestDataWithFunctionFilePath)
.Replace("%nameSeparator%", GeminiFunction.NameSeparator, StringComparison.Ordinal);
.Replace("%nameSeparator%", GeminiFunction.NameSeparator);
this._messageHandlerStub = new HttpMessageHandlerStub();
this._messageHandlerStub.ResponseToReturn.Content = new StringContent(
this._responseContent);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public async Task ShouldContainRolesInRequestAsync()
{
// Arrange
this._messageHandlerStub.ResponseToReturn.Content = new StringContent(
await File.ReadAllTextAsync(ChatTestDataFilePath));
File.ReadAllText(ChatTestDataFilePath));
var client = this.CreateChatCompletionClient();
var chatHistory = CreateSampleChatHistory();

Expand Down Expand Up @@ -115,7 +115,7 @@ public async Task ShouldReturnValidGeminiMetadataAsync()

// Assert
GeminiResponse testDataResponse = JsonSerializer.Deserialize<GeminiResponse>(
await File.ReadAllTextAsync(ChatTestDataFilePath))!;
File.ReadAllText(ChatTestDataFilePath))!;
var testDataCandidate = testDataResponse.Candidates![0];
var textContent = chatMessageContents.SingleOrDefault();
Assert.NotNull(textContent);
Expand Down Expand Up @@ -160,7 +160,7 @@ public async Task ShouldReturnValidDictionaryMetadataAsync()

// Assert
GeminiResponse testDataResponse = JsonSerializer.Deserialize<GeminiResponse>(
await File.ReadAllTextAsync(ChatTestDataFilePath))!;
File.ReadAllText(ChatTestDataFilePath))!;
var testDataCandidate = testDataResponse.Candidates![0];
var textContent = chatMessageContents.SingleOrDefault();
Assert.NotNull(textContent);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public GeminiChatStreamingFunctionCallingTests()
{
this._responseContent = File.ReadAllText(ChatTestDataFilePath);
this._responseContentWithFunction = File.ReadAllText(ChatTestDataWithFunctionFilePath)
.Replace("%nameSeparator%", GeminiFunction.NameSeparator, StringComparison.Ordinal);
.Replace("%nameSeparator%", GeminiFunction.NameSeparator);
this._messageHandlerStub = new HttpMessageHandlerStub();
this._messageHandlerStub.ResponseToReturn.Content = new StringContent(
this._responseContent);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public async Task ShouldReturnValidChatResponseAsync()

// Assert
List<GeminiResponse> testDataResponse = JsonSerializer.Deserialize<List<GeminiResponse>>(
await File.ReadAllTextAsync(StreamTestDataFilePath))!;
File.ReadAllText(StreamTestDataFilePath))!;

Assert.NotEmpty(chatMessageContents);
Assert.Equal(testDataResponse.Count, chatMessageContents.Count);
Expand Down Expand Up @@ -128,7 +128,7 @@ public async Task ShouldReturnValidGeminiMetadataAsync()

// Assert
GeminiResponse testDataResponse = JsonSerializer.Deserialize<List<GeminiResponse>>(
await File.ReadAllTextAsync(StreamTestDataFilePath))![0];
File.ReadAllText(StreamTestDataFilePath))![0];
var testDataCandidate = testDataResponse.Candidates![0];
var textContent = chatMessageContents.FirstOrDefault();
Assert.NotNull(textContent);
Expand Down Expand Up @@ -174,7 +174,7 @@ public async Task ShouldReturnValidDictionaryMetadataAsync()

// Assert
GeminiResponse testDataResponse = JsonSerializer.Deserialize<List<GeminiResponse>>(
await File.ReadAllTextAsync(StreamTestDataFilePath))![0];
File.ReadAllText(StreamTestDataFilePath))![0];
var testDataCandidate = testDataResponse.Candidates![0];
var textContent = chatMessageContents.FirstOrDefault();
Assert.NotNull(textContent);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ public void FromChatHistoryCalledToolNotNullAddsFunctionResponse()
{
// Arrange
ChatHistory chatHistory = [];
var kvp = KeyValuePair.Create("sampleKey", "sampleValue");
var kvp = new KeyValuePair<string, string>("sampleKey", "sampleValue");
var expectedArgs = new JsonObject { [kvp.Key] = kvp.Value };
var kernelFunction = KernelFunctionFactory.CreateFromMethod(() => "");
var toolCall = new GeminiFunctionToolCall(new GeminiPart.FunctionCallPart { FunctionName = "function-name" });
Expand All @@ -242,7 +242,7 @@ public void FromChatHistoryToolCallsNotNullAddsFunctionCalls()
{
// Arrange
ChatHistory chatHistory = [];
var kvp = KeyValuePair.Create("sampleKey", "sampleValue");
var kvp = new KeyValuePair<string, string>("sampleKey", "sampleValue");
var expectedArgs = new JsonObject { [kvp.Key] = kvp.Value };
var toolCallPart = new GeminiPart.FunctionCallPart
{ FunctionName = "function-name", Arguments = expectedArgs };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.SemanticKernel.Connectors.Google.Core;
Expand All @@ -27,7 +28,7 @@ public async Task SerializationShouldPopulateAllPropertiesAsync()
// Arrange
var parser = new StreamJsonParser();
var stream = new MemoryStream();
var streamExample = await File.ReadAllTextAsync(StreamTestDataFilePath);
var streamExample = File.ReadAllText(StreamTestDataFilePath);
var sampleResponses = JsonSerializer.Deserialize<List<GeminiResponse>>(streamExample)!;

WriteToStream(stream, streamExample);
Expand All @@ -43,7 +44,7 @@ public async Task SerializationShouldPopulateAllPropertiesAsync()

private static void WriteToStream(Stream stream, string input)
{
using var writer = new StreamWriter(stream, leaveOpen: true);
using var writer = new StreamWriter(stream, Encoding.UTF8, bufferSize: 0x1000, leaveOpen: true);
writer.Write(input);
writer.Flush();
stream.Position = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,12 +87,11 @@ public async Task ShouldReturnValidEmbeddingsResponseAsync()
var embeddings = await client.GenerateEmbeddingsAsync(dataToEmbed);

// Assert
GoogleAIEmbeddingResponse testDataResponse = JsonSerializer.Deserialize<GoogleAIEmbeddingResponse>(
await File.ReadAllTextAsync(TestDataFilePath))!;
GoogleAIEmbeddingResponse testDataResponse = JsonSerializer.Deserialize<GoogleAIEmbeddingResponse>(File.ReadAllText(TestDataFilePath))!;
Assert.NotNull(embeddings);
Assert.Collection(embeddings,
values => Assert.Equal(testDataResponse.Embeddings[0].Values, values),
values => Assert.Equal(testDataResponse.Embeddings[1].Values, values));
values => Assert.Equal(testDataResponse.Embeddings[0].Values.ToArray(), values.ToArray()),
values => Assert.Equal(testDataResponse.Embeddings[1].Values.ToArray(), values.ToArray()));
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,11 @@ public async Task ShouldReturnValidEmbeddingsResponseAsync()
var embeddings = await client.GenerateEmbeddingsAsync(dataToEmbed);

// Assert
VertexAIEmbeddingResponse testDataResponse = JsonSerializer.Deserialize<VertexAIEmbeddingResponse>(
await File.ReadAllTextAsync(TestDataFilePath))!;
VertexAIEmbeddingResponse testDataResponse = JsonSerializer.Deserialize<VertexAIEmbeddingResponse>(File.ReadAllText(TestDataFilePath))!;
Assert.NotNull(embeddings);
Assert.Collection(embeddings,
values => Assert.Equal(testDataResponse.Predictions[0].Embeddings.Values, values),
values => Assert.Equal(testDataResponse.Predictions[1].Embeddings.Values, values));
values => Assert.Equal(testDataResponse.Predictions[0].Embeddings.Values.ToArray(), values.ToArray()),
values => Assert.Equal(testDataResponse.Predictions[1].Embeddings.Values.ToArray(), values.ToArray()));
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<AssemblyName>SemanticKernel.Connectors.HuggingFace.UnitTests</AssemblyName>
<RootNamespace>SemanticKernel.Connectors.HuggingFace.UnitTests</RootNamespace>
<TargetFramework>net8.0</TargetFramework>
<TargetFrameworks>net8.0;net462</TargetFrameworks>
<IsTestProject>true</IsTestProject>
<Nullable>enable</Nullable>
<ImplicitUsings>disable</ImplicitUsings>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

namespace SemanticKernel.Connectors.HuggingFace.UnitTests;

#pragma warning disable CA1812
#pragma warning disable CA1812, CA2016

internal sealed class MultipleHttpMessageHandlerStub : DelegatingHandler
{
Expand All @@ -36,7 +36,7 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
this.RequestHeaders.Add(request.Headers);
this.ContentHeaders.Add(request.Content?.Headers);

var content = request.Content is null ? null : await request.Content.ReadAsByteArrayAsync(cancellationToken);
var content = request.Content is null ? null : await request.Content.ReadAsByteArrayAsync();

this.RequestContents.Add(content);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ public async Task ShouldSendPromptToServiceAsync()
var requestPayload = this._messageHandlerStub.RequestContent;

Assert.NotNull(requestPayload);
Assert.Equal(this._imageContentInput.Data!.Value.Span, requestPayload);
Assert.Equal(this._imageContentInput.Data!.Value.ToArray(), requestPayload);
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.SemanticKernel.Connectors.HuggingFace.Core;
Expand Down Expand Up @@ -75,7 +76,7 @@ await foreach (var chunk in parser.ParseAsync(stream))

private static void WriteToStream(Stream stream, string input)
{
using var writer = new StreamWriter(stream, leaveOpen: true);
using var writer = new StreamWriter(stream, Encoding.UTF8, 0x1000, leaveOpen: true);
writer.Write(input);
writer.Flush();
stream.Position = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,7 @@ public class WidgetFactory
[Description("Creates a new widget of the specified type and colors")]
public string CreateWidget([Description("The colors of the widget to be created")] WidgetColor[] widgetColors)
{
var colors = string.Join('-', widgetColors.Select(c => c.GetDisplayName()).ToArray());
var colors = string.Join("-", widgetColors.Select(c => c.GetDisplayName()).ToArray());
return $"Widget created with colors: {colors}";
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<AssemblyName>SemanticKernel.Connectors.MistralAI.UnitTests</AssemblyName>
<RootNamespace>SemanticKernel.Connectors.MistralAI.UnitTests</RootNamespace>
<TargetFramework>net8.0</TargetFramework>
<TargetFrameworks>net8.0;net462</TargetFrameworks>
<LangVersion>12</LangVersion>
<RollForward>LatestMajor</RollForward>
<IsTestProject>true</IsTestProject>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
using Xunit;

namespace SemanticKernel.Connectors.MistralAI.UnitTests;

#pragma warning disable CA2016

public abstract class MistralTestBase : IDisposable
{
protected AssertingDelegatingHandler? DelegatingHandler { get; set; }
Expand Down Expand Up @@ -94,7 +97,7 @@ protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage
Assert.Equal(this.Method, request.Method);
Assert.Equal(this.RequestHeaders, request.Headers);

this.RequestContent = await request.Content!.ReadAsStringAsync(cancellationToken);
this.RequestContent = await request.Content!.ReadAsStringAsync();

if (this._responseStringArray is not null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<AssemblyName>SemanticKernel.Connectors.Onnx.UnitTests</AssemblyName>
<RootNamespace>SemanticKernel.Connectors.Onnx.UnitTests</RootNamespace>
<TargetFramework>net8.0</TargetFramework>
<TargetFrameworks>net8.0;net462</TargetFrameworks>
<IsTestProject>true</IsTestProject>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<AssemblyName>SemanticKernel.Connectors.UnitTests</AssemblyName>
<RootNamespace>SemanticKernel.Connectors.UnitTests</RootNamespace>
<TargetFramework>net8.0</TargetFramework>
<TargetFrameworks>net8.0;net462</TargetFrameworks>
<IsTestProject>true</IsTestProject>
<Nullable>enable</Nullable>
<ImplicitUsings>disable</ImplicitUsings>
Expand Down
Loading
Loading