Index: components/ntp_snippets/category_rankers/constant_category_ranker_unittest.cc |
diff --git a/components/ntp_snippets/category_rankers/constant_category_ranker_unittest.cc b/components/ntp_snippets/category_rankers/constant_category_ranker_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e0286d49715dc88b98dc417b50ba20123b9b195d |
--- /dev/null |
+++ b/components/ntp_snippets/category_rankers/constant_category_ranker_unittest.cc |
@@ -0,0 +1,124 @@ |
+// Copyright 2016 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 "components/ntp_snippets/category_rankers/constant_category_ranker.h" |
+ |
+#include "components/ntp_snippets/category.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace ntp_snippets { |
+ |
+class ConstantCategoryRankerTest : public testing::Test { |
+ public: |
+ ConstantCategoryRankerTest() |
+ : unused_remote_category_id_( |
+ static_cast<int>(KnownCategories::LAST_KNOWN_REMOTE_CATEGORY) + 1) { |
+ } |
+ |
+ int GetUnusedRemoteCategoryID() { return unused_remote_category_id_++; } |
+ |
+ Category GetUnusedRemoteCategory() { |
+ return Category::FromIDValue(GetUnusedRemoteCategoryID()); |
+ } |
+ |
+ bool CompareCategories(const Category& left, const Category& right) { |
+ return ranker()->Compare(left, right); |
+ } |
+ |
+ Category AddUnusedRemoteCategory() { |
+ Category category = GetUnusedRemoteCategory(); |
+ ranker()->AppendCategoryIfNecessary(category); |
+ return category; |
+ } |
+ |
+ void AddUnusedRemoteCategories(int quantity) { |
+ for (int i = 0; i < quantity; ++i) { |
+ AddUnusedRemoteCategory(); |
+ } |
+ } |
+ |
+ ConstantCategoryRanker* ranker() { return &ranker_; } |
+ |
+ private: |
+ ConstantCategoryRanker ranker_; |
+ int unused_remote_category_id_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ConstantCategoryRankerTest); |
+}; |
+ |
+TEST_F(ConstantCategoryRankerTest, ShouldSortRemoteCategoriesByWhenAdded) { |
+ const Category first = GetUnusedRemoteCategory(); |
+ const Category second = GetUnusedRemoteCategory(); |
+ // Categories are added in decreasing id order to test that they are not |
+ // compared by id. |
+ ranker()->AppendCategoryIfNecessary(second); |
+ ranker()->AppendCategoryIfNecessary(first); |
+ EXPECT_TRUE(CompareCategories(second, first)); |
+ EXPECT_FALSE(CompareCategories(first, second)); |
+} |
+ |
+TEST_F(ConstantCategoryRankerTest, ShouldSortLocalCategoriesBeforeRemote) { |
+ const Category remote_category = AddUnusedRemoteCategory(); |
+ const Category local_category = |
+ Category::FromKnownCategory(KnownCategories::BOOKMARKS); |
+ EXPECT_TRUE(CompareCategories(local_category, remote_category)); |
+ EXPECT_FALSE(CompareCategories(remote_category, local_category)); |
+} |
+ |
+TEST_F(ConstantCategoryRankerTest, CompareShouldReturnFalseForSameCategories) { |
+ const Category remote_category = AddUnusedRemoteCategory(); |
+ EXPECT_FALSE(CompareCategories(remote_category, remote_category)); |
+ |
+ const Category local_category = |
+ Category::FromKnownCategory(KnownCategories::BOOKMARKS); |
+ EXPECT_FALSE(CompareCategories(local_category, local_category)); |
+} |
+ |
+TEST_F(ConstantCategoryRankerTest, |
+ AddingMoreRemoteCategoriesShouldNotChangePreviousOrder) { |
+ AddUnusedRemoteCategories(3); |
+ |
+ Category first = AddUnusedRemoteCategory(); |
+ Category second = AddUnusedRemoteCategory(); |
+ |
+ ASSERT_TRUE(CompareCategories(first, second)); |
+ ASSERT_FALSE(CompareCategories(second, first)); |
+ |
+ AddUnusedRemoteCategories(3); |
+ |
+ EXPECT_TRUE(CompareCategories(first, second)); |
+ EXPECT_FALSE(CompareCategories(second, first)); |
+} |
+ |
+TEST_F(ConstantCategoryRankerTest, |
+ AddingSameCategoryTwiceShouldNotChangeOrder) { |
+ Category first = AddUnusedRemoteCategory(); |
+ Category second = AddUnusedRemoteCategory(); |
+ |
+ ASSERT_TRUE(CompareCategories(first, second)); |
+ ASSERT_FALSE(CompareCategories(second, first)); |
+ |
+ ranker()->AppendCategoryIfNecessary(first); |
+ |
+ EXPECT_TRUE(CompareCategories(first, second)); |
+ EXPECT_FALSE(CompareCategories(second, first)); |
+} |
+ |
+TEST_F(ConstantCategoryRankerTest, ShouldSortNonConsequtiveRemoteCategories) { |
+ AddUnusedRemoteCategories(3); |
+ |
+ Category first = AddUnusedRemoteCategory(); |
+ |
+ AddUnusedRemoteCategories(3); |
+ |
+ Category second = AddUnusedRemoteCategory(); |
+ |
+ AddUnusedRemoteCategories(3); |
+ |
+ EXPECT_TRUE(CompareCategories(first, second)); |
+ EXPECT_FALSE(CompareCategories(second, first)); |
+} |
+ |
+} // namespace ntp_snippets |