1// Copyright 2010 The Kyua Authors. 2// All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions are 6// met: 7// 8// * Redistributions of source code must retain the above copyright 9// notice, this list of conditions and the following disclaimer. 10// * Redistributions in binary form must reproduce the above copyright 11// notice, this list of conditions and the following disclaimer in the 12// documentation and/or other materials provided with the distribution. 13// * Neither the name of Google Inc. nor the names of its contributors 14// may be used to endorse or promote products derived from this software 15// without specific prior written permission. 16// 17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29#include "utils/cmdline/ui_mock.hpp" 30 31#include <iostream> 32 33#include "utils/optional.ipp" 34 35using utils::cmdline::ui_mock; 36using utils::none; 37using utils::optional; 38 39 40/// Constructs a new mock UI. 41/// 42/// \param screen_width_ The width of the screen to use for testing purposes. 43/// Defaults to 0 to prevent uncontrolled wrapping on our tests. 44ui_mock::ui_mock(const std::size_t screen_width_) : 45 _screen_width(screen_width_) 46{ 47} 48 49 50/// Writes a line to stderr and records it for further inspection. 51/// 52/// \param message The line to print and record, without the trailing newline 53/// character. 54/// \param newline Whether to append a newline to the message or not. 55void 56ui_mock::err(const std::string& message, const bool newline) 57{ 58 if (newline) 59 std::cerr << message << "\n"; 60 else { 61 std::cerr << message << "\n"; 62 std::cerr.flush(); 63 } 64 _err_log.push_back(message); 65} 66 67 68/// Writes a line to stdout and records it for further inspection. 69/// 70/// \param message The line to print and record, without the trailing newline 71/// character. 72/// \param newline Whether to append a newline to the message or not. 73void 74ui_mock::out(const std::string& message, const bool newline) 75{ 76 if (newline) 77 std::cout << message << "\n"; 78 else { 79 std::cout << message << "\n"; 80 std::cout.flush(); 81 } 82 _out_log.push_back(message); 83} 84 85 86/// Queries the width of the screen. 87/// 88/// \return Always none, as we do not want to depend on line wrapping in our 89/// tests. 90optional< std::size_t > 91ui_mock::screen_width(void) const 92{ 93 return _screen_width > 0 ? optional< std::size_t >(_screen_width) : none; 94} 95 96 97/// Gets all the lines written to stderr. 98/// 99/// \return The printed lines. 100const std::vector< std::string >& 101ui_mock::err_log(void) const 102{ 103 return _err_log; 104} 105 106 107/// Gets all the lines written to stdout. 108/// 109/// \return The printed lines. 110const std::vector< std::string >& 111ui_mock::out_log(void) const 112{ 113 return _out_log; 114} 115