/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.ignite.internal.util.test;
import java.io.PrintStream;
/**
* Factory that allow to acquire/release Print Stream for test logging.
*/
public final class GridTestPrintStreamFactory {
/** */
private static final PrintStream sysOut = System.out;
/** */
private static final PrintStream sysErr = System.err;
/** */
private static GridTestPrintStream testOut;
/** */
private static GridTestPrintStream testErr;
/** */
private static long outCnt = 0;
/** */
private static long errCnt = 0;
/**
* Enforces singleton.
*/
private GridTestPrintStreamFactory() {
// No-op.
}
/**
* Gets original standard out.
*
* @return Original standard out.
*/
public static synchronized PrintStream getStdOut() {
return sysOut;
}
/**
* Gets original standard error.
*
* @return Original standard error.
*/
public static synchronized PrintStream getStdErr() {
return sysErr;
}
/**
* Acquires output stream for logging tests.
*
* @return Junit out print stream.
*/
public static synchronized GridTestPrintStream acquireOut() {
// Lazy initialization is required here to ensure that parent
// thread group is picked off correctly by implementation.
if (testOut == null)
testOut = new GridTestPrintStream(sysOut);
if (outCnt == 0)
System.setOut(testOut);
outCnt++;
return testOut;
}
/**
* Acquires output stream for logging errors in tests.
*
* @return Junit error print stream.
*/
public static synchronized GridTestPrintStream acquireErr() {
// Lazy initialization is required here to ensure that parent
// thread group is picked off correctly by implementation.
if (testErr == null)
testErr = new GridTestPrintStream(sysErr);
if (errCnt == 0)
System.setErr(testErr);
errCnt++;
return testErr;
}
/**
* Releases standard out. If there are no more acquired standard outs,
* then it is reset to its original value.
*/
public static synchronized void releaseOut() {
outCnt--;
if (outCnt == 0)
System.setOut(sysOut);
}
/**
* Releases standard error. If there are no more acquired standard errors,
* then it is reset to its original value.
*/
public static synchronized void releaseErr() {
errCnt--;
if (errCnt == 0)
System.setErr(sysErr);
}
}