Skip to content

Commit e6c2722

Browse files
committed
fix: allow diff:ignoreAttributes and diff:ignoreChildren to be used on an element at the same time
1 parent 370d44b commit e6c2722

File tree

8 files changed

+71
-17
lines changed

8 files changed

+71
-17
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# 0.18.3
2+
3+
- Enabled using `diff:ignoreAttributes` and `diff:ignoreChildren` together on the same element.
4+
15
# 0.18.2
26

37
- Changed `CompareStrategy` such that it now can control the `IDiff` type that should be returned in case a difference is found in a comparison. This allows a comparer to embed additional context in the `IDiff` object. By [@SebastianStehle](https://github.com/SebastianStehle).

src/AngleSharp.Diffing.Tests/AngleSharp.DiffingTests.csproj

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net6.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
<IsPackable>false</IsPackable>
66
<AssemblyName>AngleSharp.Diffing.Tests</AssemblyName>
77
<RootNamespace>AngleSharp.Diffing</RootNamespace>
@@ -10,18 +10,18 @@
1010
</PropertyGroup>
1111

1212
<ItemGroup>
13-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
14-
<PackageReference Include="GitHubActionsTestLogger" Version="2.0.1">
13+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
14+
<PackageReference Include="GitHubActionsTestLogger" Version="2.4.1">
1515
<PrivateAssets>all</PrivateAssets>
1616
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1717
</PackageReference>
18-
<PackageReference Include="Shouldly" Version="4.1.0" />
19-
<PackageReference Include="xunit" Version="2.4.2" />
20-
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
18+
<PackageReference Include="Shouldly" Version="4.2.1" />
19+
<PackageReference Include="xunit" Version="2.9.2" />
20+
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
2121
<PrivateAssets>all</PrivateAssets>
2222
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2323
</PackageReference>
24-
<PackageReference Include="coverlet.collector" Version="3.2.0">
24+
<PackageReference Include="coverlet.collector" Version="6.0.2">
2525
<PrivateAssets>all</PrivateAssets>
2626
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2727
</PackageReference>

src/AngleSharp.Diffing.Tests/Strategies/ElementStrategies/IgnoreAttributesElementComparerTest.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,19 @@ public void Test002(string controlHtml)
3232
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.SkipAttributes);
3333
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.SkipAttributes);
3434
}
35+
36+
[Theory(DisplayName = "When a control element has both 'diff:ignoreChildren' and a 'diff:ignoreAttributes'")]
37+
[InlineData("<button diff:ignoreAttributes diff:ignoreChildren></button>", @"<button id=""buttonid"" class=""somecss"">Not Ignored</button>")]
38+
[InlineData("<button diff:ignoreAttributes diff:ignoreChildren></button>", @"<button id=""buttonid"" class=""somecss""><span>Not Ignored</span></button>")]
39+
public void Test003(string controlHtml, string testHtml)
40+
{
41+
var comparison = ToComparison(controlHtml, testHtml);
42+
43+
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.Same).ShouldBe(CompareResult.SkipAttributes);
44+
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.SkipAttributes);
45+
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.Skip).ShouldBe(CompareResult.Skip);
46+
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.SkipChildrenAndAttributes).ShouldBe(CompareResult.SkipChildrenAndAttributes);
47+
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.SkipChildren).ShouldBe(CompareResult.SkipChildrenAndAttributes);
48+
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.SkipAttributes).ShouldBe(CompareResult.SkipAttributes);
49+
}
3550
}

src/AngleSharp.Diffing.Tests/Strategies/ElementStrategies/IgnoreChildrenElementComparerTest.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,19 @@ public void Test002(string controlHtml)
3232
IgnoreChildrenElementComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.SkipChildren);
3333
IgnoreChildrenElementComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.SkipChildren);
3434
}
35+
36+
[Theory(DisplayName = "When a control element has both 'diff:ignoreChildren' and a 'diff:ignoreAttributes'")]
37+
[InlineData("<button diff:ignoreAttributes diff:ignoreChildren></button>", @"<button id=""buttonid"" class=""somecss"">Not Ignored</button>")]
38+
[InlineData("<button diff:ignoreAttributes diff:ignoreChildren></button>", @"<button id=""buttonid"" class=""somecss""><span>Not Ignored</span></button>")]
39+
public void Test003(string controlHtml, string testHtml)
40+
{
41+
var comparison = ToComparison(controlHtml, testHtml);
42+
43+
IgnoreChildrenElementComparer.Compare(comparison, CompareResult.Same).ShouldBe(CompareResult.SkipChildren);
44+
IgnoreChildrenElementComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.SkipChildren);
45+
IgnoreChildrenElementComparer.Compare(comparison, CompareResult.Skip).ShouldBe(CompareResult.Skip);
46+
IgnoreChildrenElementComparer.Compare(comparison, CompareResult.SkipChildrenAndAttributes).ShouldBe(CompareResult.SkipChildrenAndAttributes);
47+
IgnoreChildrenElementComparer.Compare(comparison, CompareResult.SkipAttributes).ShouldBe(CompareResult.SkipChildrenAndAttributes);
48+
IgnoreChildrenElementComparer.Compare(comparison, CompareResult.SkipChildren).ShouldBe(CompareResult.SkipChildren);
49+
}
3550
}

