Fix dictionary key order sensitivity in Spector tests for languages with non-deterministic ordering #7866
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.
This PR resolves an issue where Spector tests would fail when client libraries sent JSON dictionaries with keys in different orders than expected, which was particularly problematic for languages like Rust where HashMap key order is not guaranteed.
Problem
When Rust clients (and other languages with non-deterministic object key ordering) sent dictionary data to Spector mock APIs, tests would fail even when the data was semantically identical:
The raw body validation used strict string comparison, causing these semantically equivalent JSON objects to be treated as different.
Solution
Enhanced the
validateRawBodyEquals
function in@typespec/spec-api
to perform semantic JSON comparison when both the actual and expected bodies are JSON content, while preserving exact string comparison for non-JSON content.Key Changes
isJsonContent()
helper safely identifies JSON stringsExample
Testing
Impact
Fixes #7687.
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.