blob: 1fbfe19685c2a4aac1b3083246862434d0947fe8 [file] [log] [blame]
// Copyright 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 "base/bind.h"
#include "base/metrics/histogram.h"
#include "base/metrics/statistics_recorder.h"
#include "chrome/browser/search/most_visited_iframe_source.h"
#include "testing/gtest/include/gtest/gtest.h"
class MostVisitedIframeSourceTest : public testing::Test {
public:
void ExpectNullData(base::RefCountedMemory* data) {
EXPECT_EQ(NULL, data);
}
protected:
MostVisitedIframeSource* source() { return source_.get(); }
private:
virtual void SetUp() { source_.reset(new MostVisitedIframeSource()); }
scoped_ptr<MostVisitedIframeSource> source_;
};
TEST_F(MostVisitedIframeSourceTest, LogEndpointIsValid) {
content::URLDataSource::GotDataCallback callback = base::Bind(
&MostVisitedIframeSourceTest::ExpectNullData, base::Unretained(this));
base::StatisticsRecorder::Initialize();
// Making sure the histogram is created.
UMA_HISTOGRAM_ENUMERATION(MostVisitedIframeSource::kMostVisitedHistogramName,
0, MostVisitedIframeSource::kNumMostVisited);
base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram(
MostVisitedIframeSource::kMostVisitedHistogramName);
scoped_ptr<base::HistogramSamples> samples1(histogram->SnapshotSamples());
// The dummy value got logged.
EXPECT_EQ(1, samples1->TotalCount());
EXPECT_EQ(1, samples1->GetCount(0));
// Test the method.
source()->StartDataRequest("log.html?pos=1", 0, 0, callback);
scoped_ptr<base::HistogramSamples> samples2(histogram->SnapshotSamples());
EXPECT_EQ(samples1->TotalCount() + 1, samples2->TotalCount());
EXPECT_EQ(1, samples2->GetCount(1));
// Counts accumulate and behave as expected.
source()->StartDataRequest("log.html?pos=5", 0, 0, callback);
source()->StartDataRequest("log.html?pos=1", 0, 0, callback);
scoped_ptr<base::HistogramSamples> samples3(histogram->SnapshotSamples());
EXPECT_EQ(samples2->TotalCount() + 2, samples3->TotalCount());
EXPECT_EQ(1, samples3->GetCount(5));
EXPECT_EQ(2, samples3->GetCount(1));
// If 'pos' is unspecified or invalid, callback still gets called but values
// are not incremented.
source()->StartDataRequest("log.html?pos=", 0, 0, callback);
source()->StartDataRequest("log.html", 0, 0, callback);
// Total count hasn't changed.
EXPECT_EQ(samples2->TotalCount() + 2, samples3->TotalCount());
}