chore: seperate large files
This commit is contained in:
parent
ebbf516689
commit
76e1298ded
44 changed files with 5745 additions and 4173 deletions
151
internal/format/lrc/generator_test.go
Normal file
151
internal/format/lrc/generator_test.go
Normal 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)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue