Add tests for JSON deserialization of serializable types#7373
Merged
stephentoub merged 7 commits intomainfrom Mar 9, 2026
Merged
Add tests for JSON deserialization of serializable types#7373stephentoub merged 7 commits intomainfrom
stephentoub merged 7 commits intomainfrom
Conversation
Add a new test that deserializes a hardcoded JSON string covering all serializable properties of ChatResponseUpdate using AIJsonUtilities.DefaultOptions, then asserts each property value. Co-authored-by: Copilot <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Copilot <[email protected]>
…rializable types Co-authored-by: stephentoub <[email protected]>
stephentoub
approved these changes
Mar 8, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
Adds “known payload” JSON deserialization tests across Microsoft.Extensions.AI.Abstractions exchange types to validate that AIJsonUtilities.DefaultOptions (and relevant test contexts) can correctly materialize expected object graphs, including polymorphic $type payloads and additional properties.
Changes:
- Added
JsonDeserialization_KnownPayloadtests for core chat, content, embeddings, speech-to-text, image generation, and usage types. - Validated polymorphic
$typehandling forAIContent/AIAnnotationpayloads and common metadata fields (e.g., continuation tokens, additional properties). - Expanded coverage for options/response DTOs to ensure property naming and converters match “known” JSON shapes.
Reviewed changes
Copilot reviewed 38 out of 38 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/UsageDetailsTests.cs | Adds known-payload deserialization coverage for UsageDetails, including AdditionalCounts. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/SpeechToText/SpeechToTextResponseUpdateTests.cs | Adds known-payload deserialization coverage for SpeechToTextResponseUpdate (kind, timespan, contents, additional props). |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/SpeechToText/SpeechToTextResponseTests.cs | Adds known-payload deserialization coverage for SpeechToTextResponse (contents, usage, additional props). |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/SpeechToText/SpeechToTextOptionsTests.cs | Adds known-payload deserialization coverage for SpeechToTextOptions. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Image/ImageGenerationResponseTests.cs | Adds known-payload deserialization coverage for ImageGenerationResponse contents + usage. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Image/ImageGenerationOptionsTests.cs | Adds known-payload deserialization coverage for ImageGenerationOptions including size/format and additional props. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Embeddings/EmbeddingTests.cs | Adds known-payload deserialization coverage for polymorphic Embedding ($type: float32). |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Embeddings/EmbeddingGenerationOptionsTests.cs | Adds known-payload deserialization coverage for EmbeddingGenerationOptions. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/WebSearchToolResultContentTests.cs | Adds known-payload deserialization coverage for experimental web-search tool result content via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/WebSearchToolCallContentTests.cs | Adds known-payload deserialization coverage for experimental web-search tool call content via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/UsageContentTests.cs | Adds known-payload deserialization coverage for UsageContent wrapping UsageDetails. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/UriContentTests.cs | Adds known-payload deserialization coverage for UriContent via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ToolResultContentTests.cs | Adds known-payload deserialization coverage for ToolResultContent via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ToolCallContentTests.cs | Adds known-payload deserialization coverage for ToolCallContent via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ToolApprovalResponseContentTests.cs | Adds known-payload deserialization coverage for ToolApprovalResponseContent (nested tool call). |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ToolApprovalRequestContentTests.cs | Adds known-payload deserialization coverage for ToolApprovalRequestContent (nested tool call). |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/TextReasoningContentTests.cs | Adds known-payload deserialization coverage for TextReasoningContent via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/TextContentTests.cs | Adds known-payload deserialization coverage for TextContent via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/McpServerToolResultContentTests.cs | Adds known-payload deserialization coverage for McpServerToolResultContent with outputs via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/McpServerToolCallContentTests.cs | Adds known-payload deserialization coverage for McpServerToolCallContent with arguments via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/InputResponseContentTests.cs | Adds known-payload deserialization coverage for InputResponseContent polymorphism (toolApprovalResponse). |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/InputRequestContentTests.cs | Adds known-payload deserialization coverage for InputRequestContent polymorphism (toolApprovalRequest). |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ImageGenerationToolResultContentTests.cs | Adds known-payload deserialization coverage for experimental image-generation tool result content via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ImageGenerationToolCallContentTests.cs | Adds known-payload deserialization coverage for experimental image-generation tool call content via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/HostedVectorStoreContentTests.cs | Adds known-payload deserialization coverage for HostedVectorStoreContent via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/HostedFileContentTests.cs | Adds known-payload deserialization coverage for HostedFileContent (experimental-backed JSON-included properties). |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/FunctionResultContentTests.cs | Adds known-payload deserialization coverage for FunctionResultContent via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/FunctionCallContentTests.cs | Adds known-payload deserialization coverage for FunctionCallContent via $type (args + informationalOnly). |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/ErrorContentTests.cs | Adds known-payload deserialization coverage for ErrorContent via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/DataContentTests.cs | Adds known-payload deserialization coverage for DataContent via $type (data URI parsing). |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/CodeInterpreterToolResultContentTests.cs | Adds known-payload deserialization coverage for experimental code-interpreter tool result content via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/CodeInterpreterToolCallContentTests.cs | Adds known-payload deserialization coverage for experimental code-interpreter tool call content via $type. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/CitationAnnotationTests.cs | Adds known-payload deserialization coverage for CitationAnnotation via AIAnnotation polymorphism. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/ChatCompletion/ReasoningOptionsTests.cs | Adds known-payload deserialization coverage for ReasoningOptions via test serializer context. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/ChatCompletion/ChatResponseUpdateTests.cs | Adds known-payload deserialization coverage for ChatResponseUpdate including polymorphic contents and continuation token. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/ChatCompletion/ChatResponseTests.cs | Adds known-payload deserialization coverage for ChatResponse including nested messages and continuation token. |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/ChatCompletion/ChatOptionsTests.cs | Adds known-payload deserialization coverage for ChatOptions (reasoning, tool mode, response format, continuation token). |
| test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/ChatCompletion/ChatMessageTests.cs | Adds known-payload deserialization coverage for ChatMessage including multiple content item types. |
test/Libraries/Microsoft.Extensions.AI.Abstractions.Tests/Image/ImageGenerationOptionsTests.cs
Outdated
Show resolved
Hide resolved
...braries/Microsoft.Extensions.AI.Abstractions.Tests/Contents/WebSearchToolCallContentTests.cs
Outdated
Show resolved
Hide resolved
Member
|
@copilot address the feedback |
Co-authored-by: stephentoub <[email protected]>
auto-merge was automatically disabled
March 8, 2026 01:46
Head branch was pushed to by a user without write access
Contributor
Author
eiriktsarpalis
approved these changes
Mar 9, 2026
jeffhandley
pushed a commit
to jeffhandley/extensions
that referenced
this pull request
Mar 17, 2026
Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: stephentoub <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
JsonDeserialization_KnownPayloadtest to ChatResponseTests.csJsonDeserialization_KnownPayloadtest to ChatMessageTests.csJsonDeserialization_KnownPayloadtest to ChatResponseUpdateTests.csJsonDeserialization_KnownPayloadtest to ChatOptionsTests.csJsonDeserialization_KnownPayloadtest to UsageDetailsTests.csJsonDeserialization_KnownPayloadtest to ReasoningOptionsTests.csJsonDeserialization_KnownPayloadtest to TextContentTests.csJsonDeserialization_KnownPayloadtest to ErrorContentTests.csJsonDeserialization_KnownPayloadtest to FunctionCallContentTests.csJsonDeserialization_KnownPayloadtest to FunctionResultContentTests.csJsonDeserialization_KnownPayloadtest to ToolCallContentTests.csJsonDeserialization_KnownPayloadtest to ToolResultContentTests.csJsonDeserialization_KnownPayloadtest to UriContentTests.csJsonDeserialization_KnownPayloadtest to UsageContentTests.csJsonDeserialization_KnownPayloadtest to TextReasoningContentTests.csJsonDeserialization_KnownPayloadtest to DataContentTests.csJsonDeserialization_KnownPayloadtest to HostedFileContentTests.csJsonDeserialization_KnownPayloadtest to HostedVectorStoreContentTests.csJsonDeserialization_KnownPayloadtest to InputRequestContentTests.csJsonDeserialization_KnownPayloadtest to InputResponseContentTests.csJsonDeserialization_KnownPayloadtest to ToolApprovalRequestContentTests.csJsonDeserialization_KnownPayloadtest to ToolApprovalResponseContentTests.csJsonDeserialization_KnownPayloadtest to McpServerToolCallContentTests.csJsonDeserialization_KnownPayloadtest to McpServerToolResultContentTests.csJsonDeserialization_KnownPayloadtest to CitationAnnotationTests.csJsonDeserialization_KnownPayloadtest to EmbeddingTests.csJsonDeserialization_KnownPayloadtest to EmbeddingGenerationOptionsTests.csJsonDeserialization_KnownPayloadtest to SpeechToTextResponseTests.csJsonDeserialization_KnownPayloadtest to SpeechToTextResponseUpdateTests.csJsonDeserialization_KnownPayloadtest to SpeechToTextOptionsTests.csJsonDeserialization_KnownPayloadtest to ImageGenerationResponseTests.csJsonDeserialization_KnownPayloadtest to ImageGenerationOptionsTests.csJsonDeserialization_KnownPayloadtest to CodeInterpreterToolCallContentTests.csJsonDeserialization_KnownPayloadtest to CodeInterpreterToolResultContentTests.csJsonDeserialization_KnownPayloadtest to ImageGenerationToolCallContentTests.csJsonDeserialization_KnownPayloadtest to ImageGenerationToolResultContentTests.csJsonDeserialization_KnownPayloadtest to WebSearchToolCallContentTests.csJsonDeserialization_KnownPayloadtest to WebSearchToolResultContentTests.cs✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.
Microsoft Reviewers: Open in CodeFlow