1 package org.apache.maven.surefire.junitcore;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.surefire.report.ConsoleOutputReceiver;
23
24 import java.util.Arrays;
25 import java.util.Queue;
26 import java.util.concurrent.ConcurrentLinkedQueue;
27
28
29
30
31 public final class LogicalStream
32 {
33 private final Queue<Entry> output = new ConcurrentLinkedQueue<Entry>();
34
35 private static final class Entry
36 {
37 private final boolean stdout;
38
39 private final byte[] b;
40
41 private final int off;
42
43 private final int len;
44
45 private Entry( boolean stdout, byte[] b, int off, int len )
46 {
47 this.stdout = stdout;
48 this.b = Arrays.copyOfRange( b, off, off + len );
49 this.off = 0;
50 this.len = len;
51 }
52
53 private void writeDetails( ConsoleOutputReceiver outputReceiver )
54 {
55 outputReceiver.writeTestOutput( b, off, len, stdout );
56 }
57 }
58
59 public void write( boolean stdout, byte b[], int off, int len )
60 {
61 if ( !isBlankLine( b, len ) )
62 {
63 Entry entry = new Entry( stdout, b, off, len );
64 output.add( entry );
65 }
66 }
67
68 public void writeDetails( ConsoleOutputReceiver outputReceiver )
69 {
70 for ( Entry entry = output.poll(); entry != null; entry = output.poll() )
71 {
72 entry.writeDetails( outputReceiver );
73 }
74 }
75
76 private static boolean isBlankLine( byte[] b, int len )
77 {
78 return b == null || len == 0;
79 }
80 }