/Source/Webpack.Domain.Analytics.Tests/DocumentTypeAnalysis/When_comparing_HtmlNodes_for_equality.cs

https://bitbucket.org/mchudo89/webpack-2.0 · C# · 164 lines · 90 code · 25 blank · 49 comment · 2 complexity · 56649afcf42024353cc99abaf0226907 MD5 · raw file

  1. // <copyright file="When_comparing_HtmlNodes_for_equality.cs" company="ÚVT MU">
  2. // Copyright (c) ÚVT MU. All rights reserved.
  3. // </copyright>
  4. // <author>Matej Chudo</author>
  5. namespace Webpack.Domain.Analytics.Tests.DocumentTypeAnalysis
  6. {
  7. using System;
  8. using System.Collections.Generic;
  9. using FakeItEasy;
  10. using HtmlAgilityPack;
  11. using Webpack.Domain.Analytics.DocumentTypeAnalysis;
  12. using Xunit;
  13. /// <summary>
  14. /// Unit test for HtmlNodeEqualityComparer
  15. /// </summary>
  16. public class When_comparing_HtmlNodes_for_equality
  17. {
  18. /// <summary>
  19. /// Tests for null value.
  20. /// </summary>
  21. [Fact(Timeout=1000)]
  22. public void Should_be_true_if_both_are_null()
  23. {
  24. // Arange
  25. IEqualityComparer<HtmlAttribute> attComparer = A.Fake<IEqualityComparer<HtmlAttribute>>();
  26. IEqualityComparer<HtmlNode> comparer = new HtmlNodeEqualityComparer(attComparer);
  27. HtmlNode node1 = null;
  28. HtmlNode node2 = null;
  29. // Act
  30. bool result = comparer.Equals(node1, node2);
  31. // Assert
  32. Assert.True(result);
  33. }
  34. /// <summary>
  35. /// Tests for 1 null value.
  36. /// </summary>
  37. [Fact(Timeout=1000)]
  38. public void Should_be_false_if_one_is_null()
  39. {
  40. // Arange
  41. IEqualityComparer<HtmlAttribute> attComparer = A.Fake<IEqualityComparer<HtmlAttribute>>();
  42. IEqualityComparer<HtmlNode> comparer = new HtmlNodeEqualityComparer(attComparer);
  43. HtmlNode node1 = HtmlNode.CreateNode("<p></p>");
  44. HtmlNode node2 = null;
  45. // Act
  46. bool result = comparer.Equals(node1, node2);
  47. // Assert
  48. Assert.False(result);
  49. }
  50. /// <summary>
  51. /// Tests for same nodes.
  52. /// </summary>
  53. [Fact(Timeout=1000)]
  54. public void Should_be_true_for_nodes_with_same_name_type_and_attributes()
  55. {
  56. // Arange
  57. IEqualityComparer<HtmlAttribute> attComparer = A.Fake<IEqualityComparer<HtmlAttribute>>();
  58. IEqualityComparer<HtmlNode> comparer = new HtmlNodeEqualityComparer(attComparer);
  59. HtmlNode node1 = HtmlNode.CreateNode(@"<p class=""class""></p>");
  60. HtmlNode node2 = HtmlNode.CreateNode(@"<p class=""class""></p>");
  61. A.CallTo(() => attComparer.Equals(A<HtmlAttribute>.Ignored, A<HtmlAttribute>.Ignored)).Returns(true);
  62. // Act
  63. bool result = comparer.Equals(node1, node2);
  64. // Assert
  65. Assert.True(result);
  66. }
  67. /// <summary>
  68. /// Tests for same nodes but with attributes in different order.
  69. /// </summary>
  70. [Fact(Timeout=1000)]
  71. public void Should_be_true_for_nodes_with_same_name_type_and_attributes_in_different_order()
  72. {
  73. // Arange
  74. IEqualityComparer<HtmlAttribute> attComparer = A.Fake<IEqualityComparer<HtmlAttribute>>();
  75. IEqualityComparer<HtmlNode> comparer = new HtmlNodeEqualityComparer(attComparer);
  76. HtmlNode node1 = HtmlNode.CreateNode(@"<p class=""class"" id=""sometihng""></p>");
  77. HtmlNode node2 = HtmlNode.CreateNode(@"<p id=""sometihng"" class=""class""></p>");
  78. A.CallTo(() => attComparer.Equals(A<HtmlAttribute>.Ignored, A<HtmlAttribute>.Ignored))
  79. .ReturnsLazily<bool, HtmlAttribute, HtmlAttribute>((a1, a2) => string.Equals(a1.Name, a2.Name, StringComparison.InvariantCultureIgnoreCase)
  80. && string.Equals(a1.Value, a2.Value, StringComparison.InvariantCultureIgnoreCase));
  81. // Act
  82. bool result = comparer.Equals(node1, node2);
  83. // Assert
  84. Assert.True(result);
  85. }
  86. /// <summary>
  87. /// Tests for nodes with different casing.
  88. /// </summary>
  89. [Fact(Timeout=1000)]
  90. public void Should_be_true_for_nodes_with_same_name_type_and_attributes_case_insensitive()
  91. {
  92. // Arange
  93. IEqualityComparer<HtmlAttribute> attComparer = A.Fake<IEqualityComparer<HtmlAttribute>>();
  94. IEqualityComparer<HtmlNode> comparer = new HtmlNodeEqualityComparer(attComparer);
  95. HtmlNode node1 = HtmlNode.CreateNode(@"<p class=""class"" id=""something""></p>");
  96. HtmlNode node2 = HtmlNode.CreateNode(@"<P id=""SOMETHING"" class=""class""></P>");
  97. A.CallTo(() => attComparer.Equals(A<HtmlAttribute>.Ignored, A<HtmlAttribute>.Ignored))
  98. .ReturnsLazily<bool, HtmlAttribute, HtmlAttribute>((a1, a2) => string.Equals(a1.Name, a2.Name, StringComparison.InvariantCultureIgnoreCase)
  99. && string.Equals(a1.Value, a2.Value, StringComparison.InvariantCultureIgnoreCase));
  100. // Act
  101. bool result = comparer.Equals(node1, node2);
  102. // Assert
  103. Assert.True(result);
  104. }
  105. /// <summary>
  106. /// Tests for nodes but with different attributes.
  107. /// </summary>
  108. [Fact(Timeout=1000)]
  109. public void Should_be_false_for_nodes_with_same_name_type_and_diferent_attributes()
  110. {
  111. // Arange
  112. IEqualityComparer<HtmlAttribute> attComparer = A.Fake<IEqualityComparer<HtmlAttribute>>();
  113. IEqualityComparer<HtmlNode> comparer = new HtmlNodeEqualityComparer(attComparer);
  114. HtmlNode node1 = HtmlNode.CreateNode(@"<p id=""sometihng""></p>");
  115. HtmlNode node2 = HtmlNode.CreateNode(@"<p class=""class""></p>");
  116. A.CallTo(() => attComparer.Equals(A<HtmlAttribute>.Ignored, A<HtmlAttribute>.Ignored)).Returns(false);
  117. // Act
  118. bool result = comparer.Equals(node1, node2);
  119. // Assert
  120. Assert.False(result);
  121. }
  122. /// <summary>
  123. /// Tests for text item and element.
  124. /// </summary>
  125. [Fact(Timeout=1000)]
  126. public void Should_be_false_for_nodes_with_diferent_type()
  127. {
  128. // Arange
  129. IEqualityComparer<HtmlAttribute> attComparer = A.Fake<IEqualityComparer<HtmlAttribute>>();
  130. IEqualityComparer<HtmlNode> comparer = new HtmlNodeEqualityComparer(attComparer);
  131. HtmlNode node1 = HtmlNode.CreateNode(@"<p></p>");
  132. HtmlNode node2 = HtmlNode.CreateNode(@"p");
  133. // Act
  134. bool result = comparer.Equals(node1, node2);
  135. // Assert
  136. Assert.False(result);
  137. }
  138. }
  139. }