1// Copyright (c) 2015-2021 MinIO, Inc.
2//
3// This file is part of MinIO Object Storage stack
4//
5// This program is free software: you can redistribute it and/or modify
6// it under the terms of the GNU Affero General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13// GNU Affero General Public License for more details.
14//
15// You should have received a copy of the GNU Affero General Public License
16// along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18package cmd
19
20import (
21	"fmt"
22	"testing"
23
24	"github.com/minio/cli"
25)
26
27func TestAutoCompletionCompletness(t *testing.T) {
28
29	var checkCompletion func(cmd cli.Command, cmdPath string) error
30
31	checkCompletion = func(cmd cli.Command, cmdPath string) error {
32		if cmd.Subcommands != nil {
33			for _, subCmd := range cmd.Subcommands {
34				if cmd.Hidden {
35					continue
36				}
37				err := checkCompletion(subCmd, cmdPath+"/"+subCmd.Name)
38				if err != nil {
39					return err
40				}
41			}
42			return nil
43		}
44		_, ok := completeCmds[cmdPath]
45		if !ok && !cmd.Hidden {
46			return fmt.Errorf("Completion for `%s` not found", cmdPath)
47		}
48		return nil
49	}
50
51	for _, cmd := range appCmds {
52		if cmd.Hidden {
53			continue
54		}
55		err := checkCompletion(cmd, "/"+cmd.Name)
56		if err != nil {
57			t.Fatalf("Missing completion function: %v", err)
58		}
59
60	}
61}
62