1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/ui/media_router/cast_modes_with_media_sources.h"
6 
7 #include "components/media_router/common/media_sink.h"
8 #include "components/media_router/common/media_source.h"
9 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "url/gurl.h"
12 
13 namespace media_router {
14 
TEST(MediaRouterCastModesWithMediaSourcesTest,AddAndRemoveSources)15 TEST(MediaRouterCastModesWithMediaSourcesTest, AddAndRemoveSources) {
16   const MediaSource presentationSource1(MediaSource::ForPresentationUrl(
17       GURL("http://www.example.com/presentation.html")));
18   const MediaSource presentationSource2(MediaSource::ForPresentationUrl(
19       GURL("http://www.example.net/presentation.html")));
20   const MediaSource tabSourceA(MediaSource::ForTab(123));
21   const CastModeSet castModeSetEmpty;
22   const CastModeSet castModeSetPresentation({MediaCastMode::PRESENTATION});
23   const CastModeSet castModeSetTab({MediaCastMode::TAB_MIRROR});
24   const CastModeSet castModeSetPresentationAndTab(
25       {MediaCastMode::PRESENTATION, MediaCastMode::TAB_MIRROR});
26 
27   CastModesWithMediaSources sources(
28       MediaSink("sinkId", "name", SinkIconType::GENERIC));
29   EXPECT_TRUE(sources.IsEmpty());
30   EXPECT_EQ(sources.GetCastModes(), castModeSetEmpty);
31 
32   // After the below addition, |sources| should contain:
33   // [Presentation: 1]
34   sources.AddSource(MediaCastMode::PRESENTATION, presentationSource1);
35   EXPECT_TRUE(
36       sources.HasSource(MediaCastMode::PRESENTATION, presentationSource1));
37   EXPECT_FALSE(
38       sources.HasSource(MediaCastMode::PRESENTATION, presentationSource2));
39   EXPECT_FALSE(
40       sources.HasSource(MediaCastMode::TAB_MIRROR, presentationSource1));
41   EXPECT_FALSE(sources.IsEmpty());
42   EXPECT_EQ(sources.GetCastModes(), castModeSetPresentation);
43 
44   // Trying to remove non-existing sources should be no-op.
45   sources.RemoveSource(MediaCastMode::PRESENTATION, presentationSource2);
46   sources.RemoveSource(MediaCastMode::TAB_MIRROR, presentationSource1);
47   sources.RemoveSource(MediaCastMode::TAB_MIRROR, tabSourceA);
48   EXPECT_TRUE(
49       sources.HasSource(MediaCastMode::PRESENTATION, presentationSource1));
50   EXPECT_EQ(sources.GetCastModes(), castModeSetPresentation);
51 
52   // [Presentation: 1; Tab: A]
53   sources.AddSource(MediaCastMode::TAB_MIRROR, tabSourceA);
54   EXPECT_TRUE(
55       sources.HasSource(MediaCastMode::PRESENTATION, presentationSource1));
56   EXPECT_TRUE(sources.HasSource(MediaCastMode::TAB_MIRROR, tabSourceA));
57   EXPECT_EQ(sources.GetCastModes(), castModeSetPresentationAndTab);
58 
59   // [Presentation: 1,2; Tab: A]
60   sources.AddSource(MediaCastMode::PRESENTATION, presentationSource2);
61   EXPECT_TRUE(
62       sources.HasSource(MediaCastMode::PRESENTATION, presentationSource2));
63   EXPECT_EQ(sources.GetCastModes(), castModeSetPresentationAndTab);
64 
65   // [Presentation: 2; Tab: A]
66   sources.RemoveSource(MediaCastMode::PRESENTATION, presentationSource1);
67   EXPECT_FALSE(
68       sources.HasSource(MediaCastMode::PRESENTATION, presentationSource1));
69   EXPECT_TRUE(
70       sources.HasSource(MediaCastMode::PRESENTATION, presentationSource2));
71   EXPECT_EQ(sources.GetCastModes(), castModeSetPresentationAndTab);
72 
73   // [Tab: A]
74   sources.RemoveSource(MediaCastMode::PRESENTATION, presentationSource2);
75   EXPECT_FALSE(
76       sources.HasSource(MediaCastMode::PRESENTATION, presentationSource1));
77   EXPECT_FALSE(sources.IsEmpty());
78   EXPECT_EQ(sources.GetCastModes(), castModeSetTab);
79 
80   // []
81   sources.RemoveSource(MediaCastMode::TAB_MIRROR, tabSourceA);
82   EXPECT_FALSE(
83       sources.HasSource(MediaCastMode::PRESENTATION, presentationSource1));
84   EXPECT_FALSE(
85       sources.HasSource(MediaCastMode::PRESENTATION, presentationSource2));
86   EXPECT_FALSE(sources.HasSource(MediaCastMode::TAB_MIRROR, tabSourceA));
87   EXPECT_TRUE(sources.IsEmpty());
88   EXPECT_EQ(sources.GetCastModes(), castModeSetEmpty);
89 }
90 
91 }  // namespace media_router
92