dataconnect: testing: re-write Struct and ListValue arbs#7619
Merged
Conversation
Contributor
There was a problem hiding this comment.
Code Review
This pull request is a significant and well-executed refactoring of the Struct and ListValue arbitrary generators. By introducing the CompositeValueArb abstract class and the StructOrListValueGenerator, you've successfully eliminated a large amount of duplicated code and centralized the complex logic for generating nested data structures. The new implementation is more powerful, allowing for finer control over generation parameters like nested list/struct sizes, and the approach to handling edge cases is more robust and flexible. My only suggestion is to encapsulate the numerous probability parameters into a data class to improve the readability and maintainability of the generator functions.
stephenarosaj
approved these changes
Dec 23, 2025
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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 refactors of the
dataconnectarbitrary data generation forStructandListValuetypes for testing. The changes streamline the complex logic involved in creating diverse and deeply nested test data, enhancing the overall maintainability and clarity of the property-based testing framework. By consolidating common patterns and introducing a dedicated generator class, the codebase becomes more organized and easier to extend.Highlights
StructandListValueinstances has been significantly refactored to reduce code duplication. This involved introducing a newCompositeValueArbabstract class and aStructOrListValueGeneratorhelper.StructandListValueinstances has been centralized within theStructOrListValueGenerator, replacing previous duplicated logic and helper functions.Changelog
withAddedField,withAddedListIndex,Sample,withEdgecases) and added new ones (DataConnectPathSegment,withAddedPathSegment).valuefunction to accept an optionalstructKeyparameter, which is propagated tostructandlistValuecalls.listValueandstructfunction signatures to include new parameters (structKey,structSize,listSize) and adjusted their constructor calls to use new parameter names (sizeRange,depthRange, etc.).StructArbandListValueArbclasses with a new abstractCompositeValueArbbase class.GenerateCompositeValueProbabilitiesdata class to group probability parameters for cleaner function signatures.StructOrListValueGeneratorto centralize the core logic for generatingStructandListValueinstances, including handling nesting and edge cases.StructArbandListValueArbto extendCompositeValueArband delegate their generation logic to the newStructOrListValueGenerator.NextNestedValueResultdata class andNextNestedValueCaseenum, along with theRandomSource.nextNestedValueextension function, as their functionality is now integrated into the new generator architecture.