blob: 6d60af25a770255d094d98f74be0917244e3187b [file] [log] [blame]
// Copyright 2018 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/ui/views/media_router/cast_dialog_metrics.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/time/time.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using base::Bucket;
using testing::ElementsAre;
namespace media_router {
namespace {
const base::Time init_time = base::Time::Now();
const base::Time paint_time = init_time + base::TimeDelta::FromMilliseconds(50);
const base::Time sink_load_time =
init_time + base::TimeDelta::FromMilliseconds(300);
const base::Time start_casting_time =
init_time + base::TimeDelta::FromMilliseconds(2000);
const base::Time close_dialog_time =
init_time + base::TimeDelta::FromMilliseconds(3000);
} // namespace
class CastDialogMetricsTest : public testing::Test {
public:
CastDialogMetricsTest() : metrics_(init_time) {}
~CastDialogMetricsTest() override = default;
protected:
CastDialogMetrics metrics_;
base::HistogramTester tester_;
};
TEST_F(CastDialogMetricsTest, OnSinksLoaded) {
metrics_.OnSinksLoaded(sink_load_time);
tester_.ExpectUniqueSample(
MediaRouterMetrics::kHistogramUiDialogLoadedWithData,
(sink_load_time - init_time).InMilliseconds(), 1);
}
TEST_F(CastDialogMetricsTest, OnPaint) {
metrics_.OnPaint(paint_time);
tester_.ExpectUniqueSample(MediaRouterMetrics::kHistogramUiDialogPaint,
(paint_time - init_time).InMilliseconds(), 1);
}
TEST_F(CastDialogMetricsTest, OnStartCasting) {
constexpr int kSinkIndex = 4;
metrics_.OnSinksLoaded(sink_load_time);
metrics_.OnStartCasting(start_casting_time, kSinkIndex);
tester_.ExpectUniqueSample(
MediaRouterMetrics::kHistogramStartLocalLatency,
(start_casting_time - sink_load_time).InMilliseconds(), 1);
}
TEST_F(CastDialogMetricsTest, OnStopCasting) {
metrics_.OnStopCasting(/* is_local_route*/ false);
tester_.ExpectUniqueSample(MediaRouterMetrics::kHistogramStopRoute,
/* Remote route */ 1, 1);
}
TEST_F(CastDialogMetricsTest, OnCloseDialog) {
metrics_.OnPaint(paint_time);
metrics_.OnCloseDialog(close_dialog_time);
tester_.ExpectUniqueSample(MediaRouterMetrics::kHistogramCloseLatency,
(close_dialog_time - paint_time).InMilliseconds(),
1);
}
TEST_F(CastDialogMetricsTest, OnRecordSinkCount) {
constexpr int kSinkCount = 3;
metrics_.OnRecordSinkCount(kSinkCount);
tester_.ExpectUniqueSample(MediaRouterMetrics::kHistogramUiDeviceCount,
kSinkCount, 1);
}
TEST_F(CastDialogMetricsTest, RecordFirstAction) {
metrics_.OnStopCasting(true);
metrics_.OnCastModeSelected();
metrics_.OnCloseDialog(close_dialog_time);
// Only the first action should be recorded for the first action metric.
tester_.ExpectUniqueSample(MediaRouterMetrics::kHistogramUiFirstAction,
MediaRouterUserAction::STOP_LOCAL, 1);
}
} // namespace media_router