gomu/playlist_test.go

141 lines
2.1 KiB
Go
Raw Normal View History

2020-07-04 16:17:04 +08:00
package main
import (
"os"
"path"
"path/filepath"
"testing"
"github.com/rivo/tview"
)
2020-07-06 18:58:27 +08:00
// Prepares for test
2020-07-04 16:17:04 +08:00
func preparePlaylist() *Gomu {
gomu := NewGomu()
gomu.Player = &Player{}
gomu.Queue = NewQueue()
gomu.Playlist = &Playlist{
tview.NewTreeView(),
nil,
}
gomu.App = tview.NewApplication()
rootDir, err := filepath.Abs("./music")
if err != nil {
panic(err)
}
root := tview.NewTreeNode("music")
rootAudioFile := &AudioFile{
Name: root.GetText(),
Path: rootDir,
IsAudioFile: false,
Parent: nil,
}
root.SetReference(rootAudioFile)
populate(root, rootDir)
gomu.Playlist.SetRoot(root)
return gomu
}
func TestPopulate(t *testing.T) {
gomu = NewGomu()
rootDir, err := filepath.Abs("./music")
if err != nil {
panic(err)
}
items := 0
// calculate the amount of mp3 files
2020-07-10 16:52:37 +08:00
filepath.Walk(rootDir, func(path string, info os.FileInfo, err error) error {
2020-07-06 17:02:59 +08:00
2020-07-04 16:17:04 +08:00
if info.IsDir() {
items++
return nil
}
2020-07-06 17:02:59 +08:00
f, e := os.Open(path)
if e != nil {
return e
2020-07-04 16:17:04 +08:00
}
defer f.Close()
2020-07-06 17:02:59 +08:00
fileType, e := GetFileContentType(f)
2020-07-04 16:17:04 +08:00
2020-07-06 17:02:59 +08:00
if e != nil {
return e
2020-07-04 16:17:04 +08:00
}
if fileType == "mpeg" {
items++
}
return nil
})
root := tview.NewTreeNode(path.Base(rootDir))
2020-07-13 14:35:12 +08:00
root.SetReference(&AudioFile{
Name: "Music",
IsAudioFile: false,
})
2020-07-04 16:17:04 +08:00
populate(root, rootDir)
gotItems := 0
2020-07-13 14:35:12 +08:00
root.Walk(func(node, _ *tview.TreeNode) bool {
if node.GetReference().(*AudioFile).IsAudioFile {
gotItems++
}
2020-07-04 16:17:04 +08:00
return true
})
if gotItems != items {
2020-07-13 14:35:12 +08:00
t.Errorf("Invalid amount of file; expected %d got %d", items, gotItems)
2020-07-04 16:17:04 +08:00
}
}
func TestAddAllToQueue(t *testing.T) {
gomu = preparePlaylist()
2020-07-06 18:58:27 +08:00
var songs []*tview.TreeNode
2020-07-04 16:17:04 +08:00
gomu.Playlist.GetRoot().Walk(func(node, parent *tview.TreeNode) bool {
2020-07-06 18:58:27 +08:00
if node.GetReference().(*AudioFile).Name == "rap" {
gomu.Playlist.AddAllToQueue(node)
2020-07-04 16:17:04 +08:00
}
return true
})
2020-07-06 18:58:27 +08:00
queue := gomu.Queue.GetItems()
2020-07-04 16:17:04 +08:00
2020-07-06 18:58:27 +08:00
for i, song := range songs {
audioFile := song.GetReference().(*AudioFile)
// strips the path of the song in the queue
s := filepath.Base(queue[i])
if audioFile.Name != s {
t.Errorf("Expected \"%s\", got \"%s\"", audioFile.Name, s)
}
2020-07-04 16:17:04 +08:00
}
2020-07-06 18:58:27 +08:00
2020-07-04 16:17:04 +08:00
}