node build fixed
This commit is contained in:
251
seanime-2.9.10/internal/mediaplayers/mpv/mpv_test.go
Normal file
251
seanime-2.9.10/internal/mediaplayers/mpv/mpv_test.go
Normal file
@@ -0,0 +1,251 @@
|
||||
package mpv
|
||||
|
||||
import (
|
||||
"seanime/internal/test_utils"
|
||||
"seanime/internal/util"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
var testFilePath = "E:\\ANIME\\[SubsPlease] Bocchi the Rock! (01-12) (1080p) [Batch]\\[SubsPlease] Bocchi the Rock! - 01v2 (1080p) [ABDDAE16].mkv"
|
||||
|
||||
func TestMpv_OpenAndPlay(t *testing.T) {
|
||||
test_utils.InitTestProvider(t, test_utils.MediaPlayer())
|
||||
|
||||
m := New(util.NewLogger(), "", "")
|
||||
|
||||
err := m.OpenAndPlay(testFilePath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
sub := m.Subscribe("test")
|
||||
|
||||
go func() {
|
||||
time.Sleep(2 * time.Second)
|
||||
m.CloseAll()
|
||||
}()
|
||||
|
||||
select {
|
||||
case v, _ := <-sub.Closed():
|
||||
t.Logf("mpv exited, %+v", v)
|
||||
break
|
||||
}
|
||||
|
||||
t.Log("Done")
|
||||
|
||||
}
|
||||
|
||||
func TestMpv_OpenAndPlayPath(t *testing.T) {
|
||||
test_utils.InitTestProvider(t, test_utils.MediaPlayer())
|
||||
|
||||
m := New(util.NewLogger(), "", test_utils.ConfigData.Provider.MpvPath)
|
||||
|
||||
err := m.OpenAndPlay(testFilePath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
sub := m.Subscribe("test")
|
||||
|
||||
select {
|
||||
case v, _ := <-sub.Closed():
|
||||
t.Logf("mpv exited, %+v", v)
|
||||
break
|
||||
}
|
||||
|
||||
t.Log("Done")
|
||||
|
||||
}
|
||||
|
||||
func TestMpv_Playback(t *testing.T) {
|
||||
test_utils.InitTestProvider(t, test_utils.MediaPlayer())
|
||||
|
||||
m := New(util.NewLogger(), "", "")
|
||||
|
||||
err := m.OpenAndPlay(testFilePath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
sub := m.Subscribe("test")
|
||||
|
||||
loop:
|
||||
for {
|
||||
select {
|
||||
case v, _ := <-sub.Closed():
|
||||
t.Logf("mpv exited, %+v", v)
|
||||
break loop
|
||||
default:
|
||||
spew.Dump(m.GetPlaybackStatus())
|
||||
time.Sleep(2 * time.Second)
|
||||
}
|
||||
}
|
||||
|
||||
t.Log("Done")
|
||||
|
||||
}
|
||||
|
||||
func TestMpv_Multiple(t *testing.T) {
|
||||
test_utils.InitTestProvider(t, test_utils.MediaPlayer())
|
||||
|
||||
m := New(util.NewLogger(), "", "")
|
||||
|
||||
err := m.OpenAndPlay(testFilePath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
time.Sleep(2 * time.Second)
|
||||
|
||||
err = m.OpenAndPlay(testFilePath)
|
||||
if !assert.NoError(t, err) {
|
||||
t.Log("error opening mpv instance twice")
|
||||
}
|
||||
|
||||
sub := m.Subscribe("test")
|
||||
|
||||
go func() {
|
||||
time.Sleep(2 * time.Second)
|
||||
m.CloseAll()
|
||||
}()
|
||||
|
||||
select {
|
||||
case v, _ := <-sub.Closed():
|
||||
t.Logf("mpv exited, %+v", v)
|
||||
break
|
||||
}
|
||||
|
||||
t.Log("Done")
|
||||
|
||||
}
|
||||
|
||||
// Test parseArgs function
|
||||
func TestParseArgs(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
input string
|
||||
expected []string
|
||||
hasError bool
|
||||
}{
|
||||
{
|
||||
name: "simple arguments",
|
||||
input: "--fullscreen --volume=50",
|
||||
expected: []string{"--fullscreen", "--volume=50"},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "double quoted argument",
|
||||
input: "--title=\"My Movie Name\"",
|
||||
expected: []string{"--title=My Movie Name"},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "single quoted argument",
|
||||
input: "--title='My Movie Name'",
|
||||
expected: []string{"--title=My Movie Name"},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "space separated quoted argument",
|
||||
input: "--title \"My Movie Name\"",
|
||||
expected: []string{"--title", "My Movie Name"},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "single space separated quoted argument",
|
||||
input: "--title 'My Movie Name'",
|
||||
expected: []string{"--title", "My Movie Name"},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "mixed arguments",
|
||||
input: "--fullscreen --title \"My Movie\" --volume=50",
|
||||
expected: []string{"--fullscreen", "--title", "My Movie", "--volume=50"},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "path with spaces",
|
||||
input: "--subtitle-file \"C:\\Program Files\\subtitles\\movie.srt\"",
|
||||
expected: []string{"--subtitle-file", "C:\\Program Files\\subtitles\\movie.srt"},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "escaped quotes",
|
||||
input: "--title \"Movie with \\\"quotes\\\" in title\"",
|
||||
expected: []string{"--title", "Movie with \"quotes\" in title"},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "empty string",
|
||||
input: "",
|
||||
expected: []string{},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "only spaces",
|
||||
input: " ",
|
||||
expected: []string{},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "tabs and spaces",
|
||||
input: "--fullscreen\t\t--volume=50 --loop",
|
||||
expected: []string{"--fullscreen", "--volume=50", "--loop"},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "unclosed double quote",
|
||||
input: "--title \"My Movie",
|
||||
expected: nil,
|
||||
hasError: true,
|
||||
},
|
||||
{
|
||||
name: "unclosed single quote",
|
||||
input: "--title 'My Movie",
|
||||
expected: nil,
|
||||
hasError: true,
|
||||
},
|
||||
{
|
||||
name: "nested quotes",
|
||||
input: "--title \"Movie 'with' nested quotes\"",
|
||||
expected: []string{"--title", "Movie 'with' nested quotes"},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "complex mixed case",
|
||||
input: "--fullscreen --title=\"Complex Movie\" --volume 75 --subtitle-file 'path/with spaces/sub.srt' --loop",
|
||||
expected: []string{"--fullscreen", "--title=Complex Movie", "--volume", "75", "--subtitle-file", "path/with spaces/sub.srt", "--loop"},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "empty quoted string",
|
||||
input: "--title \"\"",
|
||||
expected: []string{"--title", ""},
|
||||
hasError: false,
|
||||
},
|
||||
{
|
||||
name: "multiple spaces between args",
|
||||
input: "--fullscreen --volume=50",
|
||||
expected: []string{"--fullscreen", "--volume=50"},
|
||||
hasError: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result, err := parseArgs(tt.input)
|
||||
|
||||
if tt.hasError {
|
||||
assert.Error(t, err, "Expected error for input: %q", tt.input)
|
||||
assert.Nil(t, result, "Expected nil result when error occurs")
|
||||
} else {
|
||||
assert.NoError(t, err, "Unexpected error for input: %q", tt.input)
|
||||
assert.Equal(t, tt.expected, result, "Mismatch for input: %q", tt.input)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user