From 18d38225aefc8d73b0bcf356863458e5c54d03f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Denuzi=C3=A8re?= Date: Fri, 8 Aug 2025 17:04:30 +0200 Subject: [PATCH] feat: include public fields in POCOs --- src/Diffract/Differ.fs | 5 ++++- tests/Diffract.CSharp.Tests/Tests.cs | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Diffract/Differ.fs b/src/Diffract/Differ.fs index a0c1f0b..1ecb9bb 100644 --- a/src/Diffract/Differ.fs +++ b/src/Diffract/Differ.fs @@ -124,7 +124,10 @@ module DifferImpl = |> e.Accept addNonRecursiveToCache differ cache | Shape.Poco (:? ShapePoco<'T> as p) -> - let members = p.Properties |> Array.filter (fun p -> p.IsPublic) + let members = [| + for prop in p.Properties do if prop.IsPublic then prop + for field in p.Fields do if field.IsPublic then field + |] addRecursiveToCache (diffReadOnlyFields<'T> custom members Diff.Record) cache | Shape.Equality e -> { new IEqualityVisitor> with diff --git a/tests/Diffract.CSharp.Tests/Tests.cs b/tests/Diffract.CSharp.Tests/Tests.cs index 474d479..0ace261 100644 --- a/tests/Diffract.CSharp.Tests/Tests.cs +++ b/tests/Diffract.CSharp.Tests/Tests.cs @@ -13,6 +13,15 @@ public void Poco() Differ.ToString(expected, actual)); } + [Fact] + public void FieldPoco() + { + var expected = new MyFieldPoco(1, "a"); + var actual = new MyFieldPoco(2, "a"); + Assert.Equal("X Expect = 1\n Actual = 2\n", + Differ.ToString(expected, actual)); + } + [Fact] public void Record() { @@ -41,6 +50,18 @@ public class MyPoco public MyInnerPoco Item { get; init; } } + public class MyFieldPoco + { + public int X; + public string Y; + + public MyFieldPoco(int x, string y) + { + X = x; + Y = y; + } + } + public record MyRecord(int X, string Y); } }