diff --git a/src/TestFramework/TestFramework/Assertions/Assert.AreAllDistinct.cs b/src/TestFramework/TestFramework/Assertions/Assert.AreAllDistinct.cs index 0b26bc2f03..769c27ced2 100644 --- a/src/TestFramework/TestFramework/Assertions/Assert.AreAllDistinct.cs +++ b/src/TestFramework/TestFramework/Assertions/Assert.AreAllDistinct.cs @@ -222,8 +222,8 @@ private static void ReportAssertAreAllDistinctFailed(IEnumerable collectio #endregion // AreAllDistinct - // TODO: Deduplicate with the same adapter in Assert.CollectionEquivalence.cs (introduced by PR #8234) - // once both PRs have landed. + // Adapts a non-generic IEqualityComparer to IEqualityComparer for assertion helpers. + [StackTraceHidden] private sealed class NonGenericEqualityComparerAdapter : IEqualityComparer { private readonly IEqualityComparer _comparer; diff --git a/src/TestFramework/TestFramework/Assertions/Assert.AreAllOfType.cs b/src/TestFramework/TestFramework/Assertions/Assert.AreAllOfType.cs index 7b1cce4427..2f4037edae 100644 --- a/src/TestFramework/TestFramework/Assertions/Assert.AreAllOfType.cs +++ b/src/TestFramework/TestFramework/Assertions/Assert.AreAllOfType.cs @@ -159,6 +159,7 @@ private static void ReportAssertAreAllOfTypeFailed(IEnumerable collecti ReportAssertFailed(structured); } + [StackTraceHidden] private readonly struct TypeMismatch { public TypeMismatch(int index, Type? actualType) diff --git a/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.Comparer.cs b/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.Comparer.cs index 004c7e4222..01e856742a 100644 --- a/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.Comparer.cs +++ b/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.Comparer.cs @@ -8,6 +8,7 @@ public sealed partial class Assert /// /// Walks two object graphs and reports the first structural difference, if any. /// + [StackTraceHidden] private sealed partial class EquivalenceComparer { // Member info caches keyed by runtime type. diff --git a/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.DictionaryView.cs b/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.DictionaryView.cs index dcb3eec99a..41b40c7820 100644 --- a/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.DictionaryView.cs +++ b/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.DictionaryView.cs @@ -11,6 +11,7 @@ public sealed partial class Assert /// Routes lookups back to the source dictionary so the source's own /// for keys is preserved. /// + [StackTraceHidden] private abstract class DictionaryView { internal abstract IEnumerable> Entries { get; } @@ -30,6 +31,7 @@ internal DictionaryLookup TryGetValuePair(object key) } } + [StackTraceHidden] private readonly struct DictionaryLookup { internal DictionaryLookup(bool found, object? value) @@ -43,6 +45,7 @@ internal DictionaryLookup(bool found, object? value) internal object? Value { get; } } + [StackTraceHidden] private sealed class NonGenericDictionaryView : DictionaryView { private readonly IDictionary _source; @@ -84,6 +87,7 @@ internal override bool TryGetValue(object key, out object? value) } } + [StackTraceHidden] private sealed class GenericDictionaryView : DictionaryView { private static readonly ConcurrentDictionary AccessorCache = new(); @@ -123,6 +127,7 @@ internal override bool TryGetValue(object key, out object? value) /// source's native methods (TryGetValue, ContainsKey) so the source's /// is honored. /// + [StackTraceHidden] private sealed class GenericDictionaryAccessors { private readonly MethodInfo _tryGetValueMethod; diff --git a/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.MemberAccessor.cs b/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.MemberAccessor.cs index 737d44fb32..896a114645 100644 --- a/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.MemberAccessor.cs +++ b/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.MemberAccessor.cs @@ -8,6 +8,7 @@ public sealed partial class Assert /// /// Reference-equality comparer used for keys in the topology maps of . /// + [StackTraceHidden] private sealed class ReferenceObjectComparer : IEqualityComparer { internal static readonly ReferenceObjectComparer Instance = new(); @@ -25,6 +26,7 @@ private ReferenceObjectComparer() /// Cached set of public instance properties and fields for a type, with both an alphabetically-sorted /// array (for deterministic traversal) and a name-keyed dictionary (for O(1) lookup). /// + [StackTraceHidden] private sealed class MemberLookup { internal MemberLookup(MemberAccessor[] sorted, IReadOnlyDictionary byName) @@ -41,6 +43,7 @@ internal MemberLookup(MemberAccessor[] sorted, IReadOnlyDictionary /// Describes how to read a single member (property or field) from an instance. /// + [StackTraceHidden] private sealed class MemberAccessor { private readonly PropertyInfo? _property; diff --git a/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.Mismatch.cs b/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.Mismatch.cs index 24703874d4..2ef4142618 100644 --- a/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.Mismatch.cs +++ b/src/TestFramework/TestFramework/Assertions/Assert.AreEquivalent.Mismatch.cs @@ -9,6 +9,7 @@ public sealed partial class Assert /// A single structural mismatch found by , carrying the dotted /// member path, a localized reason summary, and any expected/actual snippets to render. /// + [StackTraceHidden] private sealed class EquivalenceMismatch { private EquivalenceMismatch(string path, string reason, string? expectedText, string? actualText, bool isComparisonFailure) diff --git a/src/TestFramework/TestFramework/Assertions/Assert.ThrowsException.cs b/src/TestFramework/TestFramework/Assertions/Assert.ThrowsException.cs index b2b2c7df98..764f7de791 100644 --- a/src/TestFramework/TestFramework/Assertions/Assert.ThrowsException.cs +++ b/src/TestFramework/TestFramework/Assertions/Assert.ThrowsException.cs @@ -674,6 +674,7 @@ private enum ThrowsFailureKind : byte WrongExceptionType, } + [StackTraceHidden] private readonly struct ThrowsExceptionState { public Exception? ExceptionThrown { get; } diff --git a/src/TestFramework/TestFramework/Assertions/CollectionAssert.Helpers.cs b/src/TestFramework/TestFramework/Assertions/CollectionAssert.Helpers.cs index b23f306c6e..e57e2b3699 100644 --- a/src/TestFramework/TestFramework/Assertions/CollectionAssert.Helpers.cs +++ b/src/TestFramework/TestFramework/Assertions/CollectionAssert.Helpers.cs @@ -277,6 +277,7 @@ private static string ConstructFinalMessage( /// /// compares the objects using object.Equals. /// + [StackTraceHidden] private sealed class ObjectComparer : IComparer { int IComparer.Compare(object? x, object? y) => Equals(x, y) ? 0 : -1;