mirror of
https://github.com/mikefarah/yq.git
synced 2026-03-10 15:54:26 +00:00
222 lines
5.9 KiB
Go
222 lines
5.9 KiB
Go
package main
|
|
|
|
import (
|
|
"testing"
|
|
|
|
command "github.com/mikefarah/yq/v4/cmd"
|
|
)
|
|
|
|
func TestMainFunction(t *testing.T) {
|
|
// This is a basic smoke test for the main function
|
|
// We can't easily test the main function directly since it calls os.Exit
|
|
// But we can test the logic that would be executed
|
|
|
|
cmd := command.New()
|
|
if cmd == nil {
|
|
t.Fatal("command.New() returned nil")
|
|
}
|
|
|
|
if cmd.Use != "yq" {
|
|
t.Errorf("Expected command Use to be 'yq', got %q", cmd.Use)
|
|
}
|
|
}
|
|
|
|
func TestMainFunctionLogic(t *testing.T) {
|
|
// Test the logic that would be executed in main()
|
|
cmd := command.New()
|
|
|
|
args := []string{}
|
|
_, _, err := cmd.Find(args)
|
|
if err != nil {
|
|
t.Errorf("Expected no error with empty args, but got: %v", err)
|
|
}
|
|
|
|
args = []string{"invalid-command"}
|
|
_, _, err = cmd.Find(args)
|
|
if err == nil {
|
|
t.Error("Expected error when invalid command found, but got nil")
|
|
}
|
|
|
|
args = []string{"eval"}
|
|
_, _, err = cmd.Find(args)
|
|
if err != nil {
|
|
t.Errorf("Expected no error with valid command 'eval', got: %v", err)
|
|
}
|
|
|
|
args = []string{"__complete"}
|
|
_, _, err = cmd.Find(args)
|
|
if err == nil {
|
|
t.Error("Expected error when no command found for '__complete', but got nil")
|
|
}
|
|
|
|
args = []string{"__completeNoDesc"}
|
|
_, _, err = cmd.Find(args)
|
|
if err == nil {
|
|
t.Error("Expected error when no command found for '__completeNoDesc', but got nil")
|
|
}
|
|
}
|
|
|
|
func TestMainFunctionWithArgs(t *testing.T) {
|
|
// Test the argument processing logic
|
|
cmd := command.New()
|
|
|
|
args := []string{}
|
|
_, _, err := cmd.Find(args)
|
|
if err != nil {
|
|
t.Errorf("Expected no error with empty args, but got: %v", err)
|
|
}
|
|
|
|
// When Find fails and args[0] is not "__complete", main would set args to ["eval"] + original args
|
|
// This is the logic: newArgs := []string{"eval"}
|
|
// cmd.SetArgs(append(newArgs, os.Args[1:]...))
|
|
|
|
args = []string{"invalid"}
|
|
_, _, err = cmd.Find(args)
|
|
if err == nil {
|
|
t.Error("Expected error with invalid command")
|
|
}
|
|
|
|
args = []string{"__complete"}
|
|
_, _, err = cmd.Find(args)
|
|
if err == nil {
|
|
t.Error("Expected error with __complete command")
|
|
}
|
|
|
|
args = []string{"__completeNoDesc"}
|
|
_, _, err = cmd.Find(args)
|
|
if err == nil {
|
|
t.Error("Expected error with __completeNoDesc command")
|
|
}
|
|
}
|
|
|
|
func TestMainFunctionExecution(t *testing.T) {
|
|
// Test that the command can be executed without crashing
|
|
cmd := command.New()
|
|
|
|
cmd.SetArgs([]string{"--version"})
|
|
|
|
// We can't easily test os.Exit(1) behaviour, but we can test that
|
|
// the command structure is correct and can be configured
|
|
if cmd == nil {
|
|
t.Fatal("Command should not be nil")
|
|
}
|
|
|
|
if cmd.Use != "yq" {
|
|
t.Errorf("Expected command Use to be 'yq', got %q", cmd.Use)
|
|
}
|
|
}
|
|
|
|
func TestMainFunctionErrorHandling(t *testing.T) {
|
|
// Test the error handling logic that would be in main()
|
|
cmd := command.New()
|
|
|
|
args := []string{"nonexistent-command"}
|
|
_, _, err := cmd.Find(args)
|
|
if err == nil {
|
|
t.Error("Expected error with nonexistent command")
|
|
}
|
|
|
|
// The main function logic would be:
|
|
// if err != nil && args[0] != "__complete" {
|
|
// newArgs := []string{"eval"}
|
|
// cmd.SetArgs(append(newArgs, os.Args[1:]...))
|
|
// }
|
|
|
|
// Test that this logic would work
|
|
if args[0] != "__complete" {
|
|
// This is what main() would do
|
|
newArgs := []string{"eval"}
|
|
cmd.SetArgs(append(newArgs, args...))
|
|
|
|
// We can't easily verify the args were set correctly since cmd.Args is a function
|
|
// But we can test that SetArgs doesn't crash and the command is still valid
|
|
if cmd == nil {
|
|
t.Error("Command should not be nil after SetArgs")
|
|
}
|
|
|
|
_, _, err := cmd.Find([]string{"eval"})
|
|
if err != nil {
|
|
t.Errorf("Should be able to find eval command after SetArgs: %v", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMainFunctionWithCompletionCommand(t *testing.T) {
|
|
// Test that __complete command doesn't trigger default command logic
|
|
cmd := command.New()
|
|
|
|
args := []string{"__complete"}
|
|
_, _, err := cmd.Find(args)
|
|
if err == nil {
|
|
t.Error("Expected error with __complete command")
|
|
}
|
|
|
|
// The main function logic would be:
|
|
// if err != nil && args[0] != "__complete" {
|
|
// // This should NOT execute for __complete
|
|
// }
|
|
|
|
// Verify that __complete doesn't trigger the default command logic
|
|
if args[0] == "__complete" {
|
|
// This means the default command logic should NOT execute
|
|
t.Log("__complete command correctly identified, default command logic should not execute")
|
|
}
|
|
}
|
|
|
|
func TestMainFunctionWithCompletionNoDescCommand(t *testing.T) {
|
|
// Test that __complete command doesn't trigger default command logic
|
|
cmd := command.New()
|
|
|
|
args := []string{"__completeNoDesc"}
|
|
_, _, err := cmd.Find(args)
|
|
if err == nil {
|
|
t.Error("Expected error with __completeNoDesc command")
|
|
}
|
|
|
|
// The main function logic would be:
|
|
// if err != nil && args[0] != "__completeNoDesc" {
|
|
// // This should NOT execute for __completeNoDesc
|
|
// }
|
|
|
|
// Verify that __completeNoDesc doesn't trigger the default command logic
|
|
if args[0] == "__completeNoDesc" {
|
|
// This means the default command logic should NOT execute
|
|
t.Log("__completeNoDesc command correctly identified, default command logic should not execute")
|
|
}
|
|
}
|
|
|
|
func TestMainFunctionIntegration(t *testing.T) {
|
|
// Integration test to verify the main function logic works end-to-end
|
|
|
|
cmd := command.New()
|
|
cmd.SetArgs([]string{"eval", "--help"})
|
|
|
|
// This should not crash (we can't test the actual execution due to os.Exit)
|
|
if cmd == nil {
|
|
t.Fatal("Command should not be nil")
|
|
}
|
|
|
|
cmd2 := command.New()
|
|
cmd2.SetArgs([]string{"invalid-command"})
|
|
|
|
// Simulate the main function logic
|
|
args := []string{"invalid-command"}
|
|
_, _, err := cmd2.Find(args)
|
|
if err != nil {
|
|
// This is what main() would do
|
|
newArgs := []string{"eval"}
|
|
cmd2.SetArgs(append(newArgs, args...))
|
|
}
|
|
|
|
// We can't directly access cmd.Args since it's a function, but we can test
|
|
// that SetArgs worked by ensuring the command is still functional
|
|
if cmd2 == nil {
|
|
t.Error("Command should not be nil after SetArgs")
|
|
}
|
|
|
|
_, _, err = cmd2.Find([]string{"eval"})
|
|
if err != nil {
|
|
t.Errorf("Should be able to find eval command after SetArgs: %v", err)
|
|
}
|
|
}
|