diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4824e71..fd409a8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 1.1.1
+
+- Fixed marking comaprison results in the pipeline so that strategies down the line see if there is a diff. By [@egil](https://github.com/egil) and [@linkdotnet](https://github.com/linkdotnet).
+
# 1.1.0
- An ':ignore' marked attributes will no longer show up as a diff if the ignored attribute was NOT found in the test html. By [@RiRiSharp](https://github.com/RiRiSharp).
diff --git a/src/AngleSharp.Diffing.Tests/Strategies/ElementStrategies/IgnoreAttributesElementComparerTest.cs b/src/AngleSharp.Diffing.Tests/Strategies/ElementStrategies/IgnoreAttributesElementComparerTest.cs
index 261a655..b8d9571 100644
--- a/src/AngleSharp.Diffing.Tests/Strategies/ElementStrategies/IgnoreAttributesElementComparerTest.cs
+++ b/src/AngleSharp.Diffing.Tests/Strategies/ElementStrategies/IgnoreAttributesElementComparerTest.cs
@@ -47,4 +47,24 @@ public void Test003(string controlHtml, string testHtml)
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.SkipChildren).ShouldBe(CompareResult.SkipChildrenAndAttributes);
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.SkipAttributes).ShouldBe(CompareResult.SkipAttributes);
}
+
+ [Theory(DisplayName = "When control has 'diff:ignoreAttributes' and current decision is Different, returns DifferentAndSkipAttributes")]
+ [InlineData(@"
")]
+ [InlineData(@"")]
+ public void Test004(string controlHtml)
+ {
+ var comparison = ToComparison(controlHtml, "");
+
+ IgnoreAttributesElementComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.DifferentAndSkipAttributes);
+ }
+
+ [Theory(DisplayName = "When control has 'diff:ignoreAttributes' and current decision is DifferentAndSkipChildren, returns DifferentAndSkipChildrenAndSkipAttributes")]
+ [InlineData(@"")]
+ [InlineData(@"")]
+ public void Test005(string controlHtml)
+ {
+ var comparison = ToComparison(controlHtml, "");
+
+ IgnoreAttributesElementComparer.Compare(comparison, CompareResult.DifferentAndSkipChildren).ShouldBe(CompareResult.DifferentAndSkipChildrenAndSkipAttributes);
+ }
}
diff --git a/src/AngleSharp.Diffing.Tests/Strategies/ElementStrategies/IgnoreChildrenElementComparerTest.cs b/src/AngleSharp.Diffing.Tests/Strategies/ElementStrategies/IgnoreChildrenElementComparerTest.cs
index 96b064a..f186f86 100644
--- a/src/AngleSharp.Diffing.Tests/Strategies/ElementStrategies/IgnoreChildrenElementComparerTest.cs
+++ b/src/AngleSharp.Diffing.Tests/Strategies/ElementStrategies/IgnoreChildrenElementComparerTest.cs
@@ -47,4 +47,24 @@ public void Test003(string controlHtml, string testHtml)
IgnoreChildrenElementComparer.Compare(comparison, CompareResult.SkipAttributes).ShouldBe(CompareResult.SkipChildrenAndAttributes);
IgnoreChildrenElementComparer.Compare(comparison, CompareResult.SkipChildren).ShouldBe(CompareResult.SkipChildren);
}
+
+ [Theory(DisplayName = "When control has 'diff:ignoreChildren' and current decision is Different, returns DifferentAndSkipChildren")]
+ [InlineData(@"")]
+ [InlineData(@"")]
+ public void Test004(string controlHtml)
+ {
+ var comparison = ToComparison(controlHtml, "");
+
+ IgnoreChildrenElementComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.DifferentAndSkipChildren);
+ }
+
+ [Theory(DisplayName = "When control has 'diff:ignoreChildren' and current decision is DifferentAndSkipAttributes, returns DifferentAndSkipChildrenAndSkipAttributes")]
+ [InlineData(@"")]
+ [InlineData(@"")]
+ public void Test005(string controlHtml)
+ {
+ var comparison = ToComparison(controlHtml, "");
+
+ IgnoreChildrenElementComparer.Compare(comparison, CompareResult.DifferentAndSkipAttributes).ShouldBe(CompareResult.DifferentAndSkipChildrenAndSkipAttributes);
+ }
}
diff --git a/src/AngleSharp.Diffing/Core/CompareDecision.cs b/src/AngleSharp.Diffing/Core/CompareDecision.cs
index 73d626d..b8944f8 100644
--- a/src/AngleSharp.Diffing/Core/CompareDecision.cs
+++ b/src/AngleSharp.Diffing/Core/CompareDecision.cs
@@ -30,5 +30,17 @@ public enum CompareDecision
/// Use when the comparison should skip any attributes.
///
SkipAttributes = 16,
+ ///
+ /// Use when the comparison is different and should skip children.
+ ///
+ DifferentAndSkipChildren = Different | SkipChildren,
+ ///
+ /// Use when the comparison is different and should skip attributes.
+ ///
+ DifferentAndSkipAttributes = Different | SkipAttributes,
+ ///
+ /// Use when the comparison is different and should skip both children and attributes.
+ ///
+ DifferentAndSkipChildrenAndSkipAttributes = Different | SkipChildren | SkipAttributes,
}
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/Core/HtmlDifferenceEngine.cs b/src/AngleSharp.Diffing/Core/HtmlDifferenceEngine.cs
index 35734aa..66f7ee9 100644
--- a/src/AngleSharp.Diffing/Core/HtmlDifferenceEngine.cs
+++ b/src/AngleSharp.Diffing/Core/HtmlDifferenceEngine.cs
@@ -187,7 +187,7 @@ private IEnumerable CompareAttributes(IEnumerable co
foreach (var comparison in comparisons)
{
var compareRes = _diffingStrategy.Compare(comparison);
- if (compareRes.Decision == CompareDecision.Different)
+ if (compareRes.Decision.HasFlag(CompareDecision.Different))
{
yield return compareRes.Diff ?? new AttrDiff(comparison, AttrDiffKind.Unspecified);
}
diff --git a/src/AngleSharp.Diffing/Strategies/AttributeStrategies/BooleanAttributeComparer.cs b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/BooleanAttributeComparer.cs
index feb77b2..4baa745 100644
--- a/src/AngleSharp.Diffing/Strategies/AttributeStrategies/BooleanAttributeComparer.cs
+++ b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/BooleanAttributeComparer.cs
@@ -70,9 +70,9 @@ public CompareResult Compare(in AttributeComparison comparison, CompareResult cu
? CompareStrict(comparison)
: true;
- return hasSameValue ?
- CompareResult.Same :
- CompareResult.FromDiff(new AttrDiff(comparison, AttrDiffKind.Value));
+ return hasSameValue
+ ? CompareResult.Same
+ : CompareResult.FromDiff(new AttrDiff(comparison, AttrDiffKind.Value));
}
private static bool IsAttributeNamesEqual(in AttributeComparison comparison)
diff --git a/src/AngleSharp.Diffing/Strategies/ElementStrategies/ElementComparer.cs b/src/AngleSharp.Diffing/Strategies/ElementStrategies/ElementComparer.cs
index 4c5d12a..346f693 100644
--- a/src/AngleSharp.Diffing/Strategies/ElementStrategies/ElementComparer.cs
+++ b/src/AngleSharp.Diffing/Strategies/ElementStrategies/ElementComparer.cs
@@ -41,7 +41,7 @@ public CompareResult Compare(in Comparison comparison, CompareResult currentDeci
? CompareResult.Same
: CompareResult.FromDiff(new ElementDiff(comparison, ElementDiffKind.Name));
- if (EnforceTagClosing && result == CompareResult.Same)
+ if (EnforceTagClosing && result.Decision.HasFlag(CompareDecision.Same))
{
if (testElement.SourceReference is not HtmlTagToken testTag)
throw new InvalidOperationException("No source reference attached to test element, cannot determine element tag closing style.");
diff --git a/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreAttributesElementComparer.cs b/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreAttributesElementComparer.cs
index a5cd052..94d0795 100644
--- a/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreAttributesElementComparer.cs
+++ b/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreAttributesElementComparer.cs
@@ -12,7 +12,7 @@ public static class IgnoreAttributesElementComparer
///
public static CompareResult Compare(in Comparison comparison, CompareResult currentDecision)
{
- if (currentDecision == CompareResult.Skip || currentDecision == CompareResult.SkipAttributes || currentDecision == CompareResult.SkipChildrenAndAttributes)
+ if (currentDecision.Decision.HasFlag(CompareDecision.Skip) || currentDecision.Decision.HasFlag(CompareDecision.SkipAttributes))
return currentDecision;
if (!ControlHasTruthyIgnoreAttributesAttribute(comparison))
@@ -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..a0904a6 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.Different | CompareDecision.SkipAttributes => CompareResult.DifferentAndSkipChildrenAndSkipAttributes,
CompareDecision.SkipAttributes => CompareResult.SkipChildrenAndAttributes,
_ => currentDecision,
};
diff --git a/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreElementComparer.cs b/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreElementComparer.cs
index ad1cef1..9743ff8 100644
--- a/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreElementComparer.cs
+++ b/src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreElementComparer.cs
@@ -12,7 +12,7 @@ public static class IgnoreElementComparer
///
public static CompareResult Compare(in Comparison comparison, CompareResult currentDecision)
{
- if (currentDecision == CompareResult.Skip)
+ if (currentDecision.Decision.HasFlag(CompareDecision.Skip))
return currentDecision;
return ControlHasTruthyIgnoreAttribute(comparison)