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 35 using utils::cmdline::ui_mock; 36 using utils::none; 37 using 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. 44 ui_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. 55 void 56 ui_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. 73 void 74 ui_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. 90 optional< std::size_t > 91 ui_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. 100 const std::vector< std::string >& 101 ui_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. 110 const std::vector< std::string >& 111 ui_mock::out_log(void) const 112 { 113 return _out_log; 114 } 115