1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/version.h"
7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "testing/gtest/include/gtest/gtest.h"
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass VersionTest : public testing::Test {
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(VersionTest, DefaultConstructor) {
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Version v;
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(v.is_valid_);
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(VersionTest, GetVersionFromString) {
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  static const struct version_string {
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    const char* input;
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    size_t parts;
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    bool success;
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  } cases[] = {
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    {"", 0, false},
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    {" ", 0, false},
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    {"\t", 0, false},
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    {"\n", 0, false},
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    {"  ", 0, false},
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    {".", 0, false},
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    {" . ", 0, false},
30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"0", 1, true},
31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"0.0", 2, true},
32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"65537.0", 0, false},
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"-1.0", 0, false},
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.-1.0", 0, false},
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"+1.0", 0, false},
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.+1.0", 0, false},
37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.0a", 0, false},
38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.2.3.4.5.6.7.8.9.0", 10, true},
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"02.1", 0, false},
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"f.1", 0, false},
41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  };
42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) {
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    scoped_ptr<Version> vers(Version::GetVersionFromString(cases[i].input));
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    EXPECT_EQ(cases[i].success, vers.get() != NULL);
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (cases[i].success) {
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_TRUE(vers->is_valid_);
47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott      EXPECT_EQ(cases[i].parts, vers->components().size());
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(VersionTest, Compare) {
53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  static const struct version_compare {
54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    const char* lhs;
55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    const char* rhs;
56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    int expected;
57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  } cases[] = {
58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.0", "1.0", 0},
59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.0", "0.0", 1},
60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.0", "2.0", -1},
61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.0", "1.1", -1},
62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.1", "1.0", 1},
63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.0", "1.0.1", -1},
64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.1", "1.0.1", 1},
65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.1", "1.0.1", 1},
66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.0.0", "1.0", 0},
67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    {"1.0.3", "1.0.20", -1},
68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  };
69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) {
70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    scoped_ptr<Version> lhs(Version::GetVersionFromString(cases[i].lhs));
71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    scoped_ptr<Version> rhs(Version::GetVersionFromString(cases[i].rhs));
72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    EXPECT_EQ(lhs->CompareTo(*rhs), cases[i].expected) <<
73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott          cases[i].lhs << " ? " << cases[i].rhs;
74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
76