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 19 bool 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 36 static 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 return false; 55 } 56 } else if (name == "Linux") { 57 if (variant != "" && 58 variant != "32" && 59 variant != "64") { 60 return false; 61 } 62 } else if (name == "ChromeOS") { 63 // TODO(rsesek): Figure out what ChromeOS needs. 64 } else if (name == "iOS") { 65 // TODO(rsesek): Figure out what iOS needs. Probably Device and Simulator. 66 } else if (name == "Android") { 67 // TODO(rsesek): Figure out what Android needs. 68 } else { 69 return false; 70 } 71 72 return true; 73 } 74 75 bool PlatformFromString(const base::StringPiece& modifier, 76 Platform* out_platform) { 77 size_t sep = modifier.find('-'); 78 if (sep == std::string::npos) { 79 out_platform->name = modifier.as_string(); 80 out_platform->variant.clear(); 81 } else { 82 out_platform->name = modifier.substr(0, sep).as_string(); 83 out_platform->variant = modifier.substr(sep + 1).as_string(); 84 } 85 86 return IsValidPlatform(out_platform); 87 } 88 89 Platform GetCurrentPlatform() { 90 Platform platform; 91 #if defined(OS_WIN) 92 platform.name = "Win"; 93 base::win::Version version = base::win::GetVersion(); 94 if (version == base::win::VERSION_XP) 95 platform.variant = "XP"; 96 else if (version == base::win::VERSION_VISTA) 97 platform.variant = "Vista"; 98 else if (version == base::win::VERSION_WIN7) 99 platform.variant = "7"; 100 else if (version == base::win::VERSION_WIN8) 101 platform.variant = "8"; 102 #elif defined(OS_IOS) 103 platform.name = "iOS"; 104 #elif defined(OS_MACOSX) 105 platform.name = "Mac"; 106 if (base::mac::IsOSSnowLeopard()) 107 platform.variant = "10.6"; 108 else if (base::mac::IsOSLion()) 109 platform.variant = "10.7"; 110 else if (base::mac::IsOSMountainLion()) 111 platform.variant = "10.8"; 112 else if (base::mac::IsOSMavericks()) 113 platform.variant = "10.9"; 114 #elif defined(OS_CHROMEOS) 115 platform.name = "ChromeOS"; 116 #elif defined(OS_ANDROID) 117 platform.name = "Android"; 118 #elif defined(OS_LINUX) 119 platform.name = "Linux"; 120 std::string arch = base::SysInfo::OperatingSystemArchitecture(); 121 if (arch == "x86") 122 platform.variant = "32"; 123 else if (arch == "x86_64") 124 platform.variant = "64"; 125 #else 126 NOTREACHED(); 127 #endif 128 return platform; 129 } 130 131 bool ConfigurationFromString(const base::StringPiece& modifier, 132 Configuration* out_configuration) { 133 if (modifier == "Debug") 134 *out_configuration = CONFIGURATION_DEBUG; 135 else if (modifier == "Release") 136 *out_configuration = CONFIGURATION_RELEASE; 137 else 138 return false; 139 140 return true; 141 } 142 143 Configuration GetCurrentConfiguration() { 144 #if NDEBUG 145 return CONFIGURATION_RELEASE; 146 #else 147 return CONFIGURATION_DEBUG; 148 #endif 149 NOTREACHED(); 150 return CONFIGURATION_UNSPECIFIED; 151 } 152 153 Expectation::Expectation() 154 : configuration(CONFIGURATION_UNSPECIFIED), 155 result(RESULT_PASS) { 156 } 157 158 Expectation::~Expectation() {} 159 160 } // namespace test_expectations 161