1 // Copyright (c) 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 "base/test/expectations/expectation.h" 6 7 #include "base/logging.h" 8 9 #if defined(OS_WIN) 10 #include "base/win/windows_version.h" 11 #elif defined(OS_MACOSX) && !defined(OS_IOS) 12 #include "base/mac/mac_util.h" 13 #elif defined(OS_LINUX) 14 #include "base/sys_info.h" 15 #endif 16 17 namespace test_expectations { 18 ResultFromString(const base::StringPiece & result,Result * out_result)19bool ResultFromString(const base::StringPiece& result, Result* out_result) { 20 if (result == "Failure") 21 *out_result = RESULT_FAILURE; 22 else if (result == "Timeout") 23 *out_result = RESULT_TIMEOUT; 24 else if (result == "Crash") 25 *out_result = RESULT_CRASH; 26 else if (result == "Skip") 27 *out_result = RESULT_SKIP; 28 else if (result == "Pass") 29 *out_result = RESULT_PASS; 30 else 31 return false; 32 33 return true; 34 } 35 IsValidPlatform(const Platform * platform)36static bool IsValidPlatform(const Platform* platform) { 37 const std::string& name = platform->name; 38 const std::string& variant = platform->variant; 39 40 if (name == "Win") { 41 if (variant != "" && 42 variant != "XP" && 43 variant != "Vista" && 44 variant != "7" && 45 variant != "8") { 46 return false; 47 } 48 } else if (name == "Mac") { 49 if (variant != "" && 50 variant != "10.6" && 51 variant != "10.7" && 52 variant != "10.8" && 53 variant != "10.9" && 54 variant != "10.10") { 55 return false; 56 } 57 } else if (name == "Linux") { 58 if (variant != "" && 59 variant != "32" && 60 variant != "64") { 61 return false; 62 } 63 } else if (name == "ChromeOS") { 64 // TODO(rsesek): Figure out what ChromeOS needs. 65 } else if (name == "iOS") { 66 // TODO(rsesek): Figure out what iOS needs. Probably Device and Simulator. 67 } else if (name == "Android") { 68 // TODO(rsesek): Figure out what Android needs. 69 } else { 70 return false; 71 } 72 73 return true; 74 } 75 PlatformFromString(const base::StringPiece & modifier,Platform * out_platform)76bool PlatformFromString(const base::StringPiece& modifier, 77 Platform* out_platform) { 78 size_t sep = modifier.find('-'); 79 if (sep == std::string::npos) { 80 out_platform->name = modifier.as_string(); 81 out_platform->variant.clear(); 82 } else { 83 out_platform->name = modifier.substr(0, sep).as_string(); 84 out_platform->variant = modifier.substr(sep + 1).as_string(); 85 } 86 87 return IsValidPlatform(out_platform); 88 } 89 GetCurrentPlatform()90Platform GetCurrentPlatform() { 91 Platform platform; 92 #if defined(OS_WIN) 93 platform.name = "Win"; 94 base::win::Version version = base::win::GetVersion(); 95 if (version == base::win::VERSION_XP) 96 platform.variant = "XP"; 97 else if (version == base::win::VERSION_VISTA) 98 platform.variant = "Vista"; 99 else if (version == base::win::VERSION_WIN7) 100 platform.variant = "7"; 101 else if (version == base::win::VERSION_WIN8) 102 platform.variant = "8"; 103 #elif defined(OS_IOS) 104 platform.name = "iOS"; 105 #elif defined(OS_MACOSX) 106 platform.name = "Mac"; 107 if (base::mac::IsOSSnowLeopard()) 108 platform.variant = "10.6"; 109 else if (base::mac::IsOSLion()) 110 platform.variant = "10.7"; 111 else if (base::mac::IsOSMountainLion()) 112 platform.variant = "10.8"; 113 else if (base::mac::IsOSMavericks()) 114 platform.variant = "10.9"; 115 else if (base::mac::IsOSYosemite()) 116 platform.variant = "10.10"; 117 #elif defined(OS_CHROMEOS) 118 platform.name = "ChromeOS"; 119 #elif defined(OS_ANDROID) 120 platform.name = "Android"; 121 #elif defined(OS_LINUX) 122 platform.name = "Linux"; 123 std::string arch = base::SysInfo::OperatingSystemArchitecture(); 124 if (arch == "x86") 125 platform.variant = "32"; 126 else if (arch == "x86_64") 127 platform.variant = "64"; 128 #else 129 NOTREACHED(); 130 #endif 131 return platform; 132 } 133 ConfigurationFromString(const base::StringPiece & modifier,Configuration * out_configuration)134bool ConfigurationFromString(const base::StringPiece& modifier, 135 Configuration* out_configuration) { 136 if (modifier == "Debug") 137 *out_configuration = CONFIGURATION_DEBUG; 138 else if (modifier == "Release") 139 *out_configuration = CONFIGURATION_RELEASE; 140 else 141 return false; 142 143 return true; 144 } 145 GetCurrentConfiguration()146Configuration GetCurrentConfiguration() { 147 #if NDEBUG 148 return CONFIGURATION_RELEASE; 149 #else 150 return CONFIGURATION_DEBUG; 151 #endif 152 } 153 Expectation()154Expectation::Expectation() 155 : configuration(CONFIGURATION_UNSPECIFIED), 156 result(RESULT_PASS) { 157 } 158 ~Expectation()159Expectation::~Expectation() {} 160 161 } // namespace test_expectations 162