blob: 3f9aac8736d03693685b4018cfa6cb65123a5015 [file] [log] [blame]
// Copyright 2012 Marc-Antoine Ruel. All rights reserved.
// Use of this source code is governed under the Apache License, Version 2.0
// that can be found in the LICENSE file.
// Package subcommands permits a Go application to implement subcommands support
// similar to what is supported by the 'go' tool.
//
// The library is designed so that the test cases can run concurrently.
// Using global flags variables is discouraged to keep your program testable
// conccurently.
package subcommands
import (
"testing"
"github.com/maruel/ut"
)
func TestFindCommand(t *testing.T) {
commands := []*Command{
{UsageLine: "Fo"},
{UsageLine: "Foo bar"},
{UsageLine: "LongCommand"},
}
a := &DefaultApplication{Commands: commands}
// Exact
ut.AssertEqual(t, commands[0], FindCommand(a, "Fo"))
ut.AssertEqual(t, commands[1], FindCommand(a, "Foo"))
ut.AssertEqual(t, commands[2], FindCommand(a, "LongCommand"))
// Prefix
ut.AssertEqual(t, (*Command)(nil), FindCommand(a, "F"))
ut.AssertEqual(t, (*Command)(nil), FindCommand(a, "LongC"))
// Case insensitive
ut.AssertEqual(t, (*Command)(nil), FindCommand(a, "fo"))
ut.AssertEqual(t, (*Command)(nil), FindCommand(a, "foo"))
ut.AssertEqual(t, (*Command)(nil), FindCommand(a, "longcommand"))
}
func TestFindNearestCommand(t *testing.T) {
commands := []*Command{
{UsageLine: "Fo"},
{UsageLine: "Foo"},
{UsageLine: "LongCommand"},
{UsageLine: "LargCommand"},
}
a := &DefaultApplication{Commands: commands}
// Exact
ut.AssertEqual(t, commands[0], FindNearestCommand(a, "Fo"))
ut.AssertEqual(t, commands[1], FindNearestCommand(a, "Foo"))
ut.AssertEqual(t, commands[2], FindNearestCommand(a, "LongCommand"))
// Prefix
ut.AssertEqual(t, (*Command)(nil), FindNearestCommand(a, "F"))
ut.AssertEqual(t, commands[2], FindNearestCommand(a, "Lo"))
// Case insensitive
ut.AssertEqual(t, (*Command)(nil), FindNearestCommand(a, "fo"))
ut.AssertEqual(t, commands[1], FindNearestCommand(a, "foo"))
ut.AssertEqual(t, commands[2], FindNearestCommand(a, "longcommand"))
ut.AssertEqual(t, commands[2], FindNearestCommand(a, "longc"))
// Based on levenshtein distance
ut.AssertEqual(t, (*Command)(nil), FindNearestCommand(a, "Fof"))
ut.AssertEqual(t, commands[2], FindNearestCommand(a, "LongCommandd"))
ut.AssertEqual(t, commands[2], FindNearestCommand(a, "LongCmomand"))
ut.AssertEqual(t, commands[2], FindNearestCommand(a, "ongCommand"))
ut.AssertEqual(t, (*Command)(nil), FindNearestCommand(a, "LangCommand"))
}