src/AngleSharp.Diffing/AngleSharp.Diffing.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
</PropertyGroup>
2525

2626
<ItemGroup>
27-
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
27+
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
2828
</ItemGroup>
2929

3030
<ItemGroup>
@@ -34,7 +34,6 @@
3434

3535
<ItemGroup>
3636
<None Include="..\..\logo.png" Pack="true" PackagePath="\" />
37-
<None Include="..\..\LICENSE" Pack="true" PackagePath="\" />
3837
</ItemGroup>
3938

4039
</Project>

src/AngleSharp.Diffing/Core/CompareResult.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ public readonly record struct CompareResult(CompareDecision Decision, IDiff? Dif
3232
/// </summary>
3333
public static readonly CompareResult SkipAttributes = new CompareResult(CompareDecision.SkipAttributes);
3434

35+
/// <summary>
36+
/// Use when the comparison should skip any attributes.
37+
/// </summary>
38+
public static readonly CompareResult SkipChildrenAndAttributes = new CompareResult(CompareDecision.SkipChildren | CompareDecision.SkipAttributes);
39+
3540
/// <summary>
3641
/// Use when the two compared nodes or attributes are the different.
3742
/// </summary>

src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreAttributesElementComparer.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,20 @@ public static class IgnoreAttributesElementComparer
1212
/// </summary>
1313
public static CompareResult Compare(in Comparison comparison, CompareResult currentDecision)
1414
{
15-
if (currentDecision == CompareResult.Skip)
15+
if (currentDecision == CompareResult.Skip || currentDecision == CompareResult.SkipAttributes || currentDecision == CompareResult.SkipChildrenAndAttributes)
1616
return currentDecision;
1717

18-
return ControlHasTruthyIgnoreAttributesAttribute(comparison)
19-
? CompareResult.SkipAttributes
20-
: currentDecision;
18+
if (!ControlHasTruthyIgnoreAttributesAttribute(comparison))
19+
return currentDecision;
20+
21+
return currentDecision.Decision switch
22+
{
23+
CompareDecision.Unknown => CompareResult.SkipAttributes,
24+
CompareDecision.Same => CompareResult.SkipAttributes,
25+
CompareDecision.Different => CompareResult.SkipAttributes,
26+
CompareDecision.SkipChildren => CompareResult.SkipChildrenAndAttributes,
27+
_ => currentDecision,
28+
};
2129
}
2230

2331
private static bool ControlHasTruthyIgnoreAttributesAttribute(in Comparison comparison)

src/AngleSharp.Diffing/Strategies/ElementStrategies/IgnoreChildrenElementComparer.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,20 @@ public static class IgnoreChildrenElementComparer
1212
/// </summary>
1313
public static CompareResult Compare(in Comparison comparison, CompareResult currentDecision)
1414
{
15-
if (currentDecision == CompareResult.Skip)
15+
if (currentDecision == CompareResult.Skip || currentDecision == CompareResult.SkipChildren || currentDecision == CompareResult.SkipChildrenAndAttributes)
1616
return currentDecision;
1717

18-
return ControlHasTruthyIgnoreChildrenAttribute(comparison)
19-
? CompareResult.SkipChildren
20-
: currentDecision;
18+
if (!ControlHasTruthyIgnoreChildrenAttribute(comparison))
19+
return currentDecision;
20+
21+
return currentDecision.Decision switch
22+
{
23+
CompareDecision.Unknown => CompareResult.SkipChildren,
24+
CompareDecision.Same => CompareResult.SkipChildren,
25+
CompareDecision.Different => CompareResult.SkipChildren,
26+
CompareDecision.SkipAttributes => CompareResult.SkipChildrenAndAttributes,
27+
_ => currentDecision,
28+
};
2129
}
2230

2331
private static bool ControlHasTruthyIgnoreChildrenAttribute(in Comparison comparison)

0 commit comments

Comments
 (0)