| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
There was a problem hiding this comment.
Adds new set-containment style collection assertions to FluentAssertions (BeSupersetOf, BeProperSubsetOf, BeProperSupersetOf) and factors shared subset/containment logic to reduce duplication, along with tests, docs, and updated API approval baselines.
Changes:
Copilot reviewed 11 out of 12 changed files in this pull request and generated 4 comments.
Show a summary per file| File | Description |
|---|---|
| Tests/FluentAssertions.Specs/Collections/CollectionAssertionSpecs.BeSupersetOf.cs | New specs covering BeSupersetOf success/failure and scope behavior. |
| Tests/FluentAssertions.Specs/Collections/CollectionAssertionSpecs.BeProperSupersetOf.cs | New specs covering BeProperSupersetOf, including equivalence and duplicates scenarios. |
| Tests/FluentAssertions.Specs/Collections/CollectionAssertionSpecs.BeProperSubsetOf.cs | New specs covering BeProperSubsetOf, including equivalence and null/empty scenarios. |
| Tests/Approval.Tests/ApprovedApi/FluentAssertions/netstandard2.1.verified.txt | API baseline updated for new assertions. |
| Tests/Approval.Tests/ApprovedApi/FluentAssertions/netstandard2.0.verified.txt | API baseline updated for new assertions. |
| Tests/Approval.Tests/ApprovedApi/FluentAssertions/net6.0.verified.txt | API baseline updated for new assertions. |
| Tests/Approval.Tests/ApprovedApi/FluentAssertions/net47.verified.txt | API baseline updated for new assertions. |
| Src/FluentAssertions/Common/EnumerableExtensions.cs | Adds internal ConvertOrCastToSet helper for set-based operations. |
| Src/FluentAssertions/Collections/GenericCollectionAssertions.cs | Implements the new assertions and refactors subset/containment logic into helpers. |
| docs/_pages/releases.md | Adds an “Unreleased” note about the new collection assertions. |
| docs/_pages/collections.md | Documents usage examples for the new assertions. |
| .gitignore | Fixes .junie/memory/ ignore entry and adds .nuke/temp. |
Tests/FluentAssertions.Specs/Collections/CollectionAssertionSpecs.BeProperSupersetOf.cs:68
public void A_collection_with_duplicates_is_not_a_proper_subset_of_another_with_duplicates()
Sorry, something went wrong.
…assertions Ports the work originally submitted in PR fluentassertions#2432 by @Meir017, adapted to the current AssertionChain-based assertion API. The original PR could not be reopened because its base branch (develop) no longer exists. - Add ConvertOrCastToSet extension to EnumerableExtensions - Extract AssertSubsetOf and AssertContainment helpers in GenericCollectionAssertions to share logic with the new assertions - Add BeSupersetOf, BeProperSubsetOf and BeProperSupersetOf methods - Add spec tests ported from the original PR - Update collections.md docs and releases.md Co-authored-by: Meir017 <Meir017@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Copilot reviewed 11 out of 12 changed files in this pull request and generated no new comments.
Suppressed comments (2)Tests/FluentAssertions.Specs/Collections/CollectionAssertionSpecs.BeProperSubsetOf.cs:54
public void A_collection_with_all_items_and_duplicates_of_a_superset_but_has_extra_items_is_not_a_proper_subset()
Tests/FluentAssertions.Specs/Collections/CollectionAssertionSpecs.BeProperSubsetOf.cs:38
This issue also appears on line 54 of the same file.
public void A_collection_with_all_items_of_a_superset_but_has_extra_items_is_not_a_proper_subset()
Sorry, something went wrong.
There was a problem hiding this comment.
We have an inconsistency in whether we allow the expectation to be empty.
E.g. when both subject and expectation are empty we get the following outcomes.
I think the superset APIs should allow the expectation to be empty.
See e.g. the discussion in #2143
Sorry, something went wrong.
Addresses jnyrup's review feedback on fluentassertions#3271: BeSupersetOf and BeProperSupersetOf previously threw ArgumentException when the expected collection was empty, which was inconsistent with BeSubsetOf/BeProperSubsetOf (an empty set is trivially a subset of everything, so a superset check against an empty expectation should never throw). - Split the empty-argument guard out of AssertContainment behind an allowEmptyExpectation flag so Contain keeps its existing behavior while BeSupersetOf/BeProperSupersetOf now evaluate normally instead of throwing. - BeSupersetOf(empty) now always passes. - BeProperSupersetOf(empty) now passes when the subject is non-empty and fails (not throws) when the subject is also empty, since two empty collections are identical rather than a proper superset. - Rewrote the XML doc comments for BeSubsetOf/BeSupersetOf/ BeProperSubsetOf/BeProperSupersetOf in plain language, removing set notation and math jargon, and dropped the now-inaccurate ArgumentException doc entries for the superset methods. - Wrapped single-element expectations in curly braces in the new superset failure messages, matching how multi-element collections are already rendered. - Added missing spec coverage: null expectation, both empty, and equal-non-empty collections for BeSupersetOf, BeProperSubsetOf and BeProperSupersetOf. - Updated docs/_pages/collections.md and releases.md. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Good points indeed. I think I have all scenarios covered now. |
Sorry, something went wrong.
…ainment Fixes a CI failure (StackTraceHiddenSpecs.Non_public_methods_in_annotable_classes_are_hidden) surfaced after modifying these private helper methods. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
| Back | FazBrowse Home | New Git URL |
Ports the work originally submitted in #2432 by @Meir017 ( Meir017:feature/api-subset-and-superset), which added BeSupersetOf, BeProperSubsetOf and BeProperSupersetOf collection assertions.
That PR could not be reopened because its base branch (develop) has since been deleted/renamed to main, so this PR recreates the same feature against current main.
What's included
Closes #2432
Resolves #2363
All credit for the original design and implementation goes to @Meir017.
Empty-collection behavior
Following up on review feedback, here's how each assertion behaves when the expected collection is empty:
BeSupersetOf and BeProperSupersetOf previously threw ArgumentException for an empty expectation instead of evaluating normally - that's now fixed so they behave consistently with BeSubsetOf/BeProperSubsetOf.