Skip to content

Commit 5d6460d

Browse files
committed
Fixed WithDefaultOptions logic where text nodes was compared by a naive node comparer, not text comparer
1 parent 64bae82 commit 5d6460d

11 files changed

+68
-40
lines changed

src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs

+11-11
Original file line numberDiff line numberDiff line change
@@ -51,18 +51,18 @@ public void Test6()
5151
diffs.ShouldNotBeEmpty();
5252
}
5353

54-
//[Fact(DisplayName = "Calling Build() with DefaultOptions() returns expected diffs")]
55-
//public void Test7()
56-
//{
57-
// var control = "<h1>Hello World</h1>";
58-
// var test = "<h1>Hello world</h1>";
54+
[Fact(DisplayName = "Calling Build() with DefaultOptions() returns expected diffs")]
55+
public void Test7()
56+
{
57+
var control = "<h1>Hello World</h1>";
58+
var test = "<h1>Hello world</h1>";
5959

60-
// var diffs = new DiffBuilder(DefaultStrategy)
61-
// .Compare(control)
62-
// .WithTest(test)
63-
// .Build();
60+
var diffs = new DiffBuilder(DefaultStrategy)
61+
.Compare(control)
62+
.WithTest(test)
63+
.Build();
6464

65-
// diffs.ShouldNotBeEmpty();
66-
//}
65+
diffs.ShouldNotBeEmpty();
66+
}
6767
}
6868
}

src/AngleSharp.Diffing.Tests/DiffingStrategyPipelineBuilderTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public void Test3()
3535
Should.Throw<InvalidOperationException>(
3636
() => new DiffingStrategyPipelineBuilder()
3737
.WithClassAttributeComparer()
38-
.WithNodeNameComparer()
38+
.WithElementComparer()
3939
.Build());
4040
}
4141

src/AngleSharp.Diffing.Tests/Strategies/NodeStrategies/NodeComparerTest.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using AngleSharp.Diffing.Core;
2+
using AngleSharp.Diffing.Strategies.ElementStrategies;
23
using Shouldly;
34
using Xunit;
45

@@ -14,7 +15,7 @@ public NodeComparerTest(DiffingTestFixture fixture) : base(fixture)
1415
public void Test001()
1516
{
1617
var comparison = ToComparison("<p>", "<p>");
17-
NodeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Same);
18+
ElementComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Same);
1819
}
1920

2021
[Theory(DisplayName = "When control and test nodes have the a different type and name, the result is Different")]
@@ -25,7 +26,7 @@ public void Test001()
2526
public void Test002(string controlHtml, string testHtml)
2627
{
2728
var comparison = ToComparison(controlHtml, testHtml);
28-
NodeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Different);
29+
ElementComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Different);
2930
}
3031
}
3132
}

src/AngleSharp.Diffing/DiffBuilder.cs

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using AngleSharp;
43
using AngleSharp.Dom;
54
using AngleSharp.Html.Parser;
65
using AngleSharp.Diffing.Core;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using AngleSharp.Diffing.Core;
2+
using AngleSharp.Dom;
3+
4+
namespace AngleSharp.Diffing.Strategies.CommentStrategies
5+
{
6+
public static class CommentComparer
7+
{
8+
public static CompareResult Compare(in Comparison comparison, CompareResult currentDecision)
9+
{
10+
if (currentDecision.IsSameOrSkip()) return currentDecision;
11+
return comparison.Control.Node.NodeType == NodeType.Comment && comparison.AreNodeTypesEqual()
12+
? CompareResult.Same
13+
: CompareResult.Different;
14+
}
15+
}
16+
}

src/AngleSharp.Diffing/Strategies/CommentStrategies/DiffingStrategyPipelineBuilderExtensions.cs

+9
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,14 @@ public static IDiffingStrategyPipelineBuilder IgnoreComments(this IDiffingStrate
1212
builder.WithFilter(IgnoreCommentsFilter.Filter, true);
1313
return builder;
1414
}
15+
16+
/// <summary>
17+
/// Enables the basic comment comparer, that checks if two nodes are comment nodes.
18+
/// </summary>
19+
public static IDiffingStrategyPipelineBuilder WithCommentComparer(this IDiffingStrategyPipelineBuilder builder)
20+
{
21+
builder.WithComparer(CommentComparer.Compare, isSpecializedComparer: false);
22+
return builder;
23+
}
1524
}
1625
}

src/AngleSharp.Diffing/Strategies/DiffingStrategyPipelineBuilderExtensions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public static IDiffingStrategyPipelineBuilder WithDefaultOptions(this IDiffingSt
1616
.WithSearchingNodeMatcher()
1717
.WithCssSelectorMatcher()
1818
.WithAttributeNameMatcher()
19-
.WithNodeNameComparer()
19+
.WithElementComparer()
2020
.WithIgnoreElementSupport()
2121
.WithStyleSheetComparer()
2222
.WithTextComparer(WhitespaceOption.Normalize, ignoreCase: false)

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

+9
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@ namespace AngleSharp.Diffing
44
{
55
public static partial class DiffingStrategyPipelineBuilderExtensions
66
{
7+
/// <summary>
8+
/// Enables the basic element comparer, that checks if two nodes are element nodes and have the same name.
9+
/// </summary>
10+
public static IDiffingStrategyPipelineBuilder WithElementComparer(this IDiffingStrategyPipelineBuilder builder)
11+
{
12+
builder.WithComparer(ElementComparer.Compare, isSpecializedComparer: false);
13+
return builder;
14+
}
15+
716
/// <summary>
817
/// Enables the CSS-selector matcher strategy during diffing.
918
/// </summary>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using AngleSharp.Diffing.Core;
2+
using AngleSharp.Dom;
3+
4+
namespace AngleSharp.Diffing.Strategies.ElementStrategies
5+
{
6+
public static class ElementComparer
7+
{
8+
public static CompareResult Compare(in Comparison comparison, CompareResult currentDecision)
9+
{
10+
if (currentDecision.IsSameOrSkip()) return currentDecision;
11+
return comparison.Control.Node.NodeType == NodeType.Element && comparison.AreNodeTypesEqual()
12+
? CompareResult.Same
13+
: CompareResult.Different;
14+
}
15+
}
16+
}

src/AngleSharp.Diffing/Strategies/NodeStrategies/DiffingStrategyPipelineBuilderExtensions.cs

+2-9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using AngleSharp.Diffing.Strategies.CommentStrategies;
2+
using AngleSharp.Diffing.Strategies.ElementStrategies;
13
using AngleSharp.Diffing.Strategies.NodeStrategies;
24

35
namespace AngleSharp.Diffing
@@ -21,14 +23,5 @@ public static IDiffingStrategyPipelineBuilder WithSearchingNodeMatcher(this IDif
2123
builder.WithMatcher(ForwardSearchingNodeMatcher.Match, isSpecializedMatcher: false);
2224
return builder;
2325
}
24-
25-
/// <summary>
26-
/// Enables the basic node compare strategy during diffing.
27-
/// </summary>
28-
public static IDiffingStrategyPipelineBuilder WithNodeNameComparer(this IDiffingStrategyPipelineBuilder builder)
29-
{
30-
builder.WithComparer(NodeComparer.Compare, isSpecializedComparer: false);
31-
return builder;
32-
}
3326
}
3427
}

src/AngleSharp.Diffing/Strategies/NodeStrategies/NodeComparer.cs

-15
This file was deleted.

0 commit comments

Comments
 (0)