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.ArrayList;
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 ArrayList<>(0);
28  
29      void add(final AuditEvent event) {
30          this.events.add(event);
31      }
32  
33      /**
34       * How many messages do we have?
35       *
36       * @return Amount of messages reported
37       */
38      int eventCount() {
39          return this.events.size();
40      }
41  
42      /**
43       * Do we have this message for this line?
44       *
45       * @param line The number of the line
46       * @param msg The message we're looking for
47       * @return This message was reported for the give line?
48       */
49      boolean has(final Integer line, final String msg) {
50          boolean has = false;
51          for (final AuditEvent event : this.events) {
52              if (event.getLine() == line && event.getMessage().equals(msg)) {
53                  has = true;
54                  break;
55              }
56          }
57          return has;
58      }
59  
60      /**
61       * Returns full summary.
62       *
63       * @return The test summary of all events
64       */
65      String summary() {
66          final List<String> msgs = new ArrayList<>(0);
67          for (final AuditEvent event : this.events) {
68              msgs.add(
69                  String.format(
70                      "%s:%s",
71                      event.getLine(),
72                      event.getMessage()
73                  )
74              );
75          }
76          return new Joined("; ", msgs).toString();
77      }
78  }