test(core/browser/platform): 26 extreme RED/GREEN TDD cycles and full regression hardening (3,235 PASS)
This commit is contained in:
parent
bcd242691f
commit
8677853822
100 changed files with 4814 additions and 333 deletions
|
|
@ -0,0 +1,106 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Paca.Browser;
|
||||
using Paca.Browser.Content;
|
||||
using Xunit;
|
||||
|
||||
namespace Paca.Tests.Browser;
|
||||
|
||||
public class BrowserContentAndRoutingExtremeRedTests
|
||||
{
|
||||
// ==========================================
|
||||
// 1. ChromeInternalUrlRouter
|
||||
// ==========================================
|
||||
|
||||
[Theory]
|
||||
[InlineData("chrome://settings?category=privacy", ChromeInternalAction.Settings)]
|
||||
[InlineData("chrome://downloads?q=paca", ChromeInternalAction.Downloads)]
|
||||
[InlineData("chrome://history#search", ChromeInternalAction.History)]
|
||||
[InlineData("chrome:///settings", ChromeInternalAction.Settings)]
|
||||
[InlineData("paca://extensions?id=123", ChromeInternalAction.Extensions)]
|
||||
[InlineData("chrome://settings/content?site=example.com", ChromeInternalAction.SiteSettings)]
|
||||
[InlineData("chrome://clear-browsing-data?time=all", ChromeInternalAction.ClearBrowsingData)]
|
||||
public void ChromeInternalUrlRouter_Route_WithQueryOrFragment_ResolvesActionCorrectly(string url, ChromeInternalAction expected)
|
||||
{
|
||||
var action = ChromeInternalUrlRouter.Route(url);
|
||||
Assert.Equal(expected, action);
|
||||
}
|
||||
|
||||
// ==========================================
|
||||
// 2. DualSubtitleEngine
|
||||
// ==========================================
|
||||
|
||||
[Theory]
|
||||
[InlineData(double.NaN)]
|
||||
[InlineData(double.NegativeInfinity)]
|
||||
[InlineData(double.PositiveInfinity)]
|
||||
[InlineData(-1.0)]
|
||||
public void DualSubtitleEngine_GetDualCues_InvalidTimestamp_ReturnsNull(double timestamp)
|
||||
{
|
||||
var engine = new DualSubtitleEngine();
|
||||
var cues = engine.GetDualCues(timestamp);
|
||||
Assert.Null(cues);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DualSubtitleEngine_RegisterAudioTrack_NullOrDuplicate_HandledSafely()
|
||||
{
|
||||
var engine = new DualSubtitleEngine();
|
||||
engine.RegisterAudioTrack(null!);
|
||||
Assert.Empty(engine.AudioTracks);
|
||||
|
||||
var track1 = new AudioTrackInfo(1, "ko", "한국어", true);
|
||||
var track1Duplicate = new AudioTrackInfo(1, "ko-alt", "한국어 더빙", false);
|
||||
|
||||
engine.RegisterAudioTrack(track1);
|
||||
engine.RegisterAudioTrack(track1Duplicate);
|
||||
|
||||
Assert.Single(engine.AudioTracks);
|
||||
Assert.Equal(1, engine.SelectedAudioTrackId);
|
||||
}
|
||||
|
||||
// ==========================================
|
||||
// 3. LiveCaptionEngine
|
||||
// ==========================================
|
||||
|
||||
[Theory]
|
||||
[InlineData(double.NaN)]
|
||||
[InlineData(-10.0)]
|
||||
public void LiveCaptionEngine_GetActiveCue_InvalidTimestamp_ReturnsNull(double timestamp)
|
||||
{
|
||||
var engine = new LiveCaptionEngine();
|
||||
var cue = engine.GetActiveCue(timestamp);
|
||||
Assert.Null(cue);
|
||||
}
|
||||
|
||||
// ==========================================
|
||||
// 4. MhtmlWebArchivePackager
|
||||
// ==========================================
|
||||
|
||||
[Fact]
|
||||
public void MhtmlWebArchivePackager_Package_NullRequest_ThrowsArgumentNullException()
|
||||
{
|
||||
var packager = new MhtmlWebArchivePackager();
|
||||
Assert.Throws<ArgumentNullException>(() => packager.Package(null!));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MhtmlWebArchivePackager_Package_NullResourcesOrData_PackagesWithoutCrashing()
|
||||
{
|
||||
var packager = new MhtmlWebArchivePackager();
|
||||
var req = new WebArchivePackageRequest(
|
||||
Url: "https://example.com",
|
||||
Title: "Test Page",
|
||||
HtmlContent: "<html><body>Hello</body></html>",
|
||||
Resources: new List<WebArchiveResource>
|
||||
{
|
||||
new("https://example.com/null.png", "image/png", null!),
|
||||
null!
|
||||
}
|
||||
);
|
||||
|
||||
var mhtml = packager.Package(req);
|
||||
Assert.NotNull(mhtml);
|
||||
Assert.Contains("Hello", mhtml);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue