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 VersionInfoTest : public testing::Test { 11 public: 12 VersionInfoTest() { } 13 virtual ~VersionInfoTest() { } 14 15 typedef GpuControlList::VersionInfo VersionInfo; 16}; 17 18TEST_F(VersionInfoTest, ValidVersionInfo) { 19 const std::string op[] = { 20 "=", 21 "<", 22 "<=", 23 ">", 24 ">=", 25 "any", 26 "between" 27 }; 28 for (size_t i = 0; i < arraysize(op); ++i) { 29 std::string string1; 30 std::string string2; 31 if (op[i] != "any") 32 string1 = "8.9"; 33 if (op[i] == "between") 34 string2 = "9.0"; 35 VersionInfo info(op[i], std::string(), string1, string2); 36 EXPECT_TRUE(info.IsValid()); 37 } 38 39 const std::string style[] = { 40 "lexical", 41 "numerical", 42 "" // Default, same as "numerical" 43 }; 44 for (size_t i =0; i < arraysize(style); ++i) { 45 VersionInfo info("=", style[i], "8.9", std::string()); 46 EXPECT_TRUE(info.IsValid()); 47 if (style[i] == "lexical") 48 EXPECT_TRUE(info.IsLexical()); 49 else 50 EXPECT_FALSE(info.IsLexical()); 51 } 52 53 const std::string number[] = { 54 "10", 55 "10.9", 56 "10.0", 57 "10.0.9", 58 "0.8", 59 // Leading 0s are valid. 60 "10.09", 61 // Whitespaces are ignored. 62 " 10.9", 63 "10.9 ", 64 "10 .9", 65 "10. 9", 66 }; 67 for (size_t i =0; i < arraysize(number); ++i) { 68 VersionInfo info("=", std::string(), number[i], std::string()); 69 EXPECT_TRUE(info.IsValid()); 70 } 71} 72 73TEST_F(VersionInfoTest, InvalidVersionInfo) { 74 const std::string op[] = { 75 "=", 76 "<", 77 "<=", 78 ">", 79 ">=", 80 "any", 81 "between" 82 }; 83 for (size_t i = 0; i < arraysize(op); ++i) { 84 { 85 VersionInfo info(op[i], std::string(), "8.9", std::string()); 86 if (op[i] == "between") 87 EXPECT_FALSE(info.IsValid()); 88 else 89 EXPECT_TRUE(info.IsValid()); 90 } 91 { 92 VersionInfo info(op[i], std::string(), std::string(), std::string()); 93 if (op[i] == "any") 94 EXPECT_TRUE(info.IsValid()); 95 else 96 EXPECT_FALSE(info.IsValid()); 97 } 98 { 99 VersionInfo info(op[i], std::string(), "8.9", "9.0"); 100 EXPECT_TRUE(info.IsValid()); 101 } 102 } 103 104 const std::string number[] = { 105 "8.E", 106 "8-9", 107 }; 108 for (size_t i = 0; i < arraysize(number); ++i) { 109 VersionInfo info("=", std::string(), number[i], std::string()); 110 EXPECT_FALSE(info.IsValid()); 111 } 112} 113 114TEST_F(VersionInfoTest, VersionComparison) { 115 { 116 VersionInfo info("any", std::string(), std::string(), std::string()); 117 EXPECT_TRUE(info.Contains("0")); 118 EXPECT_TRUE(info.Contains("8.9")); 119 EXPECT_TRUE(info.Contains("100")); 120 } 121 { 122 VersionInfo info(">", std::string(), "8.9", std::string()); 123 EXPECT_FALSE(info.Contains("7")); 124 EXPECT_FALSE(info.Contains("8.9")); 125 EXPECT_FALSE(info.Contains("8.9.1")); 126 EXPECT_TRUE(info.Contains("9")); 127 } 128 { 129 VersionInfo info(">=", std::string(), "8.9", std::string()); 130 EXPECT_FALSE(info.Contains("7")); 131 EXPECT_TRUE(info.Contains("8.9")); 132 EXPECT_TRUE(info.Contains("8.9.1")); 133 EXPECT_TRUE(info.Contains("9")); 134 } 135 { 136 VersionInfo info("=", std::string(), "8.9", std::string()); 137 EXPECT_FALSE(info.Contains("7")); 138 EXPECT_TRUE(info.Contains("8")); 139 EXPECT_TRUE(info.Contains("8.9")); 140 EXPECT_TRUE(info.Contains("8.9.1")); 141 EXPECT_FALSE(info.Contains("9")); 142 } 143 { 144 VersionInfo info("<", std::string(), "8.9", std::string()); 145 EXPECT_TRUE(info.Contains("7")); 146 EXPECT_TRUE(info.Contains("8.8")); 147 EXPECT_FALSE(info.Contains("8")); 148 EXPECT_FALSE(info.Contains("8.9")); 149 EXPECT_FALSE(info.Contains("8.9.1")); 150 EXPECT_FALSE(info.Contains("9")); 151 } 152 { 153 VersionInfo info("<=", std::string(), "8.9", std::string()); 154 EXPECT_TRUE(info.Contains("7")); 155 EXPECT_TRUE(info.Contains("8.8")); 156 EXPECT_TRUE(info.Contains("8")); 157 EXPECT_TRUE(info.Contains("8.9")); 158 EXPECT_TRUE(info.Contains("8.9.1")); 159 EXPECT_FALSE(info.Contains("9")); 160 } 161 { 162 VersionInfo info("between", std::string(), "8.9", "9.1"); 163 EXPECT_FALSE(info.Contains("7")); 164 EXPECT_FALSE(info.Contains("8.8")); 165 EXPECT_TRUE(info.Contains("8")); 166 EXPECT_TRUE(info.Contains("8.9")); 167 EXPECT_TRUE(info.Contains("8.9.1")); 168 EXPECT_TRUE(info.Contains("9")); 169 EXPECT_TRUE(info.Contains("9.1")); 170 EXPECT_TRUE(info.Contains("9.1.9")); 171 EXPECT_FALSE(info.Contains("9.2")); 172 EXPECT_FALSE(info.Contains("10")); 173 } 174} 175 176TEST_F(VersionInfoTest, DateComparison) { 177 // When we use '-' as splitter, we assume a format of mm-dd-yyyy 178 // or mm-yyyy, i.e., a date. 179 { 180 VersionInfo info("=", std::string(), "1976.3.21", std::string()); 181 EXPECT_TRUE(info.Contains("3-21-1976", '-')); 182 EXPECT_TRUE(info.Contains("3-1976", '-')); 183 EXPECT_TRUE(info.Contains("03-1976", '-')); 184 EXPECT_FALSE(info.Contains("21-3-1976", '-')); 185 } 186 { 187 VersionInfo info(">", std::string(), "1976.3.21", std::string()); 188 EXPECT_TRUE(info.Contains("3-22-1976", '-')); 189 EXPECT_TRUE(info.Contains("4-1976", '-')); 190 EXPECT_TRUE(info.Contains("04-1976", '-')); 191 EXPECT_FALSE(info.Contains("3-1976", '-')); 192 EXPECT_FALSE(info.Contains("2-1976", '-')); 193 } 194 { 195 VersionInfo info("between", std::string(), "1976.3.21", "2012.12.25"); 196 EXPECT_FALSE(info.Contains("3-20-1976", '-')); 197 EXPECT_TRUE(info.Contains("3-21-1976", '-')); 198 EXPECT_TRUE(info.Contains("3-22-1976", '-')); 199 EXPECT_TRUE(info.Contains("3-1976", '-')); 200 EXPECT_TRUE(info.Contains("4-1976", '-')); 201 EXPECT_TRUE(info.Contains("1-1-2000", '-')); 202 EXPECT_TRUE(info.Contains("1-2000", '-')); 203 EXPECT_TRUE(info.Contains("2000", '-')); 204 EXPECT_TRUE(info.Contains("11-2012", '-')); 205 EXPECT_TRUE(info.Contains("12-2012", '-')); 206 EXPECT_TRUE(info.Contains("12-24-2012", '-')); 207 EXPECT_TRUE(info.Contains("12-25-2012", '-')); 208 EXPECT_FALSE(info.Contains("12-26-2012", '-')); 209 EXPECT_FALSE(info.Contains("1-2013", '-')); 210 EXPECT_FALSE(info.Contains("2013", '-')); 211 } 212} 213 214TEST_F(VersionInfoTest, LexicalComparison) { 215 // When we use lexical style, we assume a format major.minor.*. 216 // We apply numerical comparison to major, lexical comparison to others. 217 { 218 VersionInfo info("<", "lexical", "8.201", std::string()); 219 EXPECT_TRUE(info.Contains("8.001.100")); 220 EXPECT_TRUE(info.Contains("8.109")); 221 EXPECT_TRUE(info.Contains("8.10900")); 222 EXPECT_TRUE(info.Contains("8.109.100")); 223 EXPECT_TRUE(info.Contains("8.2")); 224 EXPECT_TRUE(info.Contains("8.20")); 225 EXPECT_TRUE(info.Contains("8.200")); 226 EXPECT_TRUE(info.Contains("8.20.100")); 227 EXPECT_FALSE(info.Contains("8.201")); 228 EXPECT_FALSE(info.Contains("8.2010")); 229 EXPECT_FALSE(info.Contains("8.21")); 230 EXPECT_FALSE(info.Contains("8.21.100")); 231 EXPECT_FALSE(info.Contains("9.002")); 232 EXPECT_FALSE(info.Contains("9.201")); 233 EXPECT_FALSE(info.Contains("12")); 234 EXPECT_FALSE(info.Contains("12.201")); 235 } 236 { 237 VersionInfo info("<", "lexical", "9.002", std::string()); 238 EXPECT_TRUE(info.Contains("8.001.100")); 239 EXPECT_TRUE(info.Contains("8.109")); 240 EXPECT_TRUE(info.Contains("8.10900")); 241 EXPECT_TRUE(info.Contains("8.109.100")); 242 EXPECT_TRUE(info.Contains("8.2")); 243 EXPECT_TRUE(info.Contains("8.20")); 244 EXPECT_TRUE(info.Contains("8.200")); 245 EXPECT_TRUE(info.Contains("8.20.100")); 246 EXPECT_TRUE(info.Contains("8.201")); 247 EXPECT_TRUE(info.Contains("8.2010")); 248 EXPECT_TRUE(info.Contains("8.21")); 249 EXPECT_TRUE(info.Contains("8.21.100")); 250 EXPECT_FALSE(info.Contains("9.002")); 251 EXPECT_FALSE(info.Contains("9.201")); 252 EXPECT_FALSE(info.Contains("12")); 253 EXPECT_FALSE(info.Contains("12.201")); 254 } 255} 256 257} // namespace gpu 258 259