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
90
tests/Paca.Tests/Core/HlsManifestValidatorGateTests.cs
Normal file
90
tests/Paca.Tests/Core/HlsManifestValidatorGateTests.cs
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Paca.Core;
|
||||
using Xunit;
|
||||
|
||||
namespace Paca.Tests.Core;
|
||||
|
||||
public class HlsManifestValidatorGateTests
|
||||
{
|
||||
[Fact]
|
||||
public void Gate441_HlsManifestValidator_DetectsMasterPlaylist_AndVariants()
|
||||
{
|
||||
var manifest = @"#EXTM3U
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720
|
||||
720p.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080
|
||||
1080p.m3u8";
|
||||
|
||||
var result = HlsManifestValidator.Analyze(manifest);
|
||||
|
||||
Assert.True(result.IsMasterPlaylist);
|
||||
Assert.Equal(2, result.Variants.Count);
|
||||
Assert.Equal(5000000, result.Variants[0].Bandwidth); // highest first
|
||||
Assert.Equal("1080p.m3u8", result.Variants[0].Uri);
|
||||
Assert.Equal("1920x1080", result.Variants[0].Resolution);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate442_HlsManifestValidator_ParsesMediaPlaylist_Accurately()
|
||||
{
|
||||
var manifest = @"#EXTM3U
|
||||
#EXT-X-TARGETDURATION:10
|
||||
#EXTINF:10.0,
|
||||
seg1.ts
|
||||
#EXTINF:10.0,
|
||||
seg2.ts
|
||||
#EXTINF:5.5,
|
||||
seg3.ts
|
||||
#EXT-X-ENDLIST";
|
||||
|
||||
var result = HlsManifestValidator.Analyze(manifest);
|
||||
|
||||
Assert.False(result.IsMasterPlaylist);
|
||||
Assert.True(result.IsVod);
|
||||
Assert.False(result.IsLive);
|
||||
Assert.Equal(3, result.SegmentCount);
|
||||
Assert.Equal(25.5, result.TotalDurationSec, 1);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate443_HlsManifestValidator_DetectsDiscontinuities_AndLiveStream()
|
||||
{
|
||||
var manifest = @"#EXTM3U
|
||||
#EXT-X-TARGETDURATION:6
|
||||
#EXTINF:6.0,
|
||||
live1.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXTINF:6.0,
|
||||
live2.ts";
|
||||
|
||||
var result = HlsManifestValidator.Analyze(manifest);
|
||||
|
||||
Assert.True(result.IsLive);
|
||||
Assert.False(result.IsVod);
|
||||
Assert.Equal(1, result.DiscontinuityCount);
|
||||
Assert.Equal(2, result.SegmentCount);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate444_HlsManifestValidator_StripsAdDiscontinuityBlocks()
|
||||
{
|
||||
var manifest = @"#EXTM3U
|
||||
#EXTINF:10.0,
|
||||
main1.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXTINF:15.0,
|
||||
ad1.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXTINF:10.0,
|
||||
main2.ts
|
||||
#EXT-X-ENDLIST";
|
||||
|
||||
// Ad duration 15.0s between discontinuities stripped
|
||||
var cleaned = HlsManifestValidator.StripAdBlocks(manifest, maxAdDurationSec: 30.0);
|
||||
|
||||
Assert.Contains("main1.ts", cleaned);
|
||||
Assert.Contains("main2.ts", cleaned);
|
||||
Assert.DoesNotContain("ad1.ts", cleaned);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue