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