using System; using System.Collections.Generic; using Paca.Core; using Xunit; namespace Paca.Tests.Core; public class MultiTrackMediaMuxerGateTests { [Fact] public void Gate377_MultiTrackMediaMuxer_MapsMultipleAudioTracks_Correctly() { var job = new MuxJobSpecification { VideoTrack = new TrackSpec("C:\\media\\video.mp4", "copy"), AudioTracks = new List { new("C:\\media\\audio_kor.m4a", "copy", Language: "kor", Title: "한국어 더빙", IsDefault: true), new("C:\\media\\audio_eng.m4a", "copy", Language: "eng", Title: "English Original", IsDefault: false) }, OutputPath = "C:\\media\\output_multitrack.mkv" }; var cmd = MultiTrackMediaMuxer.BuildMuxCommandLine(job); Assert.Contains("-i \"C:\\media\\video.mp4\"", cmd); Assert.Contains("-i \"C:\\media\\audio_kor.m4a\"", cmd); Assert.Contains("-i \"C:\\media\\audio_eng.m4a\"", cmd); Assert.Contains("-map 0:v:0", cmd); Assert.Contains("-map 1:a:0", cmd); Assert.Contains("-map 2:a:0", cmd); } [Fact] public void Gate378_MultiTrackMediaMuxer_InjectsAudioMetadataTags() { var job = new MuxJobSpecification { VideoTrack = new TrackSpec("video.mp4", "copy"), AudioTracks = new List { new("audio_kor.m4a", "copy", "kor", "한국어 더빙", true), new("audio_eng.m4a", "copy", "eng", "English Original", false) }, OutputPath = "output.mkv" }; var cmd = MultiTrackMediaMuxer.BuildMuxCommandLine(job); Assert.Contains("-metadata:s:a:0 language=kor", cmd); Assert.Contains("-metadata:s:a:0 title=\"한국어 더빙\"", cmd); Assert.Contains("-metadata:s:a:1 language=eng", cmd); Assert.Contains("-metadata:s:a:1 title=\"English Original\"", cmd); } [Fact] public void Gate379_MultiTrackMediaMuxer_SetsDefaultDisposition_ForPrimaryTrack() { var job = new MuxJobSpecification { VideoTrack = new TrackSpec("video.mp4", "copy"), AudioTracks = new List { new("audio_kor.m4a", "copy", "kor", "한국어", true), new("audio_eng.m4a", "copy", "eng", "English", false) }, OutputPath = "output.mkv" }; var cmd = MultiTrackMediaMuxer.BuildMuxCommandLine(job); Assert.Contains("-disposition:a:0 default", cmd); } [Fact] public void Gate380_MultiTrackMediaMuxer_IncludesSubtitlesAndBuildsFullCommand() { var job = new MuxJobSpecification { VideoTrack = new TrackSpec("C:\\in\\video.mp4", "copy"), AudioTracks = new List { new("C:\\in\\audio.aac", "copy", "kor", "Main Audio", true) }, SubtitleTracks = new List { new("C:\\in\\subs_kr.srt", "copy", "kor", "한국어 자막", true) }, OutputPath = "C:\\out\\final.mkv" }; var cmd = MultiTrackMediaMuxer.BuildMuxCommandLine(job); Assert.Contains("-i \"C:\\in\\subs_kr.srt\"", cmd); Assert.Contains("-map 2:s:0", cmd); Assert.Contains("-metadata:s:s:0 language=kor", cmd); Assert.Contains("-metadata:s:s:0 title=\"한국어 자막\"", cmd); Assert.Contains("-c copy", cmd); Assert.EndsWith("\"C:\\out\\final.mkv\" -y", cmd); } }