blob: 83d75e479a89ca6448e9ac832fee1525c8cf1c54 [file] [log] [blame]
// 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 "chrome/browser/ui/media_router/cast_modes_with_media_sources.h"
#include "chrome/common/media_router/media_sink.h"
#include "chrome/common/media_router/media_source_helper.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace media_router {
TEST(MediaRouterCastModesWithMediaSourcesTest, AddAndRemoveSources) {
const MediaSource presentationSource1(MediaSourceForPresentationUrl(
GURL("http://www.example.com/presentation.html")));
const MediaSource presentationSource2(MediaSourceForPresentationUrl(
GURL("http://www.example.net/presentation.html")));
const MediaSource tabSourceA(MediaSourceForTab(123));
const CastModeSet castModeSetEmpty;
const CastModeSet castModeSetPresentation({MediaCastMode::PRESENTATION});
const CastModeSet castModeSetTab({MediaCastMode::TAB_MIRROR});
const CastModeSet castModeSetPresentationAndTab(
{MediaCastMode::PRESENTATION, MediaCastMode::TAB_MIRROR});
CastModesWithMediaSources sources(
MediaSink("sinkId", "name", SinkIconType::GENERIC));
EXPECT_TRUE(sources.IsEmpty());
EXPECT_EQ(sources.GetCastModes(), castModeSetEmpty);
// After the below addition, |sources| should contain:
// [Presentation: 1]
sources.AddSource(MediaCastMode::PRESENTATION, presentationSource1);
EXPECT_TRUE(
sources.HasSource(MediaCastMode::PRESENTATION, presentationSource1));
EXPECT_FALSE(
sources.HasSource(MediaCastMode::PRESENTATION, presentationSource2));
EXPECT_FALSE(
sources.HasSource(MediaCastMode::TAB_MIRROR, presentationSource1));
EXPECT_FALSE(sources.IsEmpty());
EXPECT_EQ(sources.GetCastModes(), castModeSetPresentation);
// Trying to remove non-existing sources should be no-op.
sources.RemoveSource(MediaCastMode::PRESENTATION, presentationSource2);
sources.RemoveSource(MediaCastMode::TAB_MIRROR, presentationSource1);
sources.RemoveSource(MediaCastMode::TAB_MIRROR, tabSourceA);
EXPECT_TRUE(
sources.HasSource(MediaCastMode::PRESENTATION, presentationSource1));
EXPECT_EQ(sources.GetCastModes(), castModeSetPresentation);
// [Presentation: 1; Tab: A]
sources.AddSource(MediaCastMode::TAB_MIRROR, tabSourceA);
EXPECT_TRUE(
sources.HasSource(MediaCastMode::PRESENTATION, presentationSource1));
EXPECT_TRUE(sources.HasSource(MediaCastMode::TAB_MIRROR, tabSourceA));
EXPECT_EQ(sources.GetCastModes(), castModeSetPresentationAndTab);
// [Presentation: 1,2; Tab: A]
sources.AddSource(MediaCastMode::PRESENTATION, presentationSource2);
EXPECT_TRUE(
sources.HasSource(MediaCastMode::PRESENTATION, presentationSource2));
EXPECT_EQ(sources.GetCastModes(), castModeSetPresentationAndTab);
// [Presentation: 2; Tab: A]
sources.RemoveSource(MediaCastMode::PRESENTATION, presentationSource1);
EXPECT_FALSE(
sources.HasSource(MediaCastMode::PRESENTATION, presentationSource1));
EXPECT_TRUE(
sources.HasSource(MediaCastMode::PRESENTATION, presentationSource2));
EXPECT_EQ(sources.GetCastModes(), castModeSetPresentationAndTab);
// [Tab: A]
sources.RemoveSource(MediaCastMode::PRESENTATION, presentationSource2);
EXPECT_FALSE(
sources.HasSource(MediaCastMode::PRESENTATION, presentationSource1));
EXPECT_FALSE(sources.IsEmpty());
EXPECT_EQ(sources.GetCastModes(), castModeSetTab);
// []
sources.RemoveSource(MediaCastMode::TAB_MIRROR, tabSourceA);
EXPECT_FALSE(
sources.HasSource(MediaCastMode::PRESENTATION, presentationSource1));
EXPECT_FALSE(
sources.HasSource(MediaCastMode::PRESENTATION, presentationSource2));
EXPECT_FALSE(sources.HasSource(MediaCastMode::TAB_MIRROR, tabSourceA));
EXPECT_TRUE(sources.IsEmpty());
EXPECT_EQ(sources.GetCastModes(), castModeSetEmpty);
}
} // namespace media_router