You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RawTextIgnoreWhitespaceChangeTest.java 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /*
  2. * Copyright (C) 2009-2010, Google Inc.
  3. * Copyright (C) 2009, Johannes E. Schindelin <johannes.schindelin@gmx.de> and others
  4. *
  5. * This program and the accompanying materials are made available under the
  6. * terms of the Eclipse Distribution License v. 1.0 which is available at
  7. * https://www.eclipse.org/org/documents/edl-v10.php.
  8. *
  9. * SPDX-License-Identifier: BSD-3-Clause
  10. */
  11. package org.eclipse.jgit.diff;
  12. import static org.junit.Assert.assertEquals;
  13. import static org.junit.Assert.assertFalse;
  14. import static org.junit.Assert.assertNotEquals;
  15. import static org.junit.Assert.assertTrue;
  16. import org.eclipse.jgit.lib.Constants;
  17. import org.junit.Test;
  18. public class RawTextIgnoreWhitespaceChangeTest {
  19. private final RawTextComparator cmp = RawTextComparator.WS_IGNORE_CHANGE;
  20. @Test
  21. public void testEqualsWithoutWhitespace() {
  22. final RawText a = new RawText(Constants
  23. .encodeASCII("foo-a\nfoo-b\nfoo\n"));
  24. final RawText b = new RawText(Constants
  25. .encodeASCII("foo-b\nfoo-c\nf\n"));
  26. assertEquals(3, a.size());
  27. assertEquals(3, b.size());
  28. // foo-a != foo-b
  29. assertFalse(cmp.equals(a, 0, b, 0));
  30. assertFalse(cmp.equals(b, 0, a, 0));
  31. // foo-b == foo-b
  32. assertTrue(cmp.equals(a, 1, b, 0));
  33. assertTrue(cmp.equals(b, 0, a, 1));
  34. // foo != f
  35. assertFalse(cmp.equals(a, 2, b, 2));
  36. assertFalse(cmp.equals(b, 2, a, 2));
  37. }
  38. @Test
  39. public void testEqualsWithWhitespace() {
  40. final RawText a = new RawText(Constants
  41. .encodeASCII("foo-a\n \n a b c\na \n foo\na b c\n"));
  42. final RawText b = new RawText(Constants
  43. .encodeASCII("foo-a b\n\nab c\na\nfoo\na b c \n"));
  44. // "foo-a" != "foo-a b"
  45. assertFalse(cmp.equals(a, 0, b, 0));
  46. assertFalse(cmp.equals(b, 0, a, 0));
  47. // " " == ""
  48. assertTrue(cmp.equals(a, 1, b, 1));
  49. assertTrue(cmp.equals(b, 1, a, 1));
  50. // " a b c" != "ab c"
  51. assertFalse(cmp.equals(a, 2, b, 2));
  52. assertFalse(cmp.equals(b, 2, a, 2));
  53. // "a " == "a"
  54. assertTrue(cmp.equals(a, 3, b, 3));
  55. assertTrue(cmp.equals(b, 3, a, 3));
  56. // " foo" != "foo"
  57. assertFalse(cmp.equals(a, 4, b, 4));
  58. assertFalse(cmp.equals(b, 4, a, 4));
  59. // "a b c" == "a b c "
  60. assertTrue(cmp.equals(a, 5, b, 5));
  61. assertTrue(cmp.equals(b, 5, a, 5));
  62. }
  63. @Test
  64. public void testEqualsWithTabs() {
  65. RawText a = new RawText(
  66. Constants.encodeASCII("a\tb\t \na\tb\t c \n foo\na b\na b"));
  67. RawText b = new RawText(
  68. Constants.encodeASCII("a b \na b c\n\tfoo\nab\na \tb"));
  69. // "a\tb\t \n" == "a b \n"
  70. assertTrue(cmp.equals(a, 0, b, 0));
  71. assertTrue(cmp.equals(b, 0, a, 0));
  72. // "a\tb\t c \n" == "a b c\n"
  73. assertTrue(cmp.equals(a, 1, b, 1));
  74. assertTrue(cmp.equals(b, 1, a, 1));
  75. // " foo" == "\tfoo"
  76. assertTrue(cmp.equals(a, 2, b, 2));
  77. assertTrue(cmp.equals(b, 2, a, 2));
  78. // "a b" != "ab"
  79. assertFalse(cmp.equals(a, 3, b, 3));
  80. assertFalse(cmp.equals(b, 3, a, 3));
  81. // "a b" == "a \tb "
  82. assertTrue(cmp.equals(a, 4, b, 4));
  83. assertTrue(cmp.equals(b, 4, a, 4));
  84. }
  85. @Test
  86. public void testHashCode() {
  87. RawText a = new RawText(Constants
  88. .encodeASCII("a b c\n\nab c d \n\ta bc d\nxyz\na b c"));
  89. RawText b = new RawText(Constants.encodeASCII(
  90. "a b c\na b c\nab c d\na bc d\n \t a bc d\na b c\n"));
  91. // Same line gives equal hash
  92. assertEquals(cmp.hash(a, 0), cmp.hash(a, 0));
  93. // Empty lines produce the same hash
  94. assertEquals(cmp.hash(a, 1), cmp.hash(a, 1));
  95. // Equal lines from different RawTexts get the same hash (RawText
  96. // instance is not part of the hash)
  97. assertEquals(cmp.hash(a, 0), cmp.hash(b, 0));
  98. // A blank produces the same hash as a TAB
  99. assertEquals(cmp.hash(new RawText(Constants.encodeASCII(" ")), 0),
  100. cmp.hash(new RawText(Constants.encodeASCII("\t")), 0));
  101. // Lines with only differing whitespace produce same hash
  102. assertEquals(cmp.hash(a, 0), cmp.hash(b, 1));
  103. // Lines with different trailing whitespace produce the same hash
  104. assertEquals(cmp.hash(a, 2), cmp.hash(b, 2));
  105. // A line with leading whitespace produces a hash different from the
  106. // same line without leading whitespace
  107. assertNotEquals(cmp.hash(a, 3), cmp.hash(b, 3));
  108. // Lines with different leading whitespace produce equal hashes
  109. assertEquals(cmp.hash(a, 3), cmp.hash(b, 4));
  110. // While different lines _should_ produce different hashes, that may not
  111. // always be the case. But for these two lines, it is.
  112. assertNotEquals(cmp.hash(a, 4), cmp.hash(b, 4));
  113. // A line without trailing \n produces the same hash as one without
  114. assertEquals(cmp.hash(a, 5), cmp.hash(b, 5));
  115. }
  116. }