blob: 94b478439811739b544fe9dfa66ffc05e4a70f0a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
package testing;
import java.io.*;
/**
* A clean headless test runner that suppresses ALL GUI-related errors internally.
*/
public class CleanHeadlessRunner {
public static void main(String[] args) {
// Redirect stderr to filter out GUI errors
PrintStream originalErr = System.err;
FilteringPrintStream filteringErr = new FilteringPrintStream(originalErr);
System.setErr(filteringErr);
try {
// Run the actual tests
ProtocolTestRunnerWithLogs.main(args);
} finally {
// Restore original stderr
System.setErr(originalErr);
}
}
/**
* A PrintStream that filters out GUI-related error messages.
*/
private static class FilteringPrintStream extends PrintStream {
private final PrintStream original;
private boolean inStackTrace = false;
public FilteringPrintStream(PrintStream original) {
super(new FilteringOutputStream(original));
this.original = original;
((FilteringOutputStream) out).setPrintStream(this);
}
@Override
public void println(String x) {
if (shouldFilter(x)) {
inStackTrace = true;
return;
}
if (inStackTrace && (x == null || x.trim().isEmpty() || !x.startsWith("\tat"))) {
inStackTrace = false;
}
if (!inStackTrace) {
super.println(x);
}
}
@Override
public void print(String s) {
if (!inStackTrace && !shouldFilter(s)) {
super.print(s);
}
}
private boolean shouldFilter(String message) {
if (message == null) return false;
return message.contains("Component must have a valid peer") ||
message.contains("java.lang.IllegalStateException") ||
message.contains("createBufferStrategy") ||
message.contains("FlipBufferStrategy") ||
message.contains("at java.desktop/") ||
message.contains("at simulator.VSSimulatorVisualization.paint") ||
message.contains("VSMessageLine.<init>") ||
message.contains("Error during simulation: null") ||
(message.startsWith("java.lang.") &&
message.contains("InvocationTargetException"));
}
}
/**
* Custom OutputStream for filtering.
*/
private static class FilteringOutputStream extends OutputStream {
private final PrintStream target;
private final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
private FilteringPrintStream parent;
public FilteringOutputStream(PrintStream target) {
this.target = target;
}
public void setPrintStream(FilteringPrintStream parent) {
this.parent = parent;
}
@Override
public void write(int b) throws IOException {
buffer.write(b);
if (b == '\n') {
String line = buffer.toString();
buffer.reset();
if (parent != null && !parent.shouldFilter(line)) {
target.print(line);
}
}
}
@Override
public void flush() throws IOException {
target.flush();
}
}
}
|