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 java.util.ArrayList;
23 import java.util.List;
24 import org.apache.maven.surefire.report.ConsoleOutputReceiver;
25 import org.apache.maven.surefire.report.Reporter;
26 import org.apache.maven.surefire.util.internal.ByteBuffer;
27
28
29
30
31 public class LogicalStream
32 {
33 private final List<Entry> output = new ArrayList<Entry>();
34
35 class Entry
36 {
37 final boolean stdout;
38 final byte[] b;
39 final int off;
40 final int len;
41
42 Entry( boolean stdout, byte[] b, int off, int len )
43 {
44 this.stdout = stdout;
45 this.b = ByteBuffer.copy( b, off, len);
46 this.off = 0;
47 this.len = len;
48 }
49
50 public boolean isStdout()
51 {
52 return stdout;
53 }
54
55 public void writeTo( StringBuilder stringBuilder )
56 {
57 final String str = new String( b, off, len );
58 stringBuilder.append( str );
59 }
60
61
62 public void writeDetails( Reporter reporter )
63 {
64 final String str = new String( b, off, len );
65 reporter.writeDetailMessage( str );
66 }
67
68 public void writeDetails( ConsoleOutputReceiver outputReceiver)
69 {
70 outputReceiver.writeTestOutput( b, off, len , stdout );
71 }
72
73 @Override
74 public String toString()
75 {
76 return new String( b, off, len );
77 }
78
79 public boolean isBlankLine()
80 {
81 return "\n".equals( toString() );
82 }
83 }
84
85 public synchronized void write( boolean stdout, byte b[], int off, int len )
86 {
87 Entry entry = new Entry( stdout, b, off, len );
88 if ( !entry.isBlankLine() )
89 {
90 output.add( entry );
91 }
92 }
93
94 public void writeDetails( Reporter reporter )
95 {
96 for ( Entry entry : output )
97 {
98 entry.writeDetails( reporter );
99 }
100 }
101
102 public void writeDetails( ConsoleOutputReceiver outputReceiver )
103 {
104 for ( Entry entry : output )
105 {
106 entry.writeDetails( outputReceiver );
107 }
108 }
109
110
111 public String getOutput( boolean stdOut )
112 {
113 StringBuilder stringBuilder = new StringBuilder();
114 for ( Entry entry : output )
115 {
116 if ( stdOut == entry.isStdout() )
117 {
118 entry.writeTo( stringBuilder );
119 }
120 }
121 return stringBuilder.toString();
122 }
123 }