Skip to content

Commit 1e4e5c5

Browse files
authored
Release 0.17.1
Release 0.17.1
2 parents 591529d + 5badf2e commit 1e4e5c5

28 files changed

+285
-95
lines changed

CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
# 0.17.1
2+
3+
Released on Friday, February 3, 2023.
4+
5+
- Added a new style comparer which orders the styles before comparing them. By [@grishat](https://github.com/SebastianStehle).
6+
- Change Core.ComparisonSource.GetPathIndex() to return the index inside ChildNodes instead of Children. By [@edxlhornung](https://github.com/edxlhornung).
7+
- Fixed element comparison such that it uses case insensitive comparison of the name of the node. By [@egil](https://github.com/egil).
8+
19
# 0.17.0
210

311
Released on Wednesday, September 8, 2021.

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

+10-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

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

1212
<ItemGroup>
13-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.10.0" />
14-
<PackageReference Include="GitHubActionsTestLogger" Version="1.2.0" />
15-
<PackageReference Include="Shouldly" Version="4.0.3" />
16-
<PackageReference Include="xunit" Version="2.4.1" />
17-
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
13+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
14+
<PackageReference Include="GitHubActionsTestLogger" Version="2.0.1">
1815
<PrivateAssets>all</PrivateAssets>
1916
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2017
</PackageReference>
21-
<PackageReference Include="coverlet.collector" Version="3.0.3">
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">
21+
<PrivateAssets>all</PrivateAssets>
22+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
23+
</PackageReference>
24+
<PackageReference Include="coverlet.collector" Version="3.2.0">
2225
<PrivateAssets>all</PrivateAssets>
2326
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2427
</PackageReference>

src/AngleSharp.Diffing.Tests/Core/ComparisonSourceTest.cs

+7-6
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,13 @@ public void Test002()
6868
}
6969

7070
[Theory(DisplayName = "The index in the source's path is based on its position in it's parents" +
71-
"child node list, i.e. excluding other node types that does not contain children")]
71+
"child node list")]
7272
[InlineData("<p>", 0, "p(0)")]
73-
[InlineData("text<p>", 1, "p(0)")]
74-
[InlineData("<!--x--><p>", 1, "p(0)")]
75-
[InlineData("<i></i>text<p>", 2, "p(1)")]
76-
[InlineData("<i></i><!--x--><p>", 2, "p(1)")]
73+
[InlineData("text<p>", 1, "p(1)")]
74+
[InlineData("<!--x--><p>", 1, "p(1)")]
75+
[InlineData("<i></i>text<p>", 2, "p(2)")]
76+
[InlineData("<i></i><!--x--><p>", 2, "p(2)")]
77+
[InlineData("<i></i>text<!--x--><p>text", 2, "#comment(2)")]
7778
public void Test005(string sourceMarkup, int nodeIndex, string expectedPath)
7879
{
7980
var node = ToNodeList(sourceMarkup)[nodeIndex];
@@ -91,7 +92,7 @@ public void Test006()
9192

9293
var sut = new ComparisonSource(textNode, ComparisonSourceType.Control);
9394

94-
sut.Path.ShouldBe("p(0) > i(1) > #text(0)");
95+
sut.Path.ShouldBe("p(0) > i(2) > #text(0)");
9596
}
9697

9798
[Fact(DisplayName = "Source uses parent path if provided to construct own path")]

src/AngleSharp.Diffing.Tests/Strategies/AttributeStrategies/AttributeComparerTest.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void Test002()
2727
var comparison = ToAttributeComparison(@"<b foo>", "foo",
2828
"<b foo>", "foo");
2929

30-
AttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Same);
30+
AttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
3131
}
3232

3333
[Fact(DisplayName = "When two attributes does not have the same name, the compare result is Different")]
@@ -36,7 +36,7 @@ public void Test003()
3636
var comparison = ToAttributeComparison(@"<b foo>", "foo",
3737
"<b bar>", "bar");
3838

39-
AttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Different);
39+
AttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Different);
4040
}
4141

4242
[Fact(DisplayName = "When two attribute values are the same, the compare result is Same")]
@@ -45,7 +45,7 @@ public void Test004()
4545
var comparison = ToAttributeComparison(@"<b foo=""bar"">", "foo",
4646
@"<b foo=""bar"">", "foo");
4747

48-
AttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Same);
48+
AttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
4949
}
5050

