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