CLI parsing refactored
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestParseArgsHelpStopsBeforeValidation(t *testing.T) {
|
||||
var stdout, stderr bytes.Buffer
|
||||
|
||||
result, err := parseArgs([]string{"--help"}, &stdout, &stderr)
|
||||
if err != nil {
|
||||
t.Fatalf("parseArgs: %v", err)
|
||||
}
|
||||
if result.shouldRun {
|
||||
t.Fatal("shouldRun = true, want false")
|
||||
}
|
||||
if !result.args.showHelp {
|
||||
t.Fatal("showHelp = false, want true")
|
||||
}
|
||||
if !strings.Contains(stdout.String(), "Usage: mxl-gen") {
|
||||
t.Fatalf("help output does not contain usage: %q", stdout.String())
|
||||
}
|
||||
if stderr.Len() != 0 {
|
||||
t.Fatalf("stderr = %q, want empty", stderr.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseArgsListPatternsStopsBeforeValidation(t *testing.T) {
|
||||
var stdout, stderr bytes.Buffer
|
||||
|
||||
result, err := parseArgs([]string{"--list-patterns"}, &stdout, &stderr)
|
||||
if err != nil {
|
||||
t.Fatalf("parseArgs: %v", err)
|
||||
}
|
||||
if result.shouldRun {
|
||||
t.Fatal("shouldRun = true, want false")
|
||||
}
|
||||
if !result.args.listPatterns {
|
||||
t.Fatal("listPatterns = false, want true")
|
||||
}
|
||||
if !strings.Contains(stdout.String(), "ebu75") {
|
||||
t.Fatalf("pattern output does not contain ebu75: %q", stdout.String())
|
||||
}
|
||||
if stderr.Len() != 0 {
|
||||
t.Fatalf("stderr = %q, want empty", stderr.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseArgsRejectsUnexpectedPositionalArguments(t *testing.T) {
|
||||
var stdout, stderr bytes.Buffer
|
||||
|
||||
result, err := parseArgs([]string{"unexpected"}, &stdout, &stderr)
|
||||
if err == nil {
|
||||
t.Fatal("parseArgs returned nil error")
|
||||
}
|
||||
if result.shouldRun {
|
||||
t.Fatal("shouldRun = true, want false")
|
||||
}
|
||||
if !strings.Contains(err.Error(), "unexpected positional arguments") {
|
||||
t.Fatalf("error = %q", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseArgsRejectsUnknownFlag(t *testing.T) {
|
||||
var stdout, stderr bytes.Buffer
|
||||
|
||||
result, err := parseArgs([]string{"--not-a-flag"}, &stdout, &stderr)
|
||||
if err == nil {
|
||||
t.Fatal("parseArgs returned nil error")
|
||||
}
|
||||
if result.shouldRun {
|
||||
t.Fatal("shouldRun = true, want false")
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateAudioArgsSkipsDisabledAudio(t *testing.T) {
|
||||
args := appArgs{
|
||||
audioChannels: 0,
|
||||
audioSamplingFreq: "unsupported",
|
||||
audioUUID: "not-a-uuid",
|
||||
}
|
||||
|
||||
if err := validateAudioArgs(&args); err != nil {
|
||||
t.Fatalf("validateAudioArgs: %v", err)
|
||||
}
|
||||
if args.audioUUID != "not-a-uuid" {
|
||||
t.Fatalf("audio UUID changed while audio is disabled: %q", args.audioUUID)
|
||||
}
|
||||
}
|
||||
|
||||
func TestListPatternsIsSorted(t *testing.T) {
|
||||
var output bytes.Buffer
|
||||
listPatterns(&output)
|
||||
|
||||
text := output.String()
|
||||
if strings.Index(text, "ebu100") > strings.Index(text, "ebu75") {
|
||||
t.Fatalf("patterns are not sorted: %q", text)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user