segmento/internal/playlist/playlist_test.go

49 lines
1.3 KiB
Go

package playlist_test
import (
"segmento/internal/playlist"
"segmento/internal/segment"
"strings"
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestMediaPlaylistImplements(t *testing.T) {
require.Implements(t, (*playlist.Playlist)(nil), playlist.NewMediaPlaylist())
}
func TestMediaPlaylist(t *testing.T) {
playlist := playlist.NewMediaPlaylist()
for i := 0; i < 8; i++ {
s := segment.NewSegment(3*time.Second, 0)
s.IncrementDuration(3 * time.Second)
playlist.AddSegment(s)
}
require.Equal(t, 21*time.Second, playlist.Duration())
}
func TestMediaPlaylistRender(t *testing.T) {
playlist := playlist.NewMediaPlaylist()
s := segment.NewSegment(3*time.Second, 0)
s.IncrementDuration(3 * time.Second)
playlist.AddSegment(s)
s = segment.NewSegment(3*time.Second, 0)
s.IncrementDuration(2700 * time.Millisecond)
playlist.AddSegment(s)
lines := strings.Split(playlist.Render(), "\n")
require.Equal(t, "#EXTM3U", lines[0])
require.Equal(t, "#EXT-X-VERSION:3", lines[1])
require.Equal(t, "#EXT-X-TARGETDURATION:3", lines[2])
require.Equal(t, "#EXTINF:3.00000", lines[3])
require.Equal(t, "http://www.example.com/x.mp3", lines[4])
require.Equal(t, "#EXTINF:2.70000", lines[5])
require.Equal(t, "http://www.example.com/x.mp3", lines[6])
}