86 lines
2.9 KiB
C#
86 lines
2.9 KiB
C#
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<Guid, bool>
|
|
{
|
|
[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");
|
|
}
|
|
}
|