using System; using System.Collections.Generic; using System.Linq; using Paca.Browser; using Paca.Browser.Media; using Xunit; namespace Paca.Tests.Browser; public class ChromeMediaSessionAdvancedTests { [Fact] public void MediaSessionCoordinator_Generates_Advanced_Control_Scripts() { var coordinator = new MediaSessionCoordinator(); var muteScript = coordinator.GenerateMuteToggleScript(); Assert.Contains("media.muted = !media.muted", muteScript); var seekScript = coordinator.GenerateSeekScript(15.0); Assert.Contains("currentTime", seekScript); Assert.Contains("15", seekScript); var volumeScript = coordinator.GenerateSetVolumeScript(0.75); Assert.Contains("media.volume = 0.75", volumeScript); var speedScript = coordinator.GeneratePlaybackRateScript(1.5); Assert.Contains("media.playbackRate = 1.5", speedScript); } [Fact] public void MediaSessionCoordinator_Mutes_All_Other_Tabs() { var coordinator = new MediaSessionCoordinator(); var tab1 = Guid.NewGuid(); var tab2 = Guid.NewGuid(); var tab3 = Guid.NewGuid(); var muteStates = new Dictionary { [tab1] = false, [tab2] = false, [tab3] = false, }; coordinator.MuteAllOtherTabs(tab1, new[] { tab1, tab2, tab3 }, (id, mute) => muteStates[id] = mute); Assert.False(muteStates[tab1]); Assert.True(muteStates[tab2]); Assert.True(muteStates[tab3]); } [Fact] public void ChromeTabAudioPolicy_Enforces_SingleTabAudio_And_MuteByDefault() { var policy = new ChromeTabAudioPolicy(ChromeTabAudioMode.SingleTabAudioOnly); var currentTab = Guid.NewGuid(); var otherTab1 = Guid.NewGuid(); var otherTab2 = Guid.NewGuid(); var toMute = policy.EvaluateAutoMuteOnNewPlayback(currentTab, new[] { otherTab1, otherTab2 }); Assert.Equal(2, toMute.Count); Assert.Contains(otherTab1, toMute); Assert.Contains(otherTab2, toMute); // Standard mode doesn't auto-mute others var stdPolicy = new ChromeTabAudioPolicy(ChromeTabAudioMode.Standard); Assert.Empty(stdPolicy.EvaluateAutoMuteOnNewPlayback(currentTab, new[] { otherTab1, otherTab2 })); // MuteByDefault mode var muteByDefaultPolicy = new ChromeTabAudioPolicy(ChromeTabAudioMode.MuteByDefault); Assert.True(muteByDefaultPolicy.ShouldMuteNewTab("https://youtube.com")); Assert.False(stdPolicy.ShouldMuteNewTab("https://youtube.com")); } [Theory] [InlineData("다른 탭 음소거")] [InlineData("모든 다른 탭 음소거")] [InlineData("mute others")] public void Omnibox_Matches_MuteOthers_Action(string query) { var actions = OmniboxActionEvaluator.GetMatchingActions(query); Assert.Contains(actions, a => a.ActionId == "action:mute-others"); } }