b3f1f41fde
Changes since 5.1: * Fixed distinfo check for unrecorded patch files (thanks, wiz) * Command line options parser accepts abbreviations (--a instead of --autofix) * Realistic unit tests using temporary files * General code cleanup (using gometalinter)
95 lines
2.6 KiB
Go
95 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
check "gopkg.in/check.v1"
|
|
)
|
|
|
|
func (s *Suite) TestGetopt_Short(c *check.C) {
|
|
opts := NewOptions()
|
|
var help bool
|
|
opts.AddFlagVar('h', "help", &help, false, "prints a help page")
|
|
|
|
args, err := opts.Parse([]string{"progname", "-h"})
|
|
|
|
c.Assert(err, check.IsNil)
|
|
c.Check(args, check.IsNil)
|
|
c.Check(help, equals, true)
|
|
}
|
|
|
|
func (s *Suite) TestGetopt_UnknownShort(c *check.C) {
|
|
opts := NewOptions()
|
|
|
|
_, err := opts.Parse([]string{"progname", "-z"})
|
|
|
|
c.Check(err.Error(), equals, "progname: unknown option: -z")
|
|
}
|
|
|
|
func (s *Suite) TestGetopt_UnknownLong(c *check.C) {
|
|
opts := NewOptions()
|
|
|
|
_, err := opts.Parse([]string{"progname", "--unknown-long"})
|
|
|
|
c.Check(err.Error(), equals, "progname: unknown option: --unknown-long")
|
|
}
|
|
|
|
func (s *Suite) TestGetopt_UnknownFlagInGroup(c *check.C) {
|
|
opts := NewOptions()
|
|
opts.AddFlagGroup('W', "warnings", "", "")
|
|
|
|
_, err := opts.Parse([]string{"progname", "-Wall", "-Werror"})
|
|
|
|
c.Check(err.Error(), equals, "progname: unknown option: -Werror")
|
|
|
|
_, err = opts.Parse([]string{"progname", "--warnings=all", "--warnings=no-error"})
|
|
|
|
c.Check(err.Error(), equals, "progname: unknown option: --warnings=no-error")
|
|
}
|
|
|
|
func (s *Suite) TestGetopt_AbbreviatedLong(c *check.C) {
|
|
opts := NewOptions()
|
|
var longFlag, longerFlag bool
|
|
opts.AddFlagVar('?', "long", &longFlag, false, "")
|
|
opts.AddFlagVar('?', "longer", &longerFlag, false, "")
|
|
|
|
_, err := opts.Parse([]string{"progname", "--lo"})
|
|
|
|
c.Check(err.Error(), equals, "progname: ambiguous option: --lo could mean --long or --longer")
|
|
|
|
args, err := opts.Parse([]string{"progname", "--long"})
|
|
|
|
c.Assert(err, check.IsNil)
|
|
c.Check(args, check.IsNil)
|
|
c.Check(longFlag, equals, true)
|
|
c.Check(longerFlag, equals, false)
|
|
|
|
longFlag = false
|
|
args, err = opts.Parse([]string{"progname", "--longe"})
|
|
|
|
c.Assert(err, check.IsNil)
|
|
c.Check(args, check.IsNil)
|
|
c.Check(longFlag, equals, false)
|
|
c.Check(longerFlag, equals, true)
|
|
}
|
|
|
|
func (s *Suite) TestGetopt_MixedArgsAndOptions(c *check.C) {
|
|
opts := NewOptions()
|
|
var aflag, bflag bool
|
|
opts.AddFlagVar('a', "aflag", &aflag, false, "")
|
|
opts.AddFlagVar('b', "bflag", &bflag, false, "")
|
|
|
|
args, err := opts.Parse([]string{"progname", "-a", "arg1", "-b", "arg2"})
|
|
|
|
c.Assert(err, check.IsNil)
|
|
c.Check(args, check.DeepEquals, []string{"arg1", "arg2"})
|
|
c.Check(aflag, equals, true)
|
|
c.Check(bflag, equals, true)
|
|
|
|
aflag = false
|
|
bflag = false
|
|
args, err = opts.Parse([]string{"progname", "-a", "--", "arg1", "-b", "arg2"})
|
|
|
|
c.Assert(err, check.IsNil)
|
|
c.Check(args, check.DeepEquals, []string{"arg1", "-b", "arg2"})
|
|
c.Check(aflag, equals, true)
|
|
c.Check(bflag, equals, false)
|
|
}
|