diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/util/io/RecordingOutErr.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/util/io/RecordingOutErr.java | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/util/io/RecordingOutErr.java b/src/main/java/com/google/devtools/build/lib/util/io/RecordingOutErr.java new file mode 100644 index 0000000000..d276afc1a6 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/util/io/RecordingOutErr.java @@ -0,0 +1,91 @@ +// Copyright 2014 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.util.io; + +import java.io.ByteArrayOutputStream; +import java.io.UnsupportedEncodingException; + +/** + * An implementation of {@link OutErr} that captures all out / err output and + * makes it available as ISO-8859-1 strings. Useful for implementing test + * cases that assert particular output. + */ +public class RecordingOutErr extends OutErr { + + public RecordingOutErr() { + super(new ByteArrayOutputStream(), new ByteArrayOutputStream()); + } + + public RecordingOutErr(ByteArrayOutputStream out, ByteArrayOutputStream err) { + super(out, err); + } + + /** + * Reset the captured content; that is, reset the out / err buffers. + */ + public void reset() { + getOutputStream().reset(); + getErrorStream().reset(); + } + + /** + * Interprets the captured out content as an {@code ISO-8859-1} encoded + * string. + */ + public String outAsLatin1() { + try { + return getOutputStream().toString("ISO-8859-1"); + } catch (UnsupportedEncodingException e) { + throw new AssertionError(e); + } + } + + /** + * Interprets the captured err content as an {@code ISO-8859-1} encoded + * string. + */ + public String errAsLatin1() { + try { + return getErrorStream().toString("ISO-8859-1"); + } catch (UnsupportedEncodingException e) { + throw new AssertionError(e); + } + } + + /** + * Returns true if any output was recorded. + */ + public boolean hasRecordedOutput() { + return getOutputStream().size() > 0 || getErrorStream().size() > 0; + } + + @Override + public String toString() { + String out = outAsLatin1(); + String err = errAsLatin1(); + return "" + ((out.length() > 0) ? ("stdout: " + out + "\n") : "") + + ((err.length() > 0) ? ("stderr: " + err) : ""); + } + + @Override + public ByteArrayOutputStream getOutputStream() { + return (ByteArrayOutputStream) super.getOutputStream(); + } + + @Override + public ByteArrayOutputStream getErrorStream() { + return (ByteArrayOutputStream) super.getErrorStream(); + } + +} |