1 package org.apache.maven.surefire.its.fixture;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.nio.charset.Charset;
25 import java.util.Collection;
26 import java.util.List;
27
28 import org.apache.commons.io.FileUtils;
29 import org.apache.maven.it.VerificationException;
30 import org.apache.maven.it.Verifier;
31 import org.hamcrest.Matcher;
32
33 import static org.hamcrest.MatcherAssert.assertThat;
34
35
36
37
38
39
40 public class OutputValidator
41 {
42 protected final Verifier verifier;
43
44 protected final File baseDir;
45
46 public OutputValidator( Verifier verifier )
47 {
48 this.verifier = verifier;
49 this.baseDir = new File( verifier.getBasedir() );
50 }
51
52 public OutputValidator verifyTextInLog( String text )
53 {
54 try
55 {
56 verifier.verifyTextInLog( text );
57 }
58 catch ( VerificationException e )
59 {
60 throw new SurefireVerifierException( e );
61 }
62 return this;
63 }
64
65
66 public OutputValidator verifyErrorFreeLog()
67 {
68 try
69 {
70 verifier.verifyErrorFreeLog();
71 }
72 catch ( VerificationException e )
73 {
74 throw new SurefireVerifierException( e );
75 }
76 return this;
77 }
78
79 public OutputValidator verifyErrorFree( int total )
80 {
81 try
82 {
83 verifier.verifyErrorFreeLog();
84 this.assertTestSuiteResults( total, 0, 0, 0 );
85 return this;
86 }
87 catch ( VerificationException e )
88 {
89 throw new SurefireVerifierException( e );
90 }
91 }
92
93 public OutputValidator assertThatLogLine( Matcher<String> line, Matcher<Integer> nTimes )
94 throws VerificationException
95 {
96 int counter = 0;
97 for ( String log : loadLogLines() )
98 {
99 if ( line.matches( log ) )
100 {
101 counter++;
102 }
103 }
104 assertThat( "log pattern does not match nTimes", counter, nTimes );
105 return this;
106 }
107
108 public Collection<String> loadLogLines()
109 throws VerificationException
110 {
111 return verifier.loadFile( verifier.getBasedir(), verifier.getLogFileName(), false );
112 }
113
114 public List<String> loadFile( File file, Charset charset )
115 {
116
117 try
118 {
119 return FileUtils.readLines( file, charset.name() );
120 }
121 catch ( IOException e )
122 {
123 throw new SurefireVerifierException( e );
124 }
125 }
126
127 public String getBasedir()
128 {
129 return verifier.getBasedir();
130 }
131
132
133
134
135
136
137
138 public File getSubFile( String path )
139 {
140 return new File( getBasedir(), path );
141 }
142
143 public OutputValidator assertTestSuiteResults( int total, int errors, int failures, int skipped )
144 {
145 HelperAssertions.assertTestSuiteResults( total, errors, failures, skipped, baseDir );
146 return this;
147 }
148
149 public OutputValidator assertTestSuiteResults( int total, int errors, int failures, int skipped, int flakes )
150 {
151 HelperAssertions.assertTestSuiteResults( total, errors, failures, skipped, flakes, baseDir );
152 return this;
153 }
154
155 public OutputValidator assertTestSuiteResults( int total )
156 {
157 HelperAssertions.assertTestSuiteResults( total, baseDir );
158 return this;
159 }
160
161 public OutputValidator assertIntegrationTestSuiteResults( int total, int errors, int failures, int skipped )
162 {
163 HelperAssertions.assertIntegrationTestSuiteResults( total, errors, failures, skipped, baseDir );
164 return this;
165 }
166
167 public OutputValidator assertIntegrationTestSuiteResults( int total )
168 {
169 HelperAssertions.assertIntegrationTestSuiteResults( total, baseDir );
170 return this;
171 }
172
173 public TestFile getTargetFile( String modulePath, String fileName )
174 {
175 File targetDir = getSubFile( modulePath + "/target" );
176 return new TestFile( new File( targetDir, fileName ), this );
177 }
178
179 public TestFile getTargetFile( String fileName )
180 {
181 File targetDir = getSubFile( "target" );
182 return new TestFile( new File( targetDir, fileName ), this );
183 }
184
185 public TestFile getSurefireReportsFile( String fileName )
186 {
187 File targetDir = getSubFile( "target/surefire-reports" );
188 return new TestFile( new File( targetDir, fileName ), this );
189 }
190
191 public TestFile getSurefireReportsXmlFile( String fileName )
192 {
193 File targetDir = getSubFile( "target/surefire-reports" );
194 return new TestFile( new File( targetDir, fileName ), Charset.forName("UTF-8"), this );
195 }
196
197 public TestFile getSiteFile( String fileName )
198 {
199 File targetDir = getSubFile( "target/site" );
200 return new TestFile( new File( targetDir, fileName ), this );
201 }
202
203 public File getBaseDir()
204 {
205 return baseDir;
206 }
207
208 public boolean stringsAppearInSpecificOrderInLog( String[] strings )
209 throws VerificationException
210 {
211 int i = 0;
212 for ( String line : loadLogLines() )
213 {
214 if ( line.startsWith( strings[i] ) )
215 {
216 if ( i == strings.length - 1 )
217 {
218 return true;
219 }
220 ++i;
221 }
222 }
223 return false;
224 }
225 }