12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/test/expectations/expectation.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/win/windows_version.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_MACOSX) && !defined(OS_IOS) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/mac/mac_util.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_LINUX) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/sys_info.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace test_expectations { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ResultFromString(const base::StringPiece& result, Result* out_result) { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (result == "Failure") 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *out_result = RESULT_FAILURE; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (result == "Timeout") 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *out_result = RESULT_TIMEOUT; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (result == "Crash") 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *out_result = RESULT_CRASH; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (result == "Skip") 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *out_result = RESULT_SKIP; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (result == "Pass") 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *out_result = RESULT_PASS; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static bool IsValidPlatform(const Platform* platform) { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& name = platform->name; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& variant = platform->variant; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (name == "Win") { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (variant != "" && 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) variant != "XP" && 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) variant != "Vista" && 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) variant != "7" && 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) variant != "8") { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (name == "Mac") { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (variant != "" && 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) variant != "10.6" && 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) variant != "10.7" && 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) variant != "10.8" && 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) variant != "10.9" && 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) variant != "10.10") { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (name == "Linux") { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (variant != "" && 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) variant != "32" && 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) variant != "64") { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (name == "ChromeOS") { 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(rsesek): Figure out what ChromeOS needs. 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (name == "iOS") { 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(rsesek): Figure out what iOS needs. Probably Device and Simulator. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (name == "Android") { 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(rsesek): Figure out what Android needs. 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool PlatformFromString(const base::StringPiece& modifier, 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Platform* out_platform) { 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t sep = modifier.find('-'); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (sep == std::string::npos) { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) out_platform->name = modifier.as_string(); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) out_platform->variant.clear(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) out_platform->name = modifier.substr(0, sep).as_string(); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) out_platform->variant = modifier.substr(sep + 1).as_string(); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsValidPlatform(out_platform); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Platform GetCurrentPlatform() { 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Platform platform; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.name = "Win"; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::win::Version version = base::win::GetVersion(); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (version == base::win::VERSION_XP) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.variant = "XP"; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (version == base::win::VERSION_VISTA) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.variant = "Vista"; 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (version == base::win::VERSION_WIN7) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.variant = "7"; 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (version == base::win::VERSION_WIN8) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.variant = "8"; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_IOS) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.name = "iOS"; 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_MACOSX) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.name = "Mac"; 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::mac::IsOSSnowLeopard()) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.variant = "10.6"; 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (base::mac::IsOSLion()) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.variant = "10.7"; 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (base::mac::IsOSMountainLion()) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.variant = "10.8"; 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) else if (base::mac::IsOSMavericks()) 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) platform.variant = "10.9"; 115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) else if (base::mac::IsOSYosemite()) 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) platform.variant = "10.10"; 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_CHROMEOS) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.name = "ChromeOS"; 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_ANDROID) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.name = "Android"; 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_LINUX) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.name = "Linux"; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string arch = base::SysInfo::OperatingSystemArchitecture(); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (arch == "x86") 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.variant = "32"; 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (arch == "x86_64") 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) platform.variant = "64"; 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return platform; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ConfigurationFromString(const base::StringPiece& modifier, 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Configuration* out_configuration) { 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (modifier == "Debug") 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *out_configuration = CONFIGURATION_DEBUG; 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (modifier == "Release") 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *out_configuration = CONFIGURATION_RELEASE; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Configuration GetCurrentConfiguration() { 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if NDEBUG 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CONFIGURATION_RELEASE; 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CONFIGURATION_DEBUG; 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Expectation::Expectation() 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : configuration(CONFIGURATION_UNSPECIFIED), 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) result(RESULT_PASS) { 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Expectation::~Expectation() {} 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace test_expectations 162