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 }