| // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "gpu/config/gpu_control_list.h" | 
 | #include "testing/gtest/include/gtest/gtest.h" | 
 |  | 
 | namespace gpu { | 
 |  | 
 | class VersionInfoTest : public testing::Test { | 
 |  public: | 
 |   VersionInfoTest() { } | 
 |   ~VersionInfoTest() override {} | 
 |  | 
 |   typedef GpuControlList::VersionInfo VersionInfo; | 
 | }; | 
 |  | 
 | TEST_F(VersionInfoTest, ValidVersionInfo) { | 
 |   const std::string op[] = { | 
 |     "=", | 
 |     "<", | 
 |     "<=", | 
 |     ">", | 
 |     ">=", | 
 |     "any", | 
 |     "between" | 
 |   }; | 
 |   for (size_t i = 0; i < arraysize(op); ++i) { | 
 |     std::string string1; | 
 |     std::string string2; | 
 |     if (op[i] != "any") | 
 |       string1 = "8.9"; | 
 |     if (op[i] == "between") | 
 |       string2 = "9.0"; | 
 |     VersionInfo info(op[i], std::string(), string1, string2); | 
 |     EXPECT_TRUE(info.IsValid()); | 
 |   } | 
 |  | 
 |   const std::string style[] = { | 
 |     "lexical", | 
 |     "numerical", | 
 |     ""  // Default, same as "numerical" | 
 |   }; | 
 |   for (size_t i =0; i < arraysize(style); ++i) { | 
 |     VersionInfo info("=", style[i], "8.9", std::string()); | 
 |     EXPECT_TRUE(info.IsValid()); | 
 |     if (style[i] == "lexical") | 
 |       EXPECT_TRUE(info.IsLexical()); | 
 |     else | 
 |       EXPECT_FALSE(info.IsLexical()); | 
 |   } | 
 |  | 
 |   const std::string number[] = { | 
 |     "10", | 
 |     "10.9", | 
 |     "10.0", | 
 |     "10.0.9", | 
 |     "0.8", | 
 |     // Leading 0s are valid. | 
 |     "10.09", | 
 |     // Whitespaces are ignored. | 
 |     " 10.9", | 
 |     "10.9 ", | 
 |     "10 .9", | 
 |     "10. 9", | 
 |   }; | 
 |   for (size_t i =0; i < arraysize(number); ++i) { | 
 |     VersionInfo info("=", std::string(), number[i], std::string()); | 
 |     EXPECT_TRUE(info.IsValid()); | 
 |   } | 
 | } | 
 |  | 
 | TEST_F(VersionInfoTest, InvalidVersionInfo) { | 
 |   const std::string op[] = { | 
 |     "=", | 
 |     "<", | 
 |     "<=", | 
 |     ">", | 
 |     ">=", | 
 |     "any", | 
 |     "between" | 
 |   }; | 
 |   for (size_t i = 0; i < arraysize(op); ++i) { | 
 |     { | 
 |       VersionInfo info(op[i], std::string(), "8.9", std::string()); | 
 |       if (op[i] == "between") | 
 |         EXPECT_FALSE(info.IsValid()); | 
 |       else | 
 |         EXPECT_TRUE(info.IsValid()); | 
 |     } | 
 |     { | 
 |       VersionInfo info(op[i], std::string(), std::string(), std::string()); | 
 |       if (op[i] == "any") | 
 |         EXPECT_TRUE(info.IsValid()); | 
 |       else | 
 |         EXPECT_FALSE(info.IsValid()); | 
 |     } | 
 |     { | 
 |       VersionInfo info(op[i], std::string(), "8.9", "9.0"); | 
 |       EXPECT_TRUE(info.IsValid()); | 
 |     } | 
 |   } | 
 |  | 
 |   const std::string number[] = { | 
 |     "8.E", | 
 |     "8-9", | 
 |   }; | 
 |   for (size_t i = 0; i < arraysize(number); ++i) { | 
 |     VersionInfo info("=", std::string(), number[i], std::string()); | 
 |     EXPECT_FALSE(info.IsValid()); | 
 |   } | 
 | } | 
 |  | 
 | TEST_F(VersionInfoTest, VersionComparison) { | 
 |   { | 
 |     VersionInfo info("any", std::string(), std::string(), std::string()); | 
 |     EXPECT_TRUE(info.Contains("0")); | 
 |     EXPECT_TRUE(info.Contains("8.9")); | 
 |     EXPECT_TRUE(info.Contains("100")); | 
 |   } | 
 |   { | 
 |     VersionInfo info(">", std::string(), "8.9", std::string()); | 
 |     EXPECT_FALSE(info.Contains("7")); | 
 |     EXPECT_FALSE(info.Contains("8.9")); | 
 |     EXPECT_FALSE(info.Contains("8.9.1")); | 
 |     EXPECT_TRUE(info.Contains("9")); | 
 |   } | 
 |   { | 
 |     VersionInfo info(">=", std::string(), "8.9", std::string()); | 
 |     EXPECT_FALSE(info.Contains("7")); | 
 |     EXPECT_TRUE(info.Contains("8.9")); | 
 |     EXPECT_TRUE(info.Contains("8.9.1")); | 
 |     EXPECT_TRUE(info.Contains("9")); | 
 |   } | 
 |   { | 
 |     VersionInfo info("=", std::string(), "8.9", std::string()); | 
 |     EXPECT_FALSE(info.Contains("7")); | 
 |     EXPECT_TRUE(info.Contains("8")); | 
 |     EXPECT_TRUE(info.Contains("8.9")); | 
 |     EXPECT_TRUE(info.Contains("8.9.1")); | 
 |     EXPECT_FALSE(info.Contains("9")); | 
 |   } | 
 |   { | 
 |     VersionInfo info("<", std::string(), "8.9", std::string()); | 
 |     EXPECT_TRUE(info.Contains("7")); | 
 |     EXPECT_TRUE(info.Contains("8.8")); | 
 |     EXPECT_FALSE(info.Contains("8")); | 
 |     EXPECT_FALSE(info.Contains("8.9")); | 
 |     EXPECT_FALSE(info.Contains("8.9.1")); | 
 |     EXPECT_FALSE(info.Contains("9")); | 
 |   } | 
 |   { | 
 |     VersionInfo info("<=", std::string(), "8.9", std::string()); | 
 |     EXPECT_TRUE(info.Contains("7")); | 
 |     EXPECT_TRUE(info.Contains("8.8")); | 
 |     EXPECT_TRUE(info.Contains("8")); | 
 |     EXPECT_TRUE(info.Contains("8.9")); | 
 |     EXPECT_TRUE(info.Contains("8.9.1")); | 
 |     EXPECT_FALSE(info.Contains("9")); | 
 |   } | 
 |   { | 
 |     VersionInfo info("between", std::string(), "8.9", "9.1"); | 
 |     EXPECT_FALSE(info.Contains("7")); | 
 |     EXPECT_FALSE(info.Contains("8.8")); | 
 |     EXPECT_TRUE(info.Contains("8")); | 
 |     EXPECT_TRUE(info.Contains("8.9")); | 
 |     EXPECT_TRUE(info.Contains("8.9.1")); | 
 |     EXPECT_TRUE(info.Contains("9")); | 
 |     EXPECT_TRUE(info.Contains("9.1")); | 
 |     EXPECT_TRUE(info.Contains("9.1.9")); | 
 |     EXPECT_FALSE(info.Contains("9.2")); | 
 |     EXPECT_FALSE(info.Contains("10")); | 
 |   } | 
 | } | 
 |  | 
 | TEST_F(VersionInfoTest, DateComparison) { | 
 |   // When we use '-' as splitter, we assume a format of mm-dd-yyyy | 
 |   // or mm-yyyy, i.e., a date. | 
 |   { | 
 |     VersionInfo info("=", std::string(), "1976.3.21", std::string()); | 
 |     EXPECT_TRUE(info.Contains("3-21-1976", '-')); | 
 |     EXPECT_TRUE(info.Contains("3-1976", '-')); | 
 |     EXPECT_TRUE(info.Contains("03-1976", '-')); | 
 |     EXPECT_FALSE(info.Contains("21-3-1976", '-')); | 
 |   } | 
 |   { | 
 |     VersionInfo info(">", std::string(), "1976.3.21", std::string()); | 
 |     EXPECT_TRUE(info.Contains("3-22-1976", '-')); | 
 |     EXPECT_TRUE(info.Contains("4-1976", '-')); | 
 |     EXPECT_TRUE(info.Contains("04-1976", '-')); | 
 |     EXPECT_FALSE(info.Contains("3-1976", '-')); | 
 |     EXPECT_FALSE(info.Contains("2-1976", '-')); | 
 |   } | 
 |   { | 
 |     VersionInfo info("between", std::string(), "1976.3.21", "2012.12.25"); | 
 |     EXPECT_FALSE(info.Contains("3-20-1976", '-')); | 
 |     EXPECT_TRUE(info.Contains("3-21-1976", '-')); | 
 |     EXPECT_TRUE(info.Contains("3-22-1976", '-')); | 
 |     EXPECT_TRUE(info.Contains("3-1976", '-')); | 
 |     EXPECT_TRUE(info.Contains("4-1976", '-')); | 
 |     EXPECT_TRUE(info.Contains("1-1-2000", '-')); | 
 |     EXPECT_TRUE(info.Contains("1-2000", '-')); | 
 |     EXPECT_TRUE(info.Contains("2000", '-')); | 
 |     EXPECT_TRUE(info.Contains("11-2012", '-')); | 
 |     EXPECT_TRUE(info.Contains("12-2012", '-')); | 
 |     EXPECT_TRUE(info.Contains("12-24-2012", '-')); | 
 |     EXPECT_TRUE(info.Contains("12-25-2012", '-')); | 
 |     EXPECT_FALSE(info.Contains("12-26-2012", '-')); | 
 |     EXPECT_FALSE(info.Contains("1-2013", '-')); | 
 |     EXPECT_FALSE(info.Contains("2013", '-')); | 
 |   } | 
 | } | 
 |  | 
 | TEST_F(VersionInfoTest, LexicalComparison) { | 
 |   // When we use lexical style, we assume a format major.minor.*. | 
 |   // We apply numerical comparison to major, lexical comparison to others. | 
 |   { | 
 |     VersionInfo info("<", "lexical", "8.201", std::string()); | 
 |     EXPECT_TRUE(info.Contains("8.001.100")); | 
 |     EXPECT_TRUE(info.Contains("8.109")); | 
 |     EXPECT_TRUE(info.Contains("8.10900")); | 
 |     EXPECT_TRUE(info.Contains("8.109.100")); | 
 |     EXPECT_TRUE(info.Contains("8.2")); | 
 |     EXPECT_TRUE(info.Contains("8.20")); | 
 |     EXPECT_TRUE(info.Contains("8.200")); | 
 |     EXPECT_TRUE(info.Contains("8.20.100")); | 
 |     EXPECT_FALSE(info.Contains("8.201")); | 
 |     EXPECT_FALSE(info.Contains("8.2010")); | 
 |     EXPECT_FALSE(info.Contains("8.21")); | 
 |     EXPECT_FALSE(info.Contains("8.21.100")); | 
 |     EXPECT_FALSE(info.Contains("9.002")); | 
 |     EXPECT_FALSE(info.Contains("9.201")); | 
 |     EXPECT_FALSE(info.Contains("12")); | 
 |     EXPECT_FALSE(info.Contains("12.201")); | 
 |   } | 
 |   { | 
 |     VersionInfo info("<", "lexical", "9.002", std::string()); | 
 |     EXPECT_TRUE(info.Contains("8.001.100")); | 
 |     EXPECT_TRUE(info.Contains("8.109")); | 
 |     EXPECT_TRUE(info.Contains("8.10900")); | 
 |     EXPECT_TRUE(info.Contains("8.109.100")); | 
 |     EXPECT_TRUE(info.Contains("8.2")); | 
 |     EXPECT_TRUE(info.Contains("8.20")); | 
 |     EXPECT_TRUE(info.Contains("8.200")); | 
 |     EXPECT_TRUE(info.Contains("8.20.100")); | 
 |     EXPECT_TRUE(info.Contains("8.201")); | 
 |     EXPECT_TRUE(info.Contains("8.2010")); | 
 |     EXPECT_TRUE(info.Contains("8.21")); | 
 |     EXPECT_TRUE(info.Contains("8.21.100")); | 
 |     EXPECT_FALSE(info.Contains("9.002")); | 
 |     EXPECT_FALSE(info.Contains("9.201")); | 
 |     EXPECT_FALSE(info.Contains("12")); | 
 |     EXPECT_FALSE(info.Contains("12.201")); | 
 |   } | 
 | } | 
 |  | 
 | }  // namespace gpu | 
 |  |