releases/tests/Paca.Tests/Browser/ChromeMediaSessionPiPTests.cs

89 lines
3.1 KiB
C#

using System;
using System.Linq;
using Paca.Browser.Media;
using Paca.Browser.Tabs;
using Xunit;
namespace Paca.Tests.Browser;
public class ChromeMediaSessionPiPTests
{
[Fact]
public void MediaSessionCoordinator_Tracks_Active_Sessions()
{
var coordinator = new MediaSessionCoordinator();
var tabId1 = Guid.NewGuid();
var tabId2 = Guid.NewGuid();
coordinator.RegisterOrUpdateSession(new MediaSessionItem(
tabId1,
"Cool Music Video",
"YouTube",
"https://www.youtube.com/watch?v=123",
IsPlaying: true,
SupportsPiP: true,
Duration: 210.0,
CurrentPosition: 45.0
));
coordinator.RegisterOrUpdateSession(new MediaSessionItem(
tabId2,
"Podcast Episode 99",
"Spotify",
"https://open.spotify.com/track/456",
IsPlaying: false,
SupportsPiP: false,
Duration: 3600.0,
CurrentPosition: 1200.0
));
Assert.Equal(2, coordinator.ActiveSessions.Count);
var primary = coordinator.GetPrimaryPlayingSession();
Assert.NotNull(primary);
Assert.Equal(tabId1, primary.TabId);
Assert.Equal("Cool Music Video", primary.Title);
// Update tab1 to paused and tab2 to playing
coordinator.RegisterOrUpdateSession(primary with { IsPlaying = false });
var tab2Item = coordinator.ActiveSessions.First(s => s.TabId == tabId2);
coordinator.RegisterOrUpdateSession(tab2Item with { IsPlaying = true });
var newPrimary = coordinator.GetPrimaryPlayingSession();
Assert.NotNull(newPrimary);
Assert.Equal(tabId2, newPrimary.TabId);
// Remove session when tab closes
coordinator.RemoveSession(tabId1);
Assert.Single(coordinator.ActiveSessions);
Assert.Equal(tabId2, coordinator.ActiveSessions[0].TabId);
}
[Fact]
public void MediaSessionCoordinator_Generates_Valid_PiP_Scripts()
{
var coordinator = new MediaSessionCoordinator();
var pipScript = coordinator.GeneratePiPInjectionScript();
Assert.Contains("requestPictureInPicture", pipScript);
Assert.Contains("document.pictureInPictureElement", pipScript);
var toggleScript = coordinator.GeneratePlayPauseToggleScript();
Assert.Contains(".paused", toggleScript);
Assert.Contains(".play()", toggleScript);
Assert.Contains(".pause()", toggleScript);
}
[Fact]
public void OmniboxActionEvaluator_Matches_Media_And_PiP()
{
var pipActions = OmniboxActionEvaluator.GetMatchingActions("pip");
Assert.Contains(pipActions, a => a.ActionId == "action:media-controls");
var mediaActions = OmniboxActionEvaluator.GetMatchingActions("미디어 컨트롤");
Assert.Contains(mediaActions, a => a.ActionId == "action:media-controls");
var action = OmniboxActionEvaluator.AllActions.FirstOrDefault(a => a.ActionId == "action:media-controls");
Assert.NotNull(action);
Assert.Contains("PIP", action.DisplayTitle);
}
}