Tests/Unit/Core.Tests.ps1
|
#Requires -Modules @{ModuleName='Pester';ModuleVersion='5.0.0'} BeforeAll { $ModulePath = Join-Path $PSScriptRoot '..\..\SubtitleTools.psd1' Import-Module $ModulePath -Force $FixturesPath = Join-Path $PSScriptRoot '..\Fixtures' } Describe 'Import-SubtitleFile' { Context 'SRT files' { It 'Parses a valid simple SRT file' { $sub = Import-SubtitleFile -Path (Join-Path $FixturesPath 'valid_simple.srt') $sub | Should -Not -BeNullOrEmpty $sub.Format | Should -Be 'SRT' $sub.Entries.Count | Should -Be 3 } It 'Returns a SubtitleFile object' { $sub = Import-SubtitleFile -Path (Join-Path $FixturesPath 'valid_simple.srt') $sub.GetType().Name | Should -Be 'SubtitleFile' } It 'Parses timestamps as TimeSpan' { $sub = Import-SubtitleFile -Path (Join-Path $FixturesPath 'valid_simple.srt') $sub.Entries[0].Start | Should -BeOfType [TimeSpan] $sub.Entries[0].Start | Should -Be ([TimeSpan]::FromSeconds(1)) $sub.Entries[0].End | Should -Be ([TimeSpan]::FromSeconds(4)) } It 'Parses multiline subtitles correctly' { $sub = Import-SubtitleFile -Path (Join-Path $FixturesPath 'valid_multiline.srt') $sub.Entries[0].Lines.Count | Should -Be 2 } It 'Detects HTML tags' { $sub = Import-SubtitleFile -Path (Join-Path $FixturesPath 'valid_multiline.srt') $sub.Entries[1].HasHtmlTags | Should -Be $true } It 'Handles dot separator timestamps with a warning' { { Import-SubtitleFile -Path (Join-Path $FixturesPath 'dot_separator.srt') } | Should -Not -Throw $sub = Import-SubtitleFile -Path (Join-Path $FixturesPath 'dot_separator.srt') $sub.Entries.Count | Should -Be 2 } } Context 'ASS files' { It 'Parses a valid ASS file' { $sub = Import-SubtitleFile -Path (Join-Path $FixturesPath 'valid_full.ass') $sub | Should -Not -BeNullOrEmpty $sub.Format | Should -Be 'ASS' $sub.Entries.Count | Should -Be 3 } It 'Populates Header styles' { $sub = Import-SubtitleFile -Path (Join-Path $FixturesPath 'valid_full.ass') $sub.Header | Should -Not -BeNullOrEmpty $sub.Header.Styles.Count | Should -BeGreaterThan 0 } It 'Parses ASS timestamps correctly' { $sub = Import-SubtitleFile -Path (Join-Path $FixturesPath 'valid_full.ass') $sub.Entries[0].Start | Should -Be ([TimeSpan]::FromSeconds(1)) } } } Describe 'ConvertTo-SrtFile / ConvertFrom-SrtFile round-trip' { It 'Round-trips a simple SRT without data loss' { $original = Import-SubtitleFile -Path (Join-Path $FixturesPath 'valid_simple.srt') $serialized = ConvertTo-SrtFile -InputObject $original $reparsed = ConvertFrom-SrtFile -Content $serialized $reparsed.Count | Should -Be $original.Entries.Count for ($i = 0; $i -lt $reparsed.Count; $i++) { $reparsed[$i].Start | Should -Be $original.Entries[$i].Start $reparsed[$i].End | Should -Be $original.Entries[$i].End ($reparsed[$i].Lines -join ' ') | Should -Be ($original.Entries[$i].Lines -join ' ') } } } Describe 'Export-SubtitleFile' { It 'Writes a file to disk without error' { $sub = Import-SubtitleFile -Path (Join-Path $FixturesPath 'valid_simple.srt') $dest = Join-Path $TestDrive 'output.srt' { Export-SubtitleFile -InputObject $sub -Path $dest } | Should -Not -Throw Test-Path $dest | Should -Be $true } It 'Written file can be re-imported' { $sub = Import-SubtitleFile -Path (Join-Path $FixturesPath 'valid_simple.srt') $dest = Join-Path $TestDrive 'output2.srt' Export-SubtitleFile -InputObject $sub -Path $dest $reimported = Import-SubtitleFile -Path $dest $reimported.Entries.Count | Should -Be $sub.Entries.Count } } |