BDE 4.14.0 Production release
|
#include <bsls_outputredirector.h>
Public Types | |
enum | Stream { e_STDOUT_STREAM , e_STDERR_STREAM } |
Public Member Functions | |
OutputRedirector (Stream which, bool verbose=false, bool veryVerbose=false) | |
~OutputRedirector () | |
void | disable () |
void | enable () |
bool | load () |
void | clear () |
int | compare (const char *expected, size_t expectedLength) const |
int | compare (const char *expected) const |
const char * | getOutput () const |
Return the address of the scratch buffer. | |
bool | isOutputReady () const |
bool | isRedirecting () const |
FILE * | nonRedirectedStream () const |
size_t | outputSize () const |
Return the number of bytes currently loaded into the scratch buffer. | |
FILE * | redirectedStream () const |
OutputRedirector::Stream | redirectedStreamId () const |
Static Public Attributes | |
static const size_t | k_OUTPUT_REDIRECTOR_BUFFER_SIZE = 4096 |
static const size_t | k_PATH_BUFFER_SIZE = PATH_MAX + 1 |
The size of the buffer used to hold a file name. | |
This class provides a facility for redirecting stdout
and stderr
to temporary files, retrieving output from the respective temporary file and comparing the output to user-supplied character buffers. An OutputRedirector
object can be in an un-redirected state or a redirected state. If the redirector is in a redirected state, it will redirect either stdout
or stderr
, but not both simultaneously. An OutputRedirector
object has the concept of a scratch buffer, where output captured from the process' stdout
or stderr
stream is stored when the OutputRedirector
object is in the redirected state. Throughout this class, the term "captured output" refers to data that has been written to the stdout
or stderr
stream and is waiting to be loaded into the scratch buffer. Each time the load
method is called, the scratch buffer is truncated, and the captured output is moved into the scratch buffer. When this is done, there is no longer any captured output.
|
explicit |
Create an OutputRedirector
in an un-redirected state, and with an empty scratch buffer. Upon a call to enable
, this redirector will be responsible for redirecting the stream associated with the specified which
to a temporary file. The behavior is undefined unless which
is equal to OutputRedirector::e_STDOUT_STREAM
or OutputRedirector::e_STDERR_STREAM
.
bsls::OutputRedirector::~OutputRedirector | ( | ) |
Destroy this OutputRedirector
object. If the object is in a redirected state, the original stream will be restored to its initial target and the temporary file to which the stream was redirected will be deleted.
void bsls::OutputRedirector::clear | ( | ) |
Reset the scratch buffer to empty. The behavior is undefined unless enable
has been previously called successfully (after the latest call to disable
if disable
has been called successfully).
int bsls::OutputRedirector::compare | ( | const char * | expected | ) | const |
Compare the character buffer pointed to by the specified pointer expected
with any output that has been loaded into the scratch buffer. The expected
buffer is assumed to be a NTBS, and its length is taken to be the string length of the NTBS. Return 0 if the expected
buffer has the same length and contents as the scratch buffer, and non-zero otherwise. The behavior is undefined unless enable
has previously been called successfully.
int bsls::OutputRedirector::compare | ( | const char * | expected, |
size_t | expectedLength | ||
) | const |
Compare the character buffer pointed to by the specified pointer expected
with any output that has been loaded into the scratch buffer. The length of the expected
buffer is supplied in the specified expectedLength
. Return 0 if the expected
buffer has the same length and contents as the scratch buffer, and non-zero otherwise. Note that the expected
buffer is allowed to contain embedded nulls. The behavior is undefined unless enable
has previously been called successfully.
void bsls::OutputRedirector::disable | ( | ) |
If the redirector is in a redirected state, restore the original target of the redirected stream and close the temporary buffer. If the redirector is not in a redirected state, this method is a no-op. Calling this method invalidates all output in the temporary file, so a call to load
after the next successful enable
call will not load any output that was previously written to the file. This method does not clear the scratch buffer, so one may call load
before calling disable
, and the contents will be available after disable
is called. If disable
fails to disable the redirection, it will end the program by calling std::abort
.
void bsls::OutputRedirector::enable | ( | ) |
If the Stream
specified at construction was e_STDOUT_STREAM
, redirect stdout
to a temporary file. If the Stream
specified at construction was e_STDERR_STREAM
, redirect stderr
to a temporary file. The temporary file to which the stream is redirected will be created the first time enable
is called, and will be deleted when this object is destroyed. If enable
fails to redirect either stdout
or stderr
it will end the program by calling std::abort
.
const char * bsls::OutputRedirector::getOutput | ( | ) | const |
bool bsls::OutputRedirector::isOutputReady | ( | ) | const |
Return true
if the captured output has been loaded into the scratch buffer, and false
otherwise.
bool bsls::OutputRedirector::isRedirecting | ( | ) | const |
Return true
if stdout
or stderr
has been successfully redirected, and false
otherwise.
bool bsls::OutputRedirector::load | ( | ) |
Read captured output into the scratch buffer. Return true
if all captured output was successfully loaded, and false
otherwise. Note that captured output is allowed to have zero length. The behavior is undefined unless enable
has been previously called successfully (after the latest call to disable
, if disable
has been called successfully).
FILE * bsls::OutputRedirector::nonRedirectedStream | ( | ) | const |
Return the value of the global stdout
or stderr
corresponding to the stream that is not intended to be redirected by this object.
size_t bsls::OutputRedirector::outputSize | ( | ) | const |
FILE * bsls::OutputRedirector::redirectedStream | ( | ) | const |
Return the value of the global stdout
or stderr
corresponding to the stream that is intended to be redirected by this object.
OutputRedirector::Stream bsls::OutputRedirector::redirectedStreamId | ( | ) | const |
Return OutputRedirector::e_STDOUT_STREAM
if this object is responsible for redirecting stdout
, and OutputRedirector::e_STDERR_STREAM
if this object is responsible for redirecting stderr
.
|
static |
The size of the buffer used to store the captured values loaded in the stdout
and stderr
error streams.
|
static |