Files
h/cmd/sort-cli/main_test.go

72 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"flag"
"os"
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
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()
}
}