diff --git a/src/AngleSharp.Diffing/Core/CompareResult.cs b/src/AngleSharp.Diffing/Core/CompareResult.cs index cd3de65..31f0f27 100644 --- a/src/AngleSharp.Diffing/Core/CompareResult.cs +++ b/src/AngleSharp.Diffing/Core/CompareResult.cs @@ -33,7 +33,22 @@ public readonly record struct CompareResult(CompareDecision Decision, IDiff? Dif public static readonly CompareResult SkipAttributes = new(CompareDecision.SkipAttributes); /// - /// Use when the comparison should skip any attributes. + /// Use when the comparison should skip any attributes but has element differences. + /// + public static readonly CompareResult DifferentAndSkipAttributes = new(CompareDecision.Different | CompareDecision.SkipAttributes); + + /// + /// Use when the comparison should skip any attributes and children but has element differences. + /// + public static readonly CompareResult DifferentAndSkipChildrenAndSkipAttributes = new(CompareDecision.Different | CompareDecision.SkipChildren | CompareDecision.SkipAttributes); + + /// + /// Use when the comparison should skip children but has element differences. + /// + public static readonly CompareResult DifferentAndSkipChildren = new(CompareDecision.Different | CompareDecision.SkipChildren); + + /// + /// Use when the comparison should skip any children and any attributes. /// public static readonly CompareResult SkipChildrenAndAttributes = new(CompareDecision.SkipChildren | CompareDecision.SkipAttributes); @@ -50,7 +65,7 @@ public readonly record struct CompareResult(CompareDecision Decision, IDiff? Dif public static CompareResult FromDiff(IDiff diff) => new(CompareDecision.Different, diff); /// - /// Checks if a is either a or . + /// Checks if a is either a or . /// - public bool IsSameOrSkip => this == Same || this == Skip; + public bool IsSameOrSkip => Decision.HasFlag(CompareDecision.Same) || Decision.HasFlag(CompareDecision.Skip); } \ No newline at end of file diff --git a/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreAttributesElementComparer.cs b/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreAttributesElementComparer.cs index a5cd052..2a31b55 100644 --- a/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreAttributesElementComparer.cs +++ b/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreAttributesElementComparer.cs @@ -22,8 +22,9 @@ public static CompareResult Compare(in Comparison comparison, CompareResult curr { CompareDecision.None => CompareResult.SkipAttributes, CompareDecision.Same => CompareResult.SkipAttributes, - CompareDecision.Different => CompareResult.SkipAttributes, + CompareDecision.Different => CompareResult.DifferentAndSkipAttributes, CompareDecision.SkipChildren => CompareResult.SkipChildrenAndAttributes, + CompareDecision.DifferentAndSkipChildren => CompareResult.DifferentAndSkipChildrenAndSkipAttributes, _ => currentDecision, }; } diff --git a/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreChildrenElementComparer.cs b/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreChildrenElementComparer.cs index 966fe7b..3a7c588 100644 --- a/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreChildrenElementComparer.cs +++ b/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreChildrenElementComparer.cs @@ -12,7 +12,7 @@ public static class IgnoreChildrenElementComparer /// public static CompareResult Compare(in Comparison comparison, CompareResult currentDecision) { - if (currentDecision == CompareResult.Skip || currentDecision == CompareResult.SkipChildren || currentDecision == CompareResult.SkipChildrenAndAttributes) + if (currentDecision.Decision.HasFlag(CompareDecision.SkipChildren) || currentDecision.Decision.HasFlag(CompareDecision.Skip)) return currentDecision; if (!ControlHasTruthyIgnoreChildrenAttribute(comparison)) @@ -22,7 +22,8 @@ public static CompareResult Compare(in Comparison comparison, CompareResult curr { CompareDecision.None => CompareResult.SkipChildren, CompareDecision.Same => CompareResult.SkipChildren, - CompareDecision.Different => CompareResult.SkipChildren, + CompareDecision.Different => CompareResult.DifferentAndSkipChildren, + CompareDecision.DifferentAndSkipAttributes => CompareResult.DifferentAndSkipChildrenAndSkipAttributes, CompareDecision.SkipAttributes => CompareResult.SkipChildrenAndAttributes, _ => currentDecision, };