Skip to content

Commit 5f19c08

Browse files
committed
Add test to cover situation where no ignore attribute was requested
1 parent 8048379 commit 5f19c08

File tree

2 files changed

+76
-13
lines changed

2 files changed

+76
-13
lines changed

src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
using AngleSharp.Diffing.Strategies;
2+
using AngleSharp.Diffing.Strategies.AttributeStrategies;
3+
using AngleSharp.Diffing.Strategies.TextNodeStrategies;
4+
using AngleSharp.Diffing.TestData;
5+
16
namespace AngleSharp.Diffing;
27

38

@@ -119,22 +124,35 @@ public void Test006(string control, string test)
119124

120125
[Theory(DisplayName =
121126
"When a control element has ':ignore', elements with and without that attribute should return empty diffs")]
122-
[InlineData("<div class:ignore></div>", "<div class=\"ian-fleming\"></div>")]
123-
[InlineData("<div class:ignore></div>", "<div class=\"\"></div>")]
124-
[InlineData("<div class:ignore></div>", "<div class></div>")]
125-
[InlineData("<div class:ignore></div>", "<div></div>")]
126-
[InlineData("<input required:ignore/>", "<input required=\"required\"/>")]
127-
[InlineData("<input required:ignore/>", "<input required=\"\"/>")]
128-
[InlineData("<input required:ignore/>", "<input required/>")]
129-
[InlineData("<input required:ignore/>", "<input/>")]
130-
[InlineData("<button onclick:ignore/></button>", "<button onclick=\"alert(1)\"></button>")]
131-
[InlineData("<button onclick:ignore/></button>", "<button/></button>")]
132-
[InlineData("<a aria-disabled:ignore/></a>", "<a aria-disabled=\"true\"/></a>")]
133-
[InlineData("<a aria-disabled:ignore/></a>", "<a/></a>")]
127+
[MemberData(nameof(IgnoreAttributeTestData.ControlAndHtmlData), MemberType = typeof(IgnoreAttributeTestData))]
134128
public void Test007(string controlHtml, string testHtml)
135129
{
136130
var diffs = DiffBuilder.Compare(controlHtml).WithTest(testHtml).Build();
137131
Assert.Empty(diffs);
138132
}
139133

140-
}
134+
[Theory(DisplayName =
135+
"When a control element has ':ignore', but IgnoreAttributeComparer is not active, diffs should be found")]
136+
[MemberData(nameof(IgnoreAttributeTestData.ControlHtmlAndDiffData), MemberType = typeof(IgnoreAttributeTestData))]
137+
public void Test008(string controlHtml, string testHtml, DiffResult expectedDiffResult)
138+
{
139+
var diffs = DiffBuilder
140+
.Compare(controlHtml)
141+
.WithTest(testHtml)
142+
.WithOptions(a => a // Most important thing to note here is we do not have a ignore attribute comparer
143+
.AddSearchingNodeMatcher()
144+
.AddAttributeNameMatcher()
145+
.AddElementComparer(enforceTagClosing: false)
146+
.AddMatcher(PostfixedAttributeMatcher.Match, StrategyType.Specialized)
147+
.AddComparer(AttributeComparer.Compare, StrategyType.Generalized)
148+
.AddClassAttributeComparer()
149+
.AddBooleanAttributeComparer(BooleanAttributeComparision.Strict)
150+
.AddStyleAttributeComparer())
151+
.Build()
152+
.ToList();
153+
154+
Assert.Single(diffs);
155+
Assert.Equal(DiffTarget.Attribute, diffs[0].Target);
156+
Assert.Equal(expectedDiffResult, diffs[0].Result);
157+
}
158+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
namespace AngleSharp.Diffing.TestData;
2+
3+
internal static class IgnoreAttributeTestData
4+
{
5+
public static TheoryData<string, string> ControlAndHtmlData()
6+
{
7+
var theoryData = new TheoryData<string, string>();
8+
foreach (var (controlHtml, expectedHtml, _) in TestCases)
9+
{
10+
theoryData.Add(controlHtml, expectedHtml);
11+
}
12+
13+
return theoryData;
14+
}
15+
16+
public static TheoryData<string, string, DiffResult> ControlHtmlAndDiffData()
17+
{
18+
var theoryData = new TheoryData<string, string, DiffResult>();
19+
foreach (var (controlHtml, expectedHtml, expectedDiffResult) in TestCases)
20+
{
21+
theoryData.Add(controlHtml, expectedHtml, expectedDiffResult);
22+
}
23+
24+
return theoryData;
25+
}
26+
27+
private static readonly IEnumerable<(string controlHtml, string expectedHtml, DiffResult expectedDiffResult)>
28+
TestCases =
29+
[
30+
("<div class:ignore></div>", "<div class=\"ian-fleming\"></div>", DiffResult.Different),
31+
("<div class:ignore></div>", "<div class=\"\"></div>", DiffResult.Different),
32+
("<div class:ignore></div>", "<div class></div>", DiffResult.Different),
33+
("<div class:ignore></div>", "<div></div>", DiffResult.Missing),
34+
("<input required:ignore/>", "<input required=\"required\"/>", DiffResult.Different),
35+
("<input required:ignore/>", "<input required=\"\"/>", DiffResult.Different),
36+
("<input required:ignore/>", "<input required/>", DiffResult.Different),
37+
("<input required:ignore/>", "<input/>", DiffResult.Missing),
38+
("<button onclick:ignore/></button>", "<button onclick=\"alert(1)\"></button>", DiffResult.Different),
39+
("<button onclick:ignore/></button>", "<button/></button>", DiffResult.Missing),
40+
("<a aria-disabled:ignore/></a>", "<a aria-disabled=\"true\"/></a>", DiffResult.Different),
41+
("<a aria-disabled:ignore/></a>", "<a/></a>", DiffResult.Missing),
42+
("<span style:ignore/></span>", "<span style=\"color:red;\"/></span>", DiffResult.Different),
43+
("<span style:ignore/></span>", "<span/></span>", DiffResult.Missing),
44+
];
45+
}

0 commit comments

Comments
 (0)