feat: flexible matcher architecture and null/empty array equivalence#20
Merged
feat: flexible matcher architecture and null/empty array equivalence#20
Conversation
12cd392 to
8a3dba8
Compare
- Fix CompositeJsonMatcherTest to configure manage() method on mocks - Add comprehensive tests for NullEqualsEmptyArrayMatcher 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
8a3dba8 to
cacc78d
Compare
- Create integration test package - Move NullEqualsEmptyArrayMatcher integration tests to new class - Add tests for nested structures (deeply nested, inside arrays, multiple fields) - Keep only unit tests in NullEqualsEmptyArrayMatcherTest 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Document that missing property does NOT match empty array (intentional design decision per PR description) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Improve English and structure - Update installation to version 2.0.0 with Java 21/Jackson 3.x note - Add Quick Start section - Document all available matchers in tables - Add NullEqualsEmptyArrayMatcher section - Add Creating Custom Matchers section - Update examples for new CompositeJsonMatcher API 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove delegation pattern - matcher now only handles numbers. Use alongside StrictPrimitivePartialMatcher for full primitive support. Before: new LenientNumberPrimitivePartialMatcher(new StrictPrimitivePartialMatcher()) After: new LenientNumberPrimitivePartialMatcher(), new StrictPrimitivePartialMatcher() - Remove delegated field and constructor parameter - manage() now returns true only for numeric nodes - Add Javadoc with usage example - Update all tests and documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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.
Summary
This PR introduces a more flexible matcher architecture and adds the ability to treat
nulland empty arrays[]as equivalent.Closes #17
Breaking Changes
CompositeJsonMatcher API
The constructor now accepts varargs instead of 3 fixed parameters:
PartialJsonMatcher interface
New method
manage(JsonNode expected, JsonNode received)required to determine if a matcher handles a comparison.LenientNumberPrimitivePartialMatcher
No longer uses delegation pattern. Must be used alongside
StrictPrimitivePartialMatcher:New Features
NullEqualsEmptyArrayMatcher
Treats
nulland[]as equivalent:Note: Missing properties do NOT match empty arrays (intentional design decision).
Changes
manage()methodmanage()method to interfaceTest Plan
NullEqualsEmptyArrayMatcherLenientNumberPrimitivePartialMatcherrefactoringCompositeJsonMatcherTestfor new API🤖 Generated with Claude Code