// 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 "media/remoting/metrics.h"

#include <string>

#include "base/test/metrics/histogram_tester.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"

using base::Bucket;
using testing::ElementsAre;

namespace media {
namespace remoting {

namespace {

class MediaRemotingMetricsTest : public testing::Test {
 protected:
  media::remoting::SessionMetricsRecorder recorder_;
};

}  // namespace

TEST_F(MediaRemotingMetricsTest, RecordVideoPixelRateSupport) {
  constexpr char kPixelRateSupportHistogramName[] =
      "Media.Remoting.VideoPixelRateSupport";
  base::HistogramTester tester;
  tester.ExpectTotalCount(kPixelRateSupportHistogramName, 0);

  recorder_.RecordVideoPixelRateSupport(PixelRateSupport::k4kNotSupported);
  recorder_.RecordVideoPixelRateSupport(PixelRateSupport::k2kSupported);
  recorder_.RecordVideoPixelRateSupport(PixelRateSupport::k4kNotSupported);

  // We record only for the first RecordVideoPixelRateSupport() call for the
  // given SessionMetricsRecorder instance.
  EXPECT_THAT(tester.GetAllSamples(kPixelRateSupportHistogramName),
              ElementsAre(Bucket(
                  static_cast<int>(PixelRateSupport::k4kNotSupported), 1)));
}

TEST_F(MediaRemotingMetricsTest, RecordCompatibility) {
  constexpr char kCompatibilityHistogramName[] = "Media.Remoting.Compatibility";
  base::HistogramTester tester;
  tester.ExpectTotalCount(kCompatibilityHistogramName, 0);

  recorder_.RecordCompatibility(RemotingCompatibility::kIncompatibleVideoCodec);
  recorder_.RecordCompatibility(RemotingCompatibility::kCompatible);
  recorder_.RecordCompatibility(RemotingCompatibility::kIncompatibleVideoCodec);

  // We record only for the first RecordCompatibility() call for the
  // given SessionMetricsRecorder instance.
  EXPECT_THAT(
      tester.GetAllSamples(kCompatibilityHistogramName),
      ElementsAre(Bucket(
          static_cast<int>(RemotingCompatibility::kIncompatibleVideoCodec),
          1)));
}

}  // namespace remoting
}  // namespace media
