pkgsrc/pkgtools/pkglint/files/getopt_test.go
rillig b3f1f41fde Updated pkglint to 5.2.
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)
2015-12-05 08:54:08 +00:00

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)
}