// Copyright (c) 2011 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 "chrome/browser/oom_priority_manager.h" #include #include #include "base/logging.h" #include "base/string16.h" #include "base/time.h" #include "testing/gtest/include/gtest/gtest.h" namespace browser { typedef testing::Test OomPriorityManagerTest; namespace { enum TestIndicies { kMostImportant, kNotPinned, kNotSelected, kSimilarTime, kSimilarTimeOverThreshold, kReallyOld, kOldButPinned }; } // namespace // Tests the sorting comparator so that we know it's producing the // desired order. TEST_F(OomPriorityManagerTest, Comparator) { browser::OomPriorityManager::TabStatsList test_list; const base::TimeTicks now = base::TimeTicks::Now(); { OomPriorityManager::TabStats stats; stats.is_selected = true; stats.is_pinned = true; stats.last_selected = now; stats.renderer_handle = kMostImportant; test_list.push_back(stats); } { OomPriorityManager::TabStats stats; stats.is_selected = true; stats.is_pinned = false; stats.last_selected = now; stats.renderer_handle = kNotPinned; test_list.push_back(stats); } { OomPriorityManager::TabStats stats; stats.is_selected = false; stats.is_pinned = false; stats.last_selected = now; stats.renderer_handle = kNotSelected; test_list.push_back(stats); } { OomPriorityManager::TabStats stats; stats.is_selected = false; stats.is_pinned = false; stats.last_selected = now - base::TimeDelta::FromSeconds(10); stats.renderer_handle = kSimilarTime; test_list.push_back(stats); } { OomPriorityManager::TabStats stats; stats.is_selected = false; stats.is_pinned = false; stats.last_selected = now - base::TimeDelta::FromMinutes(15); stats.renderer_handle = kSimilarTimeOverThreshold; test_list.push_back(stats); } { OomPriorityManager::TabStats stats; stats.is_selected = false; stats.is_pinned = false; stats.last_selected = now - base::TimeDelta::FromDays(365); stats.renderer_handle = kReallyOld; test_list.push_back(stats); } // This also is out of order, so verifies that we are actually // sorting the array. { OomPriorityManager::TabStats stats; stats.is_selected = false; stats.is_pinned = true; stats.last_selected = now - base::TimeDelta::FromDays(365); stats.renderer_handle = kOldButPinned; test_list.push_back(stats); } std::sort(test_list.begin(), test_list.end(), OomPriorityManager::CompareTabStats); EXPECT_EQ(test_list[0].renderer_handle, kMostImportant); EXPECT_EQ(test_list[1].renderer_handle, kNotPinned); EXPECT_EQ(test_list[2].renderer_handle, kOldButPinned); // The order of kNotSelected and kSimilarTime is indeterminate: // they are equal in the eyes of the sort. EXPECT_TRUE((test_list[3].renderer_handle == kNotSelected && test_list[4].renderer_handle == kSimilarTime) || (test_list[3].renderer_handle == kSimilarTime && test_list[4].renderer_handle == kNotSelected)); EXPECT_EQ(test_list[5].renderer_handle, kSimilarTimeOverThreshold); EXPECT_EQ(test_list[6].renderer_handle, kReallyOld); } } // namespace browser