Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

MaskTest.java 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2024 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.classloader;
  21. import org.junit.jupiter.api.Test;
  22. import static org.assertj.core.api.Assertions.assertThat;
  23. public class MaskTest {
  24. @Test
  25. public void ALL_accepts_everything() throws Exception {
  26. assertThat(Mask.ALL.acceptClass("org.sonar.Bar")).isTrue();
  27. assertThat(Mask.ALL.acceptClass("Bar")).isTrue();
  28. }
  29. @Test
  30. public void NONE_accepts_nothing() throws Exception {
  31. assertThat(Mask.NONE.acceptClass("org.sonar.Bar")).isFalse();
  32. assertThat(Mask.NONE.acceptClass("Bar")).isFalse();
  33. }
  34. @Test
  35. public void include_class() throws Exception {
  36. Mask mask = Mask.builder().include("org/sonar/Bar.class").build();
  37. assertThat(mask.acceptClass("org.sonar.Bar")).isTrue();
  38. assertThat(mask.acceptClass("org.sonar.qube.Bar")).isFalse();
  39. assertThat(mask.acceptClass("org.sonar.Foo")).isFalse();
  40. assertThat(mask.acceptClass("Bar")).isFalse();
  41. }
  42. @Test
  43. public void include_class_of_root_package() throws Exception {
  44. Mask mask = Mask.builder().include("Bar.class").build();
  45. assertThat(mask.acceptClass("Bar")).isTrue();
  46. assertThat(mask.acceptClass("Foo")).isFalse();
  47. }
  48. @Test
  49. public void include_resource() throws Exception {
  50. Mask mask = Mask.builder().include("org/sonar/Bar.class").build();
  51. assertThat(mask.acceptResource("org/sonar/Bar.class")).isTrue();
  52. assertThat(mask.acceptResource("org/sonar/qube/Bar.class")).isFalse();
  53. assertThat(mask.acceptResource("org/sonar/Foo.class")).isFalse();
  54. assertThat(mask.acceptResource("Bar.class")).isFalse();
  55. }
  56. @Test
  57. public void include_package() throws Exception {
  58. Mask mask = Mask.builder().include("org/sonar/", "org/other/").build();
  59. assertThat(mask.acceptClass("Foo")).isFalse();
  60. assertThat(mask.acceptClass("org.sonar.Bar")).isTrue();
  61. assertThat(mask.acceptClass("org.sonarqube.Foo")).isFalse();
  62. assertThat(mask.acceptClass("org.sonar.qube.Foo")).isTrue();
  63. assertThat(mask.acceptClass("Bar")).isFalse();
  64. }
  65. @Test
  66. public void exclude_class() throws Exception {
  67. Mask mask = Mask.builder().exclude("org/sonar/Bar.class").build();
  68. assertThat(mask.acceptClass("org.sonar.Bar")).isFalse();
  69. assertThat(mask.acceptClass("org.sonar.qube.Bar")).isTrue();
  70. assertThat(mask.acceptClass("org.sonar.Foo")).isTrue();
  71. assertThat(mask.acceptClass("Bar")).isTrue();
  72. }
  73. @Test
  74. public void exclude_package() throws Exception {
  75. Mask mask = Mask.builder().exclude("org/sonar/", "org/other/").build();
  76. assertThat(mask.acceptClass("Foo")).isTrue();
  77. assertThat(mask.acceptClass("org.sonar.Bar")).isFalse();
  78. assertThat(mask.acceptClass("org.sonarqube.Foo")).isTrue();
  79. assertThat(mask.acceptClass("org.sonar.qube.Foo")).isFalse();
  80. assertThat(mask.acceptClass("Bar")).isTrue();
  81. }
  82. @Test
  83. public void exclusion_is_subset_of_inclusion() throws Exception {
  84. Mask mask = Mask.builder()
  85. .include("org/sonar/")
  86. .exclude("org/sonar/qube/")
  87. .build();
  88. assertThat(mask.acceptClass("org.sonar.Foo")).isTrue();
  89. assertThat(mask.acceptClass("org.sonar.Qube")).isTrue();
  90. assertThat(mask.acceptClass("org.sonar.qube.Foo")).isFalse();
  91. }
  92. @Test
  93. public void inclusion_is_subset_of_exclusion() throws Exception {
  94. Mask mask = Mask.builder()
  95. .include("org/sonar/qube/")
  96. .exclude("org/sonar/")
  97. .build();
  98. assertThat(mask.acceptClass("org.sonar.Foo")).isFalse();
  99. assertThat(mask.acceptClass("org.sonar.Qube")).isFalse();
  100. assertThat(mask.acceptClass("org.sonar.qube.Foo")).isFalse();
  101. }
  102. @Test
  103. public void exclude_everything() throws Exception {
  104. Mask mask = Mask.builder().exclude("/").build();
  105. assertThat(mask.acceptClass("org.sonar.Foo")).isFalse();
  106. assertThat(mask.acceptClass("Foo")).isFalse();
  107. assertThat(mask.acceptResource("config.xml")).isFalse();
  108. assertThat(mask.acceptResource("org/config.xml")).isFalse();
  109. }
  110. @Test
  111. public void include_everything() throws Exception {
  112. Mask mask = Mask.builder().include("/").build();
  113. assertThat(mask.acceptClass("org.sonar.Foo")).isTrue();
  114. assertThat(mask.acceptClass("Foo")).isTrue();
  115. assertThat(mask.acceptResource("config.xml")).isTrue();
  116. assertThat(mask.acceptResource("org/config.xml")).isTrue();
  117. }
  118. @Test
  119. public void merge_with_ALL() throws Exception {
  120. Mask mask = Mask.builder()
  121. .include("org/foo/")
  122. .exclude("org/bar/")
  123. .merge(Mask.ALL)
  124. .build();
  125. assertThat(mask.getInclusions()).containsOnly("org/foo/");
  126. assertThat(mask.getExclusions()).containsOnly("org/bar/");
  127. }
  128. @Test
  129. public void merge_exclusions() throws Exception {
  130. Mask with = Mask.builder().exclude("bar/").build();
  131. Mask mask = Mask.builder().exclude("org/foo/").merge(with).build();
  132. assertThat(mask.getExclusions()).containsOnly("org/foo/", "bar/");
  133. }
  134. @Test
  135. public void should_not_merge_disjoined_inclusions() throws Exception {
  136. Mask with = Mask.builder().include("org/bar/").build();
  137. Mask mask = Mask.builder().include("org/foo/").merge(with).build();
  138. assertThat(mask.getInclusions()).isEmpty();
  139. // TODO does that mean that merge result accepts everything ?
  140. }
  141. @Test
  142. public void merge_inclusions() throws Exception {
  143. Mask with = Mask.builder().include("org/foo/sub/", "org/bar/").build();
  144. Mask mask = Mask.builder().include("org/foo/", "org/bar/sub/").merge(with).build();
  145. assertThat(mask.getInclusions()).containsOnly("org/foo/sub/", "org/bar/sub/");
  146. }
  147. }