1/*
2 * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/*
25 * @test
26 * @summary Test the OutputAnalyzer utility class
27 * @library /test/lib
28 * @modules java.base/jdk.internal.misc
29 *          java.management
30 */
31
32import jdk.test.lib.process.OutputAnalyzer;
33
34public class OutputAnalyzerTest {
35
36  public static void main(String args[]) throws Exception {
37
38    String stdout = "aaaaaa";
39    String stderr = "bbbbbb";
40
41    // Regexps used for testing pattern matching of the test input
42    String stdoutPattern = "[a]";
43    String stderrPattern = "[b]";
44    String nonExistingPattern = "[c]";
45
46    OutputAnalyzer output = new OutputAnalyzer(stdout, stderr);
47
48    if (!stdout.equals(output.getStdout())) {
49      throw new Exception("getStdout() returned '" + output.getStdout() + "', expected '" + stdout + "'");
50    }
51
52    if (!stderr.equals(output.getStderr())) {
53      throw new Exception("getStderr() returned '" + output.getStderr() + "', expected '" + stderr + "'");
54    }
55
56    try {
57      output.shouldContain(stdout);
58      output.stdoutShouldContain(stdout);
59      output.shouldContain(stderr);
60      output.stderrShouldContain(stderr);
61    } catch (RuntimeException e) {
62      throw new Exception("shouldContain() failed", e);
63    }
64
65    try {
66      output.shouldContain("cccc");
67      throw new Exception("shouldContain() failed to throw exception");
68    } catch (RuntimeException e) {
69      // expected
70    }
71
72    try {
73      output.stdoutShouldContain(stderr);
74      throw new Exception("stdoutShouldContain() failed to throw exception");
75    } catch (RuntimeException e) {
76      // expected
77    }
78
79    try {
80      output.stderrShouldContain(stdout);
81      throw new Exception("stdoutShouldContain() failed to throw exception");
82    } catch (RuntimeException e) {
83      // expected
84    }
85
86    try {
87      output.shouldNotContain("cccc");
88      output.stdoutShouldNotContain("cccc");
89      output.stderrShouldNotContain("cccc");
90    } catch (RuntimeException e) {
91      throw new Exception("shouldNotContain() failed", e);
92    }
93
94    try {
95      output.shouldNotContain(stdout);
96      throw new Exception("shouldContain() failed to throw exception");
97    } catch (RuntimeException e) {
98      // expected
99    }
100
101    try {
102      output.stdoutShouldNotContain(stdout);
103      throw new Exception("shouldContain() failed to throw exception");
104    } catch (RuntimeException e) {
105      // expected
106    }
107
108    try {
109        output.stderrShouldNotContain(stderr);
110        throw new Exception("shouldContain() failed to throw exception");
111    } catch (RuntimeException e) {
112        // expected
113    }
114
115    // Should match
116    try {
117        output.shouldMatch(stdoutPattern);
118        output.stdoutShouldMatch(stdoutPattern);
119        output.shouldMatch(stderrPattern);
120        output.stderrShouldMatch(stderrPattern);
121    } catch (RuntimeException e) {
122        throw new Exception("shouldMatch() failed", e);
123    }
124
125    try {
126        output.shouldMatch(nonExistingPattern);
127        throw new Exception("shouldMatch() failed to throw exception");
128    } catch (RuntimeException e) {
129        // expected
130    }
131
132    try {
133        output.stdoutShouldMatch(stderrPattern);
134        throw new Exception(
135                "stdoutShouldMatch() failed to throw exception");
136    } catch (RuntimeException e) {
137        // expected
138    }
139
140    try {
141        output.stderrShouldMatch(stdoutPattern);
142        throw new Exception(
143                "stderrShouldMatch() failed to throw exception");
144    } catch (RuntimeException e) {
145        // expected
146    }
147
148    // Should not match
149    try {
150        output.shouldNotMatch(nonExistingPattern);
151        output.stdoutShouldNotMatch(nonExistingPattern);
152        output.stderrShouldNotMatch(nonExistingPattern);
153    } catch (RuntimeException e) {
154        throw new Exception("shouldNotMatch() failed", e);
155    }
156
157    try {
158        output.shouldNotMatch(stdoutPattern);
159        throw new Exception("shouldNotMatch() failed to throw exception");
160    } catch (RuntimeException e) {
161        // expected
162    }
163
164    try {
165        output.stdoutShouldNotMatch(stdoutPattern);
166        throw new Exception("shouldNotMatch() failed to throw exception");
167    } catch (RuntimeException e) {
168        // expected
169    }
170
171    try {
172        output.stderrShouldNotMatch(stderrPattern);
173        throw new Exception("shouldNotMatch() failed to throw exception");
174    } catch (RuntimeException e) {
175        // expected
176    }
177
178    {
179      String aaaa = "aaaa";
180      String result = output.firstMatch(aaaa);
181      if (!aaaa.equals(result)) {
182        throw new Exception("firstMatch(String) faild to match. Expected: " + aaaa + " got: " + result);
183      }
184    }
185
186    {
187      String aa = "aa";
188      String aa_grouped_aa = aa + "(" + aa + ")";
189      String result = output.firstMatch(aa_grouped_aa, 1);
190      if (!aa.equals(result)) {
191        throw new Exception("firstMatch(String, int) failed to match. Expected: " + aa + " got: " + result);
192      }
193    }
194  }
195}
196