// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef FLUTTER_TESTING_STREAM_CAPTURE_H_ #define FLUTTER_TESTING_STREAM_CAPTURE_H_ #include #include #include namespace flutter { namespace testing { // Temporarily replaces the specified stream's output buffer to capture output. // // Example: // StreamCapture captured_stdout(&std::cout); // ... code that writest to std::cout ... // std::string output = captured_stdout.GetCapturedOutput(); class StreamCapture { public: // Begins capturing output to the specified stream. explicit StreamCapture(std::ostream* ostream); // Stops capturing output to the specified stream, and restores the original // output buffer, if |Stop| has not already been called. ~StreamCapture(); // Stops capturing output to the specified stream, and restores the original // output buffer. void Stop(); // Returns any output written to the captured stream between construction and // the first call to |Stop|, if any, or now. std::string GetOutput() const; private: std::ostream* ostream_; std::stringstream buffer_; std::streambuf* old_buffer_; }; } // namespace testing } // namespace flutter #endif // FLUTTER_TESTING_STREAM_CAPTURE_H_