View Javadoc
1   /*
2    * SPDX-FileCopyrightText: Copyright (c) 2011-2026 Yegor Bugayenko
3    * SPDX-License-Identifier: MIT
4    */
5   package com.qulice.errorprone;
6   
7   import com.qulice.spi.Environment;
8   import java.io.File;
9   import java.util.Arrays;
10  import java.util.Collections;
11  import java.util.List;
12  import java.util.Map;
13  import org.hamcrest.MatcherAssert;
14  import org.hamcrest.Matchers;
15  import org.junit.jupiter.api.Test;
16  
17  /**
18   * Test case for {@link Batches}.
19   *
20   * @since 1.0
21   */
22  final class BatchesTest {
23  
24      @Test
25      void keepsEveryTestRootApart() {
26          final Environment env = new Environment.Mock()
27              .withTestdir("src/mock/java");
28          final Map<String, List<File>> batches = new Batches(
29              env,
30              Arrays.asList(
31                  new File(env.basedir(), "src/main/java/com/qulice/Foo.java"),
32                  new File(env.basedir(), "src/test/java/com/qulice/Foo.java"),
33                  new File(env.basedir(), "src/mock/java/com/qulice/Foo.java")
34              )
35          ).split();
36          MatcherAssert.assertThat(
37              String.format(
38                  "each source root must compile on its own: %s", batches
39              ),
40              batches.keySet(),
41              Matchers.contains("main", "test-1-src-mock-java", "test-2-src-test")
42          );
43      }
44  
45      @Test
46      void namesBatchesAfterTheirRoots() {
47          final Environment env = new Environment.Mock()
48              .withTestdir("src/mock/java");
49          final Map<String, List<File>> batches = new Batches(
50              env,
51              Collections.singletonList(
52                  new File(env.basedir(), "src/mock/java/com/qulice/Foo.java")
53              )
54          ).split();
55          MatcherAssert.assertThat(
56              String.format(
57                  "the batch of a root must be named after it: %s", batches
58              ),
59              batches.keySet(),
60              Matchers.contains("test-1-src-mock-java")
61          );
62      }
63  
64      @Test
65      void skipsEmptyBatches() {
66          final Environment env = new Environment.Mock()
67              .withTestdir("src/mock/java");
68          final Map<String, List<File>> batches = new Batches(
69              env,
70              Collections.singletonList(
71                  new File(env.basedir(), "src/main/java/com/qulice/Foo.java")
72              )
73          ).split();
74          MatcherAssert.assertThat(
75              String.format("a root without sources needs no pass: %s", batches),
76              batches.keySet(),
77              Matchers.contains("main")
78          );
79      }
80  
81      @Test
82      void givesNestedRootItsOwnBatch() {
83          final Environment env = new Environment.Mock()
84              .withTestdir("src/test/java/it");
85          final File outer = new File(
86              env.basedir(), "src/test/java/com/qulice/Foo.java"
87          );
88          final File inner = new File(
89              env.basedir(), "src/test/java/it/com/qulice/Foo.java"
90          );
91          final Map<String, List<File>> batches = new Batches(
92              env, Arrays.asList(outer, inner)
93          ).split();
94          MatcherAssert.assertThat(
95              String.format(
96                  "a root nested in another must claim its files: %s", batches
97              ),
98              batches.get("test-1-src-test-java-it"),
99              Matchers.contains(inner)
100         );
101     }
102 }