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 "gpu/config/gpu_control_list.h"
6#include "testing/gtest/include/gtest/gtest.h"
7
8namespace gpu {
9
10class OsInfoTest : public testing::Test {
11 public:
12  OsInfoTest() { }
13  virtual ~OsInfoTest() { }
14
15  typedef GpuControlList::OsInfo OsInfo;
16};
17
18TEST_F(OsInfoTest, ValidOsInfo) {
19  const std::string os[] = {
20    "win",
21    "linux",
22    "macosx",
23    "chromeos",
24    "android",
25    "any"
26  };
27  const GpuControlList::OsType os_type[] = {
28    GpuControlList::kOsWin,
29    GpuControlList::kOsLinux,
30    GpuControlList::kOsMacosx,
31    GpuControlList::kOsChromeOS,
32    GpuControlList::kOsAndroid,
33    GpuControlList::kOsAny
34  };
35  for (size_t i = 0; i < arraysize(os); ++i) {
36    OsInfo info(os[i], "=", "10.6", std::string());
37    EXPECT_TRUE(info.IsValid());
38    EXPECT_EQ(os_type[i], info.type());
39  }
40  {
41    OsInfo info("any", "any", std::string(), std::string());
42    EXPECT_TRUE(info.IsValid());
43  }
44}
45
46TEST_F(OsInfoTest, InvalidOsInfo) {
47  const std::string os[] = {
48    "win",
49    "linux",
50    "macosx",
51    "chromeos",
52    "android",
53    "any"
54  };
55  for (size_t i = 0; i < arraysize(os); ++i) {
56    {
57      OsInfo info(os[i], std::string(), std::string(), std::string());
58      EXPECT_FALSE(info.IsValid());
59    }
60    {
61      OsInfo info(os[i], "=", std::string(), std::string());
62      EXPECT_FALSE(info.IsValid());
63    }
64    {
65      OsInfo info(os[i], std::string(), "10.6", std::string());
66      EXPECT_FALSE(info.IsValid());
67    }
68  }
69  const std::string os_cap[] = {
70    "Win",
71    "Linux",
72    "MacOSX",
73    "ChromeOS",
74    "Android",
75  };
76  for (size_t i = 0; i < arraysize(os_cap); ++i) {
77    OsInfo info(os_cap[i], "=", "10.6", std::string());
78    EXPECT_FALSE(info.IsValid());
79  }
80}
81
82TEST_F(OsInfoTest, NonNumericOsVersion) {
83  {
84    OsInfo info("android", "<", "4.2", std::string());
85    EXPECT_TRUE(info.IsValid());
86    // The expectation is the version number first, then extra info.
87    EXPECT_TRUE(info.Contains(
88        GpuControlList::kOsAndroid, "4.0 bug fix version 5.2"));
89    EXPECT_FALSE(info.Contains(GpuControlList::kOsAndroid, "F"));
90    EXPECT_FALSE(info.Contains(GpuControlList::kOsAndroid, "F 4.0"));
91    EXPECT_FALSE(info.Contains(GpuControlList::kOsAndroid, std::string()));
92  }
93  {
94    OsInfo info("android", "any", std::string(), std::string());
95    EXPECT_TRUE(info.IsValid());
96    EXPECT_TRUE(info.Contains(
97        GpuControlList::kOsAndroid, "4.0 bug fix version 5.2"));
98    EXPECT_TRUE(info.Contains(GpuControlList::kOsAndroid, "F"));
99    EXPECT_TRUE(info.Contains(GpuControlList::kOsAndroid, "F 4.0"));
100    EXPECT_TRUE(info.Contains(GpuControlList::kOsAndroid, std::string()));
101  }
102}
103
104TEST_F(OsInfoTest, OsVersionZero) {
105  {
106    OsInfo info("android", "<", "4.2", std::string());
107    EXPECT_TRUE(info.IsValid());
108    // All forms of version 0 is considered invalid.
109    EXPECT_FALSE(info.Contains(GpuControlList::kOsAndroid, "0"));
110    EXPECT_FALSE(info.Contains(GpuControlList::kOsAndroid, "0.0"));
111    EXPECT_FALSE(info.Contains(GpuControlList::kOsAndroid, "0.00.0"));
112  }
113  {
114    OsInfo info("android", "any", std::string(), std::string());
115    EXPECT_TRUE(info.IsValid());
116    EXPECT_TRUE(info.Contains(GpuControlList::kOsAndroid, "0"));
117    EXPECT_TRUE(info.Contains(GpuControlList::kOsAndroid, "0.0"));
118    EXPECT_TRUE(info.Contains(GpuControlList::kOsAndroid, "0.00.0"));
119  }
120}
121
122TEST_F(OsInfoTest, OsComparison) {
123  {
124    OsInfo info("any", "any", std::string(), std::string());
125    const GpuControlList::OsType os_type[] = {
126      GpuControlList::kOsWin, GpuControlList::kOsLinux,
127      GpuControlList::kOsMacosx, GpuControlList::kOsChromeOS,
128      GpuControlList::kOsAndroid,
129    };
130    for (size_t i = 0; i < arraysize(os_type); ++i) {
131      EXPECT_TRUE(info.Contains(os_type[i], std::string()));
132      EXPECT_TRUE(info.Contains(os_type[i], "7.8"));
133    }
134  }
135  {
136    OsInfo info("win", ">=", "6", std::string());
137    EXPECT_FALSE(info.Contains(GpuControlList::kOsMacosx, "10.8.3"));
138    EXPECT_FALSE(info.Contains(GpuControlList::kOsLinux, "10"));
139    EXPECT_FALSE(info.Contains(GpuControlList::kOsChromeOS, "13"));
140    EXPECT_FALSE(info.Contains(GpuControlList::kOsAndroid, "7"));
141    EXPECT_FALSE(info.Contains(GpuControlList::kOsAny, "7"));
142    EXPECT_FALSE(info.Contains(GpuControlList::kOsWin, std::string()));
143    EXPECT_TRUE(info.Contains(GpuControlList::kOsWin, "6"));
144    EXPECT_TRUE(info.Contains(GpuControlList::kOsWin, "6.1"));
145    EXPECT_TRUE(info.Contains(GpuControlList::kOsWin, "7"));
146    EXPECT_FALSE(info.Contains(GpuControlList::kOsWin, "5"));
147  }
148}
149
150}  // namespace gpu
151
152