View Javadoc
1   /*
2    * SPDX-FileCopyrightText: Copyright (c) 2011-2026 Yegor Bugayenko
3    * SPDX-License-Identifier: MIT
4    */
5   package com.qulice.checkstyle;
6   
7   import com.puppycrawl.tools.checkstyle.api.AuditEvent;
8   import java.util.LinkedList;
9   import java.util.List;
10  import org.cactoos.text.Joined;
11  
12  /**
13   * Mocked collector of checkstyle events used by ChecksTest.
14   *
15   * <p>Captures every {@link AuditEvent} emitted by a Checkstyle
16   * {@code Checker} into an in-memory list, exposing helpers to count
17   * events, look up a specific line/message pair, and render a debug
18   * summary of all events for assertion failure messages.</p>
19   *
20   * @since 0.27.0
21   */
22  final class AuditCollector {
23  
24      /**
25       * List of events received.
26       */
27      private final List<AuditEvent> events = new LinkedList<>();
28  
29      void add(final AuditEvent event) {
30          this.events.add(event);
31      }
32  
33      /**
34       * How many messages do we have?
35       * @return Amount of messages reported
36       */
37      int eventCount() {
38          return this.events.size();
39      }
40  
41      /**
42       * Do we have this message for this line?
43       * @param line The number of the line
44       * @param msg The message we're looking for
45       * @return This message was reported for the give line?
46       */
47      boolean has(final Integer line, final String msg) {
48          boolean has = false;
49          for (final AuditEvent event : this.events) {
50              if (event.getLine() == line && event.getMessage().equals(msg)) {
51                  has = true;
52                  break;
53              }
54          }
55          return has;
56      }
57  
58      /**
59       * Returns full summary.
60       * @return The test summary of all events
61       */
62      String summary() {
63          final List<String> msgs = new LinkedList<>();
64          for (final AuditEvent event : this.events) {
65              msgs.add(
66                  String.format(
67                      "%s:%s",
68                      event.getLine(),
69                      event.getMessage()
70                  )
71              );
72          }
73          return new Joined("; ", msgs).toString();
74      }
75  }