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 }