feat(ads/seo/release): v1.2.0 with live Google Ads, isolated ad profile, ads.txt, and SEO/AEO/GEO optimization
This commit is contained in:
parent
a88aafa1e5
commit
0e568f1f0a
975 changed files with 130593 additions and 16783 deletions
89
tests/Paca.Tests/Browser/ChromeMediaSessionPiPTests.cs
Normal file
89
tests/Paca.Tests/Browser/ChromeMediaSessionPiPTests.cs
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue