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