1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "media/cast/test/utility/input_helper.h" 6 7 #include <stdlib.h> 8 #include <cstdio> 9 10 #include "base/logging.h" 11 #include "base/strings/string_number_conversions.h" 12 13 namespace media { 14 namespace cast { 15 namespace test { 16 17 InputBuilder::InputBuilder(const std::string& title, 18 const std::string& default_value, 19 int low_range, 20 int high_range) 21 : title_(title), 22 default_value_(default_value), 23 low_range_(low_range), 24 high_range_(high_range) {} 25 26 InputBuilder::~InputBuilder() {} 27 28 std::string InputBuilder::GetStringInput() const { 29 printf("\n%s\n", title_.c_str()); 30 if (!default_value_.empty()) 31 printf("Hit enter for default (%s):\n", default_value_.c_str()); 32 33 printf("# "); 34 fflush(stdout); 35 char raw_input[128]; 36 if (!fgets(raw_input, 128, stdin)) { 37 NOTREACHED(); 38 return std::string(); 39 } 40 41 std::string input = raw_input; 42 input = input.substr(0, input.size() - 1); // Strip last \n. 43 if (input.empty() && !default_value_.empty()) 44 return default_value_; 45 46 if (!ValidateInput(input)) { 47 printf("Invalid input. Please try again.\n"); 48 return GetStringInput(); 49 } 50 return input; 51 } 52 53 int InputBuilder::GetIntInput() const { 54 std::string string_input = GetStringInput(); 55 int int_value; 56 CHECK(base::StringToInt(string_input, &int_value)); 57 return int_value; 58 } 59 60 bool InputBuilder::ValidateInput(const std::string input) const { 61 // Check for a valid range. 62 if (low_range_ == INT_MIN && high_range_ == INT_MAX) return true; 63 int value; 64 if (!base::StringToInt(input, &value)) 65 return false; 66 return value >= low_range_ && value <= high_range_; 67 } 68 69 } // namespace test 70 } // namespace cast 71 } // namespace media 72