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,151 @@
package lrc
import (
"os"
"path/filepath"
"strings"
"testing"
"sub-cli/internal/model"
)
func TestGenerate(t *testing.T) {
// Create test lyrics
lyrics := model.Lyrics{
Metadata: map[string]string{
"ti": "Test LRC File",
"ar": "Test Artist",
},
Timeline: []model.Timestamp{
{Hours: 0, Minutes: 0, Seconds: 1, Milliseconds: 0},
{Hours: 0, Minutes: 0, Seconds: 5, Milliseconds: 0},
},
Content: []string{
"This is the first line.",
"This is the second line.",
},
}
// Generate LRC file
tempDir := t.TempDir()
outputFile := filepath.Join(tempDir, "output.lrc")
err := Generate(lyrics, outputFile)
if err != nil {
t.Fatalf("Generate failed: %v", err)
}
// Verify generated content
content, err := os.ReadFile(outputFile)
if err != nil {
t.Fatalf("Failed to read output file: %v", err)
}
// Check content
lines := strings.Split(string(content), "\n")
if len(lines) < 4 {
t.Fatalf("Expected at least 4 lines, got %d", len(lines))
}
hasTitleLine := false
hasFirstTimeline := false
for _, line := range lines {
if line == "[ti:Test LRC File]" {
hasTitleLine = true
}
if line == "[00:01.000]This is the first line." {
hasFirstTimeline = true
}
}
if !hasTitleLine {
t.Errorf("Expected title line '[ti:Test LRC File]' not found")
}
if !hasFirstTimeline {
t.Errorf("Expected timeline line '[00:01.000]This is the first line.' not found")
}
}
func TestGenerate_FileError(t *testing.T) {
// Create test lyrics
lyrics := model.Lyrics{
Metadata: map[string]string{
"ti": "Test LRC File",
},
Timeline: []model.Timestamp{
{Hours: 0, Minutes: 0, Seconds: 1, Milliseconds: 0},
},
Content: []string{
"This is a test line.",
},
}
// Test with invalid path
err := Generate(lyrics, "/nonexistent/directory/file.lrc")
if err == nil {
t.Error("Expected error when generating to invalid path, got nil")
}
}
func TestGenerate_EdgeCases(t *testing.T) {
// Test with empty lyrics
emptyLyrics := model.Lyrics{
Metadata: map[string]string{
"ti": "Empty Test",
},
}
tempDir := t.TempDir()
emptyFile := filepath.Join(tempDir, "empty_output.lrc")
err := Generate(emptyLyrics, emptyFile)
if err != nil {
t.Fatalf("Generate failed with empty lyrics: %v", err)
}
// Verify content has metadata but no timeline entries
content, err := os.ReadFile(emptyFile)
if err != nil {
t.Fatalf("Failed to read empty output file: %v", err)
}
if !strings.Contains(string(content), "[ti:Empty Test]") {
t.Errorf("Expected metadata in empty lyrics output, not found")
}
// Test with unequal timeline and content lengths
unequalLyrics := model.Lyrics{
Timeline: []model.Timestamp{
{Hours: 0, Minutes: 0, Seconds: 1, Milliseconds: 0},
{Hours: 0, Minutes: 0, Seconds: 5, Milliseconds: 0},
},
Content: []string{
"This is the only content line.",
},
}
unequalFile := filepath.Join(tempDir, "unequal_output.lrc")
err = Generate(unequalLyrics, unequalFile)
if err != nil {
t.Fatalf("Generate failed with unequal lyrics: %v", err)
}
// Should only generate for the entries that have both timeline and content
content, err = os.ReadFile(unequalFile)
if err != nil {
t.Fatalf("Failed to read unequal output file: %v", err)
}
lines := strings.Split(string(content), "\n")
timelineLines := 0
for _, line := range lines {
if strings.HasPrefix(line, "[") && strings.Contains(line, "]") &&
strings.Contains(line, ":") && strings.Contains(line, ".") {
timelineLines++
}
}
if timelineLines > 1 {
t.Errorf("Expected only 1 timeline entry for unequal lyrics, got %d", timelineLines)
}
}