5151
[Fact(DisplayName = "When two attribute values are different, the compare result is Different")]
@@ -54,7 +54,7 @@ public void Test005()
5454
var comparison = ToAttributeComparison(@"<b foo=""bar"">", "foo",
5555
@"<b foo=""baz"">", "foo");
5656

57-
AttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Different);
57+
AttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Different);
5858
}
5959

6060
[Fact(DisplayName = "When the control attribute is postfixed with :ignoreCase, " +
@@ -64,7 +64,7 @@ public void Test006()
6464
var comparison = ToAttributeComparison(@"<b foo:ignoreCase=""BAR"">", "foo:ignorecase",
6565
@"<b foo=""bar"">", "foo");
6666

67-
AttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Same);
67+
AttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
6868
}
6969

7070
[Fact(DisplayName = "When the control attribute is postfixed with :regex, " +
@@ -75,7 +75,7 @@ public void Test007()
7575
var comparison = ToAttributeComparison(@"<b foo:regex=""foobar-\d{4}"">", "foo:regex",
7676
@"<b foo=""foobar-2000"">", "foo");
7777

78-
AttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Same);
78+
AttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
7979
}
8080

8181
[Theory(DisplayName = "When the control attribute is postfixed with :regex:ignoreCase " +
@@ -90,7 +90,7 @@ public void Test008(string attrNamePostfix)
9090
var comparison = ToAttributeComparison($@"<b {controlAttrName}=""foobar-\d{{4}}"">", controlAttrName,
9191
@"<b foo=""FOOBAR-2000"">", "foo");
9292

93-
AttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Same);
93+
AttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
9494
}
9595
}
9696
}

src/AngleSharp.Diffing.Tests/Strategies/AttributeStrategies/BooleanAttributeComparerTest.cs

+10-10
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public void Test001()
2323
var sut = new BooleanAttributeComparer(BooleanAttributeComparision.Strict);
2424
var comparison = ToAttributeComparison("<b foo>", "foo", "<b bar>", "bar");
2525

26-
sut.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Different);
26+
sut.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Different);
2727
}
2828

