GetoptGo/getopt_test/getopt_test.go

116 lines
2.7 KiB
Go

package getopt_test
import (
g "gitea.sergiotarxz.freemyip.com/sergiotarxz/GetoptGo"
"regexp"
"testing"
"reflect"
)
func TestStringArgNull(t *testing.T) {
getopt := g.New()
hello := getopt.StringLong(s("hello"), nil, false, "Try")
getopt.Parse([]string{})
if hello == nil {
t.Error("Unable to dereference hello")
}
if *hello != nil {
t.Error("Hola was not set to nil")
}
}
func TestStringArgNotNull(t *testing.T) {
getopt := g.New()
hello := getopt.StringLong(s("hello"), nil, false, "Try")
getopt.Parse([]string{"--hello", "hello"})
if hello == nil {
t.Error("Unable to dereference hello")
}
if *hello == nil {
t.Error("--hello is not received.")
}
if **hello != "hello" {
t.Error("Unexpected value in --hello " + **hello + ".")
}
}
func TestStringArgNotNullWithRune(t *testing.T) {
getopt := g.New()
hello := getopt.StringLong(nil, r('h'), false, "Try")
getopt.Parse([]string{"-hhello"})
if hello == nil {
t.Error("Unable to dereference hello")
}
if *hello == nil {
t.Error("-h is not received.")
}
if **hello != "hello" {
t.Error("Unexpected value in --hello " + **hello + ".")
}
}
func TestStringArgNotNullWithRuneUsingExternalArgument(t *testing.T) {
getopt := g.New()
hello := getopt.StringLong(nil, r('h'), false, "Try")
getopt.Parse([]string{"-h", "hello"})
if hello == nil {
t.Error("Unable to dereference hello")
}
if *hello == nil {
t.Error("-h is not received.")
}
if **hello != "hello" {
t.Error("Unexpected value in --hello " + **hello + ".")
}
}
func TestParsingNonOptionAndNotOptionArgument(t *testing.T) {
getopt := g.New()
getopt.StringLong(nil, r('h'), false, "Try")
getopt.Parse([]string{"-h", "a", "hello", "world"})
args := getopt.NoOptionArgs()
if args[0] != "hello" {
t.Error("Argument hello not received.")
}
if args[1] != "world" {
t.Error("Argument world not received.")
}
}
func TestParsingBoolOptionFalse(t *testing.T) {
getopt := g.New()
h := getopt.BoolLong(nil, r('h'), "Try")
getopt.Parse([]string{""})
if *h {
t.Error("Unexpected value of -h.")
}
}
func TestParsingBoolOptionTrue(t *testing.T) {
getopt := g.New()
h := getopt.BoolLong(nil, r('h'), "Try")
getopt.Parse([]string{"-h"})
if !*h {
t.Error("Unexpected value of -h.")
}
}
func TestParsingBoolOptionUsage(t *testing.T) {
getopt := g.New()
getopt.BoolLong(s("help"), r('h'), "Try")
getopt.Parse([]string{""})
result_string := getopt.UsageString()
expected := []string{"--help", "-h", "(required)", "Try"}
re := regexp.MustCompile(`\t(\S+)\t(\S+)\t\t(\S+)\t(\S+)`)
if reflect.DeepEqual(re.FindStringSubmatch(result_string), expected) {
t.Error("Unmatched expected and result.")
}
}
func s(a string) *string {
return &a
}
func r(a rune) *rune {
return &a
}