streaming

Media streaming and broadcast systems in Go
Log | Files | Refs | README | LICENSE

write_test.go (1396B)


      1 package m3u8
      2 
      3 import (
      4 	"bytes"
      5 	"strings"
      6 	"testing"
      7 )
      8 
      9 func TestWriteVariant(t *testing.T) {
     10 	var cases = []struct {
     11 		name  string
     12 		v     Variant
     13 		want  string
     14 		valid bool
     15 	}{
     16 		{
     17 			"simple",
     18 			Variant{
     19 				URI:        "url_0/193039199_mp4_h264_aac_hd_7.m3u8",
     20 				Bandwidth:  2149280,
     21 				Codecs:     []string{"mp4a.40.2", "avc1.64001f"},
     22 				Resolution: [2]int{1280, 720},
     23 			},
     24 			`#EXT-X-STREAM-INF:BANDWIDTH=2149280,CODECS="mp4a.40.2,avc1.64001f",RESOLUTION=1280x720
     25 url_0/193039199_mp4_h264_aac_hd_7.m3u8`,
     26 			true,
     27 		},
     28 		{
     29 			"rounded frame rate",
     30 			Variant{
     31 				URI:       "small.m3u8",
     32 				Bandwidth: 10000,
     33 				FrameRate: 60 / 1.001, // busted NTSC
     34 			},
     35 			`#EXT-X-STREAM-INF:BANDWIDTH=10000,FRAME-RATE=59.940
     36 small.m3u8`,
     37 			true,
     38 		},
     39 		{
     40 			"no bandwidth",
     41 			Variant{URI: "url_0/193039199_mp4_h264_aac_hd_7.m3u8"},
     42 			"",
     43 			false,
     44 		},
     45 	}
     46 
     47 	for _, tt := range cases {
     48 		t.Run(tt.name, func(t *testing.T) {
     49 			buf := &bytes.Buffer{}
     50 			_, err := writeVariant(buf, &tt.v)
     51 			if err != nil && tt.valid {
     52 				t.Fatalf("non-nil error for valid variant %v: %v", tt.v, err)
     53 			} else if !tt.valid && err == nil {
     54 				t.Fatalf("nil error for invalid variant %v: %v", tt.v, err)
     55 			}
     56 			got := strings.TrimSpace(buf.String()) // trim newline
     57 			if got != tt.want {
     58 				t.Errorf("unexpected variant text")
     59 				t.Logf("got: %s", got)
     60 				t.Logf("want: %s", tt.want)
     61 			}
     62 		})
     63 	}
     64 }