97 lines
2.5 KiB
Go
97 lines
2.5 KiB
Go
|
|
package engine
|
||
|
|
|
||
|
|
import "testing"
|
||
|
|
|
||
|
|
func TestDecideAction(t *testing.T) {
|
||
|
|
cases := []struct {
|
||
|
|
name string
|
||
|
|
p StreamProbe
|
||
|
|
want TranscodeAction
|
||
|
|
}{
|
||
|
|
{
|
||
|
|
name: "MP4 + h264 + AAC = passthrough",
|
||
|
|
p: StreamProbe{VideoCodec: "h264", AudioCodec: "aac", Container: ".mp4"},
|
||
|
|
want: ActionPassthrough,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "MKV + h264 + AAC = remux",
|
||
|
|
p: StreamProbe{VideoCodec: "h264", AudioCodec: "aac", Container: ".mkv"},
|
||
|
|
want: ActionRemux,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "MKV + h264 + AC3 = remux audio",
|
||
|
|
p: StreamProbe{VideoCodec: "h264", AudioCodec: "ac3", Container: ".mkv"},
|
||
|
|
want: ActionRemuxAudio,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "MP4 + h264 + EAC3 = remux audio",
|
||
|
|
p: StreamProbe{VideoCodec: "h264", AudioCodec: "eac3", Container: ".mp4"},
|
||
|
|
want: ActionRemuxAudio,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "MKV + HEVC = transcode video",
|
||
|
|
p: StreamProbe{VideoCodec: "hevc", AudioCodec: "aac", Container: ".mkv"},
|
||
|
|
want: ActionTranscodeVideo,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "MP4 + AV1 = transcode video",
|
||
|
|
p: StreamProbe{VideoCodec: "av1", AudioCodec: "aac", Container: ".mp4"},
|
||
|
|
want: ActionTranscodeVideo,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "h264 10-bit = transcode video (browser refuses)",
|
||
|
|
p: StreamProbe{VideoCodec: "h264", AudioCodec: "aac", BitDepth: 10, Container: ".mp4"},
|
||
|
|
want: ActionTranscodeVideo,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "h264 + HDR10 = transcode video",
|
||
|
|
p: StreamProbe{VideoCodec: "h264", AudioCodec: "aac", HDR: "HDR10", Container: ".mp4"},
|
||
|
|
want: ActionTranscodeVideo,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "AVI + h264 + AAC = remux",
|
||
|
|
p: StreamProbe{VideoCodec: "h264", AudioCodec: "aac", Container: ".avi"},
|
||
|
|
want: ActionRemux,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "Unknown codec = transcode video",
|
||
|
|
p: StreamProbe{VideoCodec: "mpeg4", AudioCodec: "mp3", Container: ".avi"},
|
||
|
|
want: ActionTranscodeVideo,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "Empty probe falls through to transcode (unknown codec)",
|
||
|
|
p: StreamProbe{},
|
||
|
|
want: ActionTranscodeVideo,
|
||
|
|
},
|
||
|
|
}
|
||
|
|
for _, tc := range cases {
|
||
|
|
t.Run(tc.name, func(t *testing.T) {
|
||
|
|
got := DecideAction(&tc.p)
|
||
|
|
if got != tc.want {
|
||
|
|
t.Errorf("got %s, want %s", got, tc.want)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestDecideActionNil(t *testing.T) {
|
||
|
|
if DecideAction(nil) != ActionPassthrough {
|
||
|
|
t.Error("nil probe should default passthrough")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestLowerExt(t *testing.T) {
|
||
|
|
cases := map[string]string{
|
||
|
|
"foo.MP4": ".mp4",
|
||
|
|
"path/to/movie.MKV": ".mkv",
|
||
|
|
"weird.name.with.dots": ".dots",
|
||
|
|
"": "",
|
||
|
|
"noext": "",
|
||
|
|
}
|
||
|
|
for in, want := range cases {
|
||
|
|
if got := lowerExt(in); got != want {
|
||
|
|
t.Errorf("lowerExt(%q) = %q want %q", in, got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|