89 lines
3.1 KiB
C#
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);
|
|
}
|
|
}
|