package cli import ( "bytes" "strings" "testing" ) func TestRunNoArgsWritesUsageToStdout(t *testing.T) { var stdout bytes.Buffer var stderr bytes.Buffer code := Run(nil, &stdout, &stderr) if code != 0 { t.Fatalf("Run() code = %d, want 0", code) } if stdout.String() != usage { t.Fatalf("stdout = %q, want %q", stdout.String(), usage) } if stderr.Len() != 0 { t.Fatalf("stderr = %q, want empty", stderr.String()) } } func TestRunHelpArgsWriteUsageToStdout(t *testing.T) { tests := []struct { name string args []string }{ {name: "help", args: []string{"help"}}, {name: "long help flag", args: []string{"--help"}}, {name: "short help flag", args: []string{"-h"}}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { var stdout bytes.Buffer var stderr bytes.Buffer code := Run(tt.args, &stdout, &stderr) if code != 0 { t.Fatalf("Run() code = %d, want 0", code) } if stdout.String() != usage { t.Fatalf("stdout = %q, want %q", stdout.String(), usage) } if stderr.Len() != 0 { t.Fatalf("stderr = %q, want empty", stderr.String()) } }) } } func TestRunUnknownCommandWritesErrorAndUsageToStderr(t *testing.T) { var stdout bytes.Buffer var stderr bytes.Buffer code := Run([]string{"extract"}, &stdout, &stderr) if code != 2 { t.Fatalf("Run() code = %d, want 2", code) } if stdout.Len() != 0 { t.Fatalf("stdout = %q, want empty", stdout.String()) } gotStderr := stderr.String() if !strings.Contains(gotStderr, "notarius: unknown command \"extract\"") { t.Fatalf("stderr = %q, want unknown command error", gotStderr) } if !strings.Contains(gotStderr, usage) { t.Fatalf("stderr = %q, want usage", gotStderr) } }