chore: seperate large files

This commit is contained in:
CDN 2025-04-23 19:22:41 +08:00
parent ebbf516689
commit 76e1298ded
Signed by: CDN
GPG key ID: 0C656827F9F80080
44 changed files with 5745 additions and 4173 deletions

View file

@ -0,0 +1,159 @@
package srt
import (
"os"
"path/filepath"
"testing"
)
func TestParse(t *testing.T) {
// Create a temporary test file
content := `1
00:00:01,000 --> 00:00:04,000
This is the first line.
2
00:00:05,000 --> 00:00:08,000
This is the second line.
3
00:00:09,500 --> 00:00:12,800
This is the third line
with a line break.
`
tempDir := t.TempDir()
testFile := filepath.Join(tempDir, "test.srt")
if err := os.WriteFile(testFile, []byte(content), 0644); err != nil {
t.Fatalf("Failed to create test file: %v", err)
}
// Test parsing
entries, err := Parse(testFile)
if err != nil {
t.Fatalf("Parse failed: %v", err)
}
// Verify results
if len(entries) != 3 {
t.Errorf("Expected 3 entries, got %d", len(entries))
}
// Check first entry
if entries[0].Number != 1 {
t.Errorf("First entry number: expected 1, got %d", entries[0].Number)
}
if entries[0].StartTime.Hours != 0 || entries[0].StartTime.Minutes != 0 ||
entries[0].StartTime.Seconds != 1 || entries[0].StartTime.Milliseconds != 0 {
t.Errorf("First entry start time: expected 00:00:01,000, got %+v", entries[0].StartTime)
}
if entries[0].EndTime.Hours != 0 || entries[0].EndTime.Minutes != 0 ||
entries[0].EndTime.Seconds != 4 || entries[0].EndTime.Milliseconds != 0 {
t.Errorf("First entry end time: expected 00:00:04,000, got %+v", entries[0].EndTime)
}
if entries[0].Content != "This is the first line." {
t.Errorf("First entry content: expected 'This is the first line.', got '%s'", entries[0].Content)
}
// Check third entry
if entries[2].Number != 3 {
t.Errorf("Third entry number: expected 3, got %d", entries[2].Number)
}
expectedContent := "This is the third line\nwith a line break."
if entries[2].Content != expectedContent {
t.Errorf("Third entry content: expected '%s', got '%s'", expectedContent, entries[2].Content)
}
}
func TestParse_EdgeCases(t *testing.T) {
// Test with empty file
tempDir := t.TempDir()
emptyFile := filepath.Join(tempDir, "empty.srt")
if err := os.WriteFile(emptyFile, []byte(""), 0644); err != nil {
t.Fatalf("Failed to create empty file: %v", err)
}
entries, err := Parse(emptyFile)
if err != nil {
t.Fatalf("Parse failed with empty file: %v", err)
}
if len(entries) != 0 {
t.Errorf("Expected 0 entries for empty file, got %d", len(entries))
}
// Test with malformed timestamp
malformedContent := `1
00:00:01,000 --> 00:00:04,000
First entry.
2
bad timestamp format
Second entry.
`
malformedFile := filepath.Join(tempDir, "malformed.srt")
if err := os.WriteFile(malformedFile, []byte(malformedContent), 0644); err != nil {
t.Fatalf("Failed to create malformed file: %v", err)
}
entries, err = Parse(malformedFile)
if err != nil {
t.Fatalf("Parse failed with malformed file: %v", err)
}
// Should still parse the first entry correctly
if len(entries) != 1 {
t.Errorf("Expected 1 entry for malformed file, got %d", len(entries))
}
// Test with missing numbers
missingNumContent := `00:00:01,000 --> 00:00:04,000
First entry without number.
2
00:00:05,000 --> 00:00:08,000
Second entry with number.
`
missingNumFile := filepath.Join(tempDir, "missing_num.srt")
if err := os.WriteFile(missingNumFile, []byte(missingNumContent), 0644); err != nil {
t.Fatalf("Failed to create missing num file: %v", err)
}
entries, err = Parse(missingNumFile)
if err != nil {
t.Fatalf("Parse failed with missing num file: %v", err)
}
// Parsing behavior may vary, but it should not crash
// In this case, it will typically parse just the second entry
// Test with extra empty lines
extraLineContent := `1
00:00:01,000 --> 00:00:04,000
First entry with extra spaces.
2
00:00:05,000 --> 00:00:08,000
Second entry with extra spaces.
`
extraLineFile := filepath.Join(tempDir, "extra_lines.srt")
if err := os.WriteFile(extraLineFile, []byte(extraLineContent), 0644); err != nil {
t.Fatalf("Failed to create extra lines file: %v", err)
}
entries, err = Parse(extraLineFile)
if err != nil {
t.Fatalf("Parse failed with extra lines file: %v", err)
}
if len(entries) != 2 {
t.Errorf("Expected 2 entries for extra lines file, got %d", len(entries))
}
// Check content was trimmed correctly
if entries[0].Content != "First entry with extra spaces." {
t.Errorf("Expected trimmed content, got '%s'", entries[0].Content)
}
}
func TestParse_FileError(t *testing.T) {
// Test with non-existent file
_, err := Parse("/nonexistent/file.srt")
if err == nil {
t.Error("Expected error when parsing non-existent file, got nil")
}
}