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) } }