// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "media/cast/test/utility/input_builder.h" #include <stdlib.h> #include <cstdio> #include "base/command_line.h" #include "base/logging.h" #include "base/strings/string_number_conversions.h" namespace media { namespace cast { namespace test { static const char kEnablePromptsSwitch[] = "enable-prompts"; InputBuilder::InputBuilder(const std::string& title, const std::string& default_value, int low_range, int high_range) : title_(title), default_value_(default_value), low_range_(low_range), high_range_(high_range) {} InputBuilder::~InputBuilder() {} std::string InputBuilder::GetStringInput() const { if (!CommandLine::ForCurrentProcess()->HasSwitch(kEnablePromptsSwitch)) return default_value_; printf("\n%s\n", title_.c_str()); if (!default_value_.empty()) printf("Hit enter for default (%s):\n", default_value_.c_str()); printf("# "); fflush(stdout); char raw_input[128]; if (!fgets(raw_input, 128, stdin)) { NOTREACHED(); return std::string(); } std::string input = raw_input; input = input.substr(0, input.size() - 1); // Strip last \n. if (input.empty() && !default_value_.empty()) return default_value_; if (!ValidateInput(input)) { printf("Invalid input. Please try again.\n"); return GetStringInput(); } return input; } int InputBuilder::GetIntInput() const { std::string string_input = GetStringInput(); int int_value; CHECK(base::StringToInt(string_input, &int_value)); return int_value; } bool InputBuilder::ValidateInput(const std::string input) const { // Check for a valid range. if (low_range_ == INT_MIN && high_range_ == INT_MAX) return true; int value; if (!base::StringToInt(input, &value)) return false; return value >= low_range_ && value <= high_range_; } } // namespace test } // namespace cast } // namespace media