add tests for new Process* and OverwriteWith* functions
This commit is contained in:
parent
84b7154efc
commit
0769dd5839
|
@ -0,0 +1,271 @@
|
|||
package arg
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
// this file contains tests related to the precedence rules for:
|
||||
// ProcessCommandLine
|
||||
// ProcessOptions
|
||||
// ProcessPositionals
|
||||
// ProcessEnvironment
|
||||
// ProcessMap
|
||||
// ProcessSingle
|
||||
// ProcessSequence
|
||||
// OverwriteWithCommandLine
|
||||
// OverwriteWithOptions
|
||||
// OverwriteWithPositionals
|
||||
// OverwriteWithEnvironment
|
||||
// OverwriteWithMap
|
||||
//
|
||||
// The Process* functions should not overwrite fields that have
|
||||
// been previously populated, whereas the OverwriteWith* functions
|
||||
// should overwrite fields that have been previously populated.
|
||||
|
||||
// check that we can accumulate "separate" args across env, cmdline, map, and defaults
|
||||
|
||||
// check what happens if we have a required arg with a default value
|
||||
|
||||
// add more tests for combinations of separate and cardinality
|
||||
|
||||
// check what happens if we call ProcessCommandLine multiple times with different subcommands
|
||||
|
||||
func TestProcessOptions(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = p.ProcessOptions([]string{"program", "--arg=hello"})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "hello", args.Arg)
|
||||
}
|
||||
|
||||
func TestProcessOptionsDoesNotOverwrite(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string `arg:"env"`
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessEnvironment([]string{"ARG=123"})
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = p.ProcessOptions([]string{"--arg=hello"})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, "123", args.Arg)
|
||||
}
|
||||
|
||||
func TestOverwriteWithOptions(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string `arg:"env"`
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessEnvironment([]string{"ARG=123"})
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = p.OverwriteWithOptions([]string{"--arg=hello"})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, "hello", args.Arg)
|
||||
}
|
||||
|
||||
func TestProcessPositionals(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string `arg:"positional"`
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessPositionals([]string{"hello"})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "hello", args.Arg)
|
||||
}
|
||||
|
||||
func TestProcessPositionalsDoesNotOverwrite(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string `arg:"env,positional"`
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessEnvironment([]string{"ARG=123"})
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessPositionals([]string{"hello"})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, "123", args.Arg)
|
||||
}
|
||||
|
||||
func TestOverwriteWithPositionals(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string `arg:"env,positional"`
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessEnvironment([]string{"ARG=123"})
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.OverwriteWithPositionals([]string{"hello"})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, "hello", args.Arg)
|
||||
}
|
||||
|
||||
func TestProcessCommandLine(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessCommandLine([]string{"program", "--arg=hello"})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "hello", args.Arg)
|
||||
}
|
||||
|
||||
func TestProcessCommandLineDoesNotOverwrite(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string `arg:"env"`
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessEnvironment([]string{"ARG=123"})
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessCommandLine([]string{"program", "--arg=hello"})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, "123", args.Arg)
|
||||
}
|
||||
|
||||
func TestOverwriteWithCommandLine(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string `arg:"env"`
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessEnvironment([]string{"ARG=123"})
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.OverwriteWithCommandLine([]string{"program", "--arg=hello"})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, "hello", args.Arg)
|
||||
}
|
||||
|
||||
func TestProcessEnvironment(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string `arg:"env"`
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessEnvironment([]string{"ARG=hello"})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, "hello", args.Arg)
|
||||
}
|
||||
|
||||
func TestProcessEnvironmentDoesNotOverwrite(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string `arg:"env"`
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = p.ProcessOptions([]string{"--arg=123"})
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessEnvironment([]string{"ARG=hello"})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, "123", args.Arg)
|
||||
}
|
||||
|
||||
func TestOverwriteWithEnvironment(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string `arg:"env"`
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = p.ProcessOptions([]string{"--arg=123"})
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.OverwriteWithEnvironment([]string{"ARG=hello"})
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, "hello", args.Arg)
|
||||
}
|
||||
|
||||
func TestProcessDefaults(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string `default:"hello"`
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessDefaults()
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, "hello", args.Arg)
|
||||
}
|
||||
|
||||
func TestProcessDefaultsDoesNotOverwrite(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string `default:"hello"`
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = p.ProcessOptions([]string{"--arg=123"})
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.ProcessDefaults()
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, "123", args.Arg)
|
||||
}
|
||||
|
||||
func TestOverwriteWithDefaults(t *testing.T) {
|
||||
var args struct {
|
||||
Arg string `default:"hello"`
|
||||
}
|
||||
|
||||
p, err := NewParser(&args)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = p.ProcessOptions([]string{"--arg=123"})
|
||||
require.NoError(t, err)
|
||||
|
||||
err = p.OverwriteWithDefaults()
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, "hello", args.Arg)
|
||||
}
|
Loading…
Reference in New Issue