version_test.go
1package main
2
3import (
4 "bytes"
5 "strings"
6 "testing"
7)
8
9func executeCommand(args ...string) (string, error) {
10 buf := new(bytes.Buffer)
11 rootCmd.SetOut(buf)
12 rootCmd.SetErr(buf)
13 rootCmd.SetArgs(args)
14 defer rootCmd.SetArgs([]string{})
15 out, err := func() (string, error) {
16 err := rootCmd.Execute()
17 return buf.String(), err
18 }()
19 return out, err
20}
21
22func TestVersionCommandRegistered(t *testing.T) {
23 found := false
24 for _, cmd := range rootCmd.Commands() {
25 if cmd.Name() == "version" {
26 found = true
27 break
28 }
29 }
30 if !found {
31 t.Fatalf("expected 'version' subcommand to be registered on rootCmd")
32 }
33}
34
35func TestVersionOutputFormat(t *testing.T) {
36 out, err := executeCommand("version")
37 if err != nil {
38 t.Fatalf("version command failed: %v", err)
39 }
40 trimmed := strings.TrimSpace(out)
41 if !strings.HasPrefix(trimmed, "bug version ") {
42 t.Errorf("expected output to start with %q, got %q", "bug version ", trimmed)
43 }
44 ver := strings.TrimSpace(strings.TrimPrefix(trimmed, "bug version "))
45 if ver == "" {
46 t.Errorf("version string is empty, got %q", trimmed)
47 }
48}
49
50func TestVersionReflectsVersionVar(t *testing.T) {
51 orig := version
52 version = "9.9.9-test"
53 defer func() { version = orig }()
54
55 out, err := executeCommand("version")
56 if err != nil {
57 t.Fatalf("version command failed: %v", err)
58 }
59 expected := "bug version 9.9.9-test"
60 if strings.TrimSpace(out) != expected {
61 t.Errorf("expected %q, got %q", expected, strings.TrimSpace(out))
62 }
63}
64
65func TestFormatVersion(t *testing.T) {
66 orig := version
67 version = "1.0.1"
68 defer func() { version = orig }()
69
70 if got := formatVersion(); got != "bug version 1.0.1" {
71 t.Errorf("formatVersion() = %q, want %q", got, "bug version 1.0.1")
72 }
73}