123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package flags
- import (
- "fmt"
- "testing"
- )
- type marshalled string
- func (m *marshalled) UnmarshalFlag(value string) error {
- if value == "yes" {
- *m = "true"
- } else if value == "no" {
- *m = "false"
- } else {
- return fmt.Errorf("`%s' is not a valid value, please specify `yes' or `no'", value)
- }
- return nil
- }
- func (m marshalled) MarshalFlag() (string, error) {
- if m == "true" {
- return "yes", nil
- }
- return "no", nil
- }
- type marshalledError bool
- func (m marshalledError) MarshalFlag() (string, error) {
- return "", newErrorf(ErrMarshal, "Failed to marshal")
- }
- func TestUnmarshal(t *testing.T) {
- var opts = struct {
- Value marshalled `short:"v"`
- }{}
- ret := assertParseSuccess(t, &opts, "-v=yes")
- assertStringArray(t, ret, []string{})
- if opts.Value != "true" {
- t.Errorf("Expected Value to be \"true\"")
- }
- }
- func TestUnmarshalDefault(t *testing.T) {
- var opts = struct {
- Value marshalled `short:"v" default:"yes"`
- }{}
- ret := assertParseSuccess(t, &opts)
- assertStringArray(t, ret, []string{})
- if opts.Value != "true" {
- t.Errorf("Expected Value to be \"true\"")
- }
- }
- func TestUnmarshalOptional(t *testing.T) {
- var opts = struct {
- Value marshalled `short:"v" optional:"yes" optional-value:"yes"`
- }{}
- ret := assertParseSuccess(t, &opts, "-v")
- assertStringArray(t, ret, []string{})
- if opts.Value != "true" {
- t.Errorf("Expected Value to be \"true\"")
- }
- }
- func TestUnmarshalError(t *testing.T) {
- var opts = struct {
- Value marshalled `short:"v"`
- }{}
- assertParseFail(t, ErrMarshal, fmt.Sprintf("invalid argument for flag `%cv' (expected flags.marshalled): `invalid' is not a valid value, please specify `yes' or `no'", defaultShortOptDelimiter), &opts, "-vinvalid")
- }
- func TestUnmarshalPositionalError(t *testing.T) {
- var opts = struct {
- Args struct {
- Value marshalled
- } `positional-args:"yes"`
- }{}
- parser := NewParser(&opts, Default&^PrintErrors)
- _, err := parser.ParseArgs([]string{"invalid"})
- msg := "`invalid' is not a valid value, please specify `yes' or `no'"
- if err == nil {
- assertFatalf(t, "Expected error: %s", msg)
- return
- }
- if err.Error() != msg {
- assertErrorf(t, "Expected error message %#v, but got %#v", msg, err.Error())
- }
- }
- func TestMarshalError(t *testing.T) {
- var opts = struct {
- Value marshalledError `short:"v"`
- }{}
- p := NewParser(&opts, Default)
- o := p.Command.Groups()[0].Options()[0]
- _, err := convertToString(o.value, o.tag)
- assertError(t, err, ErrMarshal, "Failed to marshal")
- }
|