blob: a2d425ff88d514281ec9492cecdc5b13420a21d0 [file] [log] [blame]
// 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