2929
[Fact(DisplayName = "When attribute name is not an boolean attribute, its current result is returned")]
@@ -49,12 +49,12 @@ public void Test003(string attrName)
4949
var c5 = ToAttributeComparison($@"<b {attrName}="""">", attrName, $@"<b {attrName}>", attrName);
5050
var c6 = ToAttributeComparison($@"<b {attrName}=""{attrName}"">", attrName, $@"<b {attrName}>", attrName);
5151

52-
sut.Compare(c1, CompareResult.Different).ShouldBe(CompareResult.Same);
53-
sut.Compare(c2, CompareResult.Different).ShouldBe(CompareResult.Same);
54-
sut.Compare(c3, CompareResult.Different).ShouldBe(CompareResult.Same);
55-
sut.Compare(c4, CompareResult.Different).ShouldBe(CompareResult.Same);
56-
sut.Compare(c5, CompareResult.Different).ShouldBe(CompareResult.Same);
57-
sut.Compare(c6, CompareResult.Different).ShouldBe(CompareResult.Same);
52+
sut.Compare(c1, CompareResult.Unknown).ShouldBe(CompareResult.Same);
53+
sut.Compare(c2, CompareResult.Unknown).ShouldBe(CompareResult.Same);
54+
sut.Compare(c3, CompareResult.Unknown).ShouldBe(CompareResult.Same);
55+
sut.Compare(c4, CompareResult.Unknown).ShouldBe(CompareResult.Same);
56+
sut.Compare(c5, CompareResult.Unknown).ShouldBe(CompareResult.Same);
57+
sut.Compare(c6, CompareResult.Unknown).ShouldBe(CompareResult.Same);
5858
}
5959

6060
[Theory(DisplayName = "When attributes is boolean and mode is loose, the presence of " +
@@ -68,9 +68,9 @@ public void Test004(string attrName)
6868
var c3 = ToAttributeComparison($@"<b {attrName}=""true"">", attrName, $@"<b {attrName}=""false"">", attrName);
6969

7070

71-
sut.Compare(c1, CompareResult.Different).ShouldBe(CompareResult.Same);
72-
sut.Compare(c2, CompareResult.Different).ShouldBe(CompareResult.Same);
73-
sut.Compare(c3, CompareResult.Different).ShouldBe(CompareResult.Same);
71+
sut.Compare(c1, CompareResult.Unknown).ShouldBe(CompareResult.Same);
72+
sut.Compare(c2, CompareResult.Unknown).ShouldBe(CompareResult.Same);
73+
sut.Compare(c3, CompareResult.Unknown).ShouldBe(CompareResult.Same);
7474
}
7575
}
7676
}

src/AngleSharp.Diffing.Tests/Strategies/AttributeStrategies/ClassAttributeComparerTest.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public void Test009(string controlClasses, string testClasses)
2424
var comparison = ToAttributeComparison($@"<p class=""{controlClasses}"">", "class",
2525
$@"<p class=""{testClasses}"">", "class");
2626

27-
ClassAttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Same);
27+
ClassAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
2828
}
2929

3030
[Fact(DisplayName = "When a class attribute is matched up with another attribute, the result is different")]
@@ -33,7 +33,7 @@ public void Test010()
3333
var comparison = ToAttributeComparison(@"<p class=""foo"">", "class",
3434
@"<p bar=""bar"">", "bar");
3535

36-
ClassAttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Different);
36+
ClassAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Different);
3737
}
3838

3939
[Theory(DisplayName = "When there are different number of classes in the class attributes the result is different")]
@@ -44,7 +44,7 @@ public void Test011(string controlClasses, string testClasses)
4444
var comparison = ToAttributeComparison($@"<p class=""{controlClasses}"">", "class",
4545
$@"<p class=""{testClasses}"">", "class");
4646

47-
ClassAttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Different);
47+
ClassAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Different);
4848
}
4949

5050
[Theory(DisplayName = "When the classes in the class attributes are different the result is different")]
@@ -57,7 +57,7 @@ public void Test012(string controlClasses, string testClasses)
5757
var comparison = ToAttributeComparison($@"<p class=""{controlClasses}"">", "class",
5858
$@"<p class=""{testClasses}"">", "class");
5959

60-
ClassAttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Different);
60+
ClassAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Different);
6161
}
6262
}
6363
}

src/AngleSharp.Diffing.Tests/Strategies/AttributeStrategies/IgnoreAttributeComparerTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public void Test004()
3333
@"<p foo=""baz""></p>", "foo"
3434
);
3535

36-
IgnoreAttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Same);
36+
IgnoreAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
3737
}
3838
}
3939
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
using AngleSharp.Diffing.Core;
2+
using Shouldly;
3+
using Xunit;
4+
5+
namespace AngleSharp.Diffing.Strategies.AttributeStrategies
6+
{
7+
public class OrderingStyleAttributeComparerTest : DiffingTestBase
8+
{
9+
public OrderingStyleAttributeComparerTest(DiffingTestFixture fixture) : base(fixture)
10+
{
11+
}
12+
13+
[Fact(DisplayName = "When attribute is not style the current decision is used")]
14+
public void Test001()
15+
{
16+
var comparison = ToAttributeComparison(@"<p foo=""bar"">", "foo", @"<p foo=""zab"">", "foo");
17+
StyleAttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Different);
18+
StyleAttributeComparer.Compare(comparison, CompareResult.Same).ShouldBe(CompareResult.Same);
19+
StyleAttributeComparer.Compare(comparison, CompareResult.Skip).ShouldBe(CompareResult.Skip);
20+
}
21+
22+
[Theory(DisplayName = "When style attributes has different values then Different is returned")]
23+
[InlineData(@"<p style=""color: red"">", @"<p style=""color: black"">")]
24+
[InlineData(@"<p style=""color: red"">", @"<p style=""text-align:center"">")]
25+
[InlineData(@"<p style=""color: red"">", @"<p style=""color: red;text-align:center"">")]
26+
[InlineData(@"<p style=""color: red;text-align:center"">", @"<p style=""color: red"">")]
27+
public void Test002(string control, string test)
28+
{
29+
var comparison = ToAttributeComparison(control, "style", test, "style");
30+
OrderingStyleAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Different);
31+
}
32+
33+
[Fact(DisplayName = "Comparer should correctly ignore insignificant whitespace")]
34+
public void Test003()
35+
{
36+
var comparison = ToAttributeComparison(@"<p style=""color: red"">", "style", @"<p style=""color:red"">", "style");
37+
OrderingStyleAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
38+
}
39+
40+
[Theory(DisplayName = "Comparer should ignore trailing semi colons")]
41+
[InlineData(@"<p style=""color:red;"">", @"<p style=""color:red"">")]
42+
[InlineData(@"<p style=""color:red"">", @"<p style=""color:red;"">")]
43+
public void Test004(string control, string test)
44+
{
45+
var comparison = ToAttributeComparison(control, "style", test, "style");
46+
OrderingStyleAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
47+
}
48+
49+
[Theory(DisplayName = "Comparer should ignore different order")]
50+
[InlineData(@"<p style=""alpha:0;border:0;color:red;"">", @"<p style=""color:red;border:0;alpha:0"">")]
51+
[InlineData(@"<p style=""alpha:0;border:0;color:red;"">", @"<p style=""border:0;color:red;alpha:0"">")]
52+
public void Test005(string control, string test)
53+
{
54+
var comparison = ToAttributeComparison(control, "style", test, "style");
55+
OrderingStyleAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
56+
}
57+
58+
[Theory(DisplayName = "Comparer should ignore different order inside style")]
59+
[InlineData(@"<p style=""border:1px solid black"">", @"<p style=""border:solid 1px black"">")]
60+
public void Test006(string control, string test)
61+
{
62+
var comparison = ToAttributeComparison(control, "style", test, "style");
63+
OrderingStyleAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
64+
}
65+
}
66+
}

src/AngleSharp.Diffing.Tests/Strategies/AttributeStrategies/StyleAttributeComparerTest.cs

+26-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
using AngleSharp.Diffing.Core;
2-
32
using Shouldly;
4-
53
using Xunit;
64

75
namespace AngleSharp.Diffing.Strategies.AttributeStrategies
@@ -21,18 +19,39 @@ public void Test001()
2119
StyleAttributeComparer.Compare(comparison, CompareResult.Skip).ShouldBe(CompareResult.Skip);
2220
}
2321

24-
[Fact(DisplayName = "When style attributes has different values then Different is returned")]
25-
public void Test002()
22+
[Theory(DisplayName = "When style attributes has different values then Different is returned")]
23+
[InlineData(@"<p style=""color: red"">", @"<p style=""color: black"">")]
24+
[InlineData(@"<p style=""color: red"">", @"<p style=""text-align:center"">")]
25+
[InlineData(@"<p style=""color: red"">", @"<p style=""color: red;text-align:center"">")]
26+
[InlineData(@"<p style=""color: red;text-align:center"">", @"<p style=""color: red"">")]
27+
public void Test002(string control, string test)
2628
{
27-
var comparison = ToAttributeComparison(@"<p style=""color: red"">", "style", @"<p style=""color: black"">", "style");
28-
StyleAttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Different);
29+
var comparison = ToAttributeComparison(control, "style", test, "style");
30+
StyleAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Different);
2931
}
3032

3133
[Fact(DisplayName = "Comparer should correctly ignore insignificant whitespace")]
3234
public void Test003()
3335
{
3436
var comparison = ToAttributeComparison(@"<p style=""color: red"">", "style", @"<p style=""color:red"">", "style");
35-
StyleAttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Same);
37+
StyleAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
38+
}
39+
40+
[Theory(DisplayName = "Comparer should ignore trailing semi colons")]
41+
[InlineData(@"<p style=""color:red;"">", @"<p style=""color:red"">")]
42+
[InlineData(@"<p style=""color:red"">", @"<p style=""color:red;"">")]
43+
public void Test004(string control, string test)
44+
{
45+
var comparison = ToAttributeComparison(control, "style", test, "style");
46+
StyleAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
47+
}
48+
49+
[Theory(DisplayName = "Comparer should ignore different order inside style")]
50+
[InlineData(@"<p style=""border:1px solid black"">", @"<p style=""border:solid 1px black"">")]
51+
public void Test005(string control, string test)
52+
{
53+
var comparison = ToAttributeComparison(control, "style", test, "style");
54+
StyleAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same);
3655
}
3756
}
3857
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ public void Test002(string controlHtml)
3737
{
3838
var comparison = ToComparison(controlHtml, "<p></p>");
3939

40-
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.Same).ShouldBe(CompareResult.Same | CompareResult.SkipAttributes);
41-
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Different | CompareResult.SkipAttributes);
40+
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.SkipAttributes);
41+
IgnoreAttributesElementComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.SkipAttributes);
4242
}
4343
}
4444
}

0 commit comments

Comments
 (0)