Home | History | Annotate | Download | only in expectations
      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         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 
     76 bool 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 
     90 Platform 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 
    134 bool 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 
    146 Configuration GetCurrentConfiguration() {
    147 #if NDEBUG
    148   return CONFIGURATION_RELEASE;
    149 #else
    150   return CONFIGURATION_DEBUG;
    151 #endif
    152 }
    153 
    154 Expectation::Expectation()
    155     : configuration(CONFIGURATION_UNSPECIFIED),
    156       result(RESULT_PASS) {
    157 }
    158 
    159 Expectation::~Expectation() {}
    160 
    161 }  // namespace test_expectations
    162