67 lines
2.0 KiB
Go
67 lines
2.0 KiB
Go
package main
|
||
|
||
import (
|
||
"flag"
|
||
"github.com/stretchr/testify/assert"
|
||
"os"
|
||
"strings"
|
||
"testing"
|
||
)
|
||
|
||
func TestFlags(t *testing.T) {
|
||
// We manipulate the Args to set them up for the testcases
|
||
// after this test we restore the initial args
|
||
oldArgs := os.Args
|
||
defer func() { os.Args = oldArgs }()
|
||
|
||
cases := []struct {
|
||
Name string
|
||
Args []string
|
||
ExpectedExit int
|
||
ExpectedOutput string
|
||
}{
|
||
{"No flags",
|
||
[]string{"testdata/first"},
|
||
0,
|
||
"alabama barcelona\nbarcelona california\ncalifornia denver\ncalifornia denver\nамур брянск\nбелгород волгоград\nволгоград геленджик",
|
||
},
|
||
{"Reverse",
|
||
[]string{"-r", "testdata/first"},
|
||
0,
|
||
"волгоград геленджик\nбелгород волгоград\nамур брянск\ncalifornia denver\ncalifornia denver\nbarcelona california\nalabama barcelona",
|
||
},
|
||
{"Unique",
|
||
[]string{"-u", "testdata/first"},
|
||
0,
|
||
"alabama barcelona\nbarcelona california\ncalifornia denver\nамур брянск\nбелгород волгоград\nволгоград геленджик",
|
||
},
|
||
{"Column 2",
|
||
[]string{"-k=2", "testdata/first"},
|
||
0,
|
||
"alabama barcelona\nbarcelona california\ncalifornia denver\ncalifornia denver\nамур брянск\nбелгород волгоград\nволгоград геленджик",
|
||
},
|
||
}
|
||
|
||
for _, tc := range cases {
|
||
tc := tc
|
||
|
||
t.Run(tc.Name, func(t *testing.T) {
|
||
// this call is required because otherwise flags panics, if args are set between flag.Parse calls
|
||
flag.CommandLine = flag.NewFlagSet(tc.Name, flag.ExitOnError)
|
||
// we need a value to set Args[0] to, cause flag begins parsing at Args[1]
|
||
os.Args = append([]string{tc.Name}, tc.Args...)
|
||
|
||
assert.Equal(t, tc.ExpectedOutput, strings.Trim(run(), "\n"))
|
||
})
|
||
}
|
||
}
|
||
|
||
func BenchmarkRun(b *testing.B) {
|
||
for i := 0; i < b.N; i++ {
|
||
flag.CommandLine = flag.NewFlagSet("Bench", flag.ExitOnError)
|
||
os.Args = append([]string{"Bench"}, "testdata/first")
|
||
|
||
_ = run()
|
||
}
|
||
}
|