Skip to content

Commit

Permalink
Enable unit tests to build and pass on .NET Framework
Browse files Browse the repository at this point in the history
  • Loading branch information
stephentoub committed May 18, 2024
1 parent 4998063 commit 52de7d7
Show file tree
Hide file tree
Showing 80 changed files with 238 additions and 192 deletions.
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 @@ 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, 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

0 comments on commit 52de7d7

Please sign in to comment.