github.com/sona-tar/ghs@v0.0.0-20170415134710-bed1b2953748/options_test.go (about)

     1  package main
     2  
     3  import (
     4  	"net/url"
     5  	"reflect"
     6  	"strings"
     7  	"testing"
     8  )
     9  
    10  type parseTestReulst struct {
    11  	version  bool
    12  	exitCode int
    13  	sOpt     *SearchOpt
    14  }
    15  
    16  func TestOption_Parse(t *testing.T) {
    17  	assert := func(result interface{}, want interface{}) {
    18  		if !reflect.DeepEqual(result, want) {
    19  			t.Errorf("Returned %+v, want %+v", result, want)
    20  		}
    21  	}
    22  
    23  	// want :exit, exitCode , sOpt, url, token
    24  	assert(testParse("ghs -v"), &parseTestReulst{true, ExitCodeOK, nil})
    25  	assert(testParse("ghs -h"), &parseTestReulst{false, ExitCodeError, nil})
    26  
    27  	defaultOpt := SearchOpt{
    28  		sort:    "best match",
    29  		order:   "desc",
    30  		query:   "SEARCH_WORD",
    31  		max:     100,
    32  		perPage: 100,
    33  		baseURL: nil,
    34  		token:   "",
    35  	}
    36  
    37  	// normal query test
    38  	wantOpt := defaultOpt
    39  	assert(testParse("ghs SEARCH_WORD"), &parseTestReulst{false, ExitCodeOK, &wantOpt})
    40  	wantOpt = defaultOpt
    41  	wantOpt.sort = "stars"
    42  	assert(testParse("ghs -s stars SEARCH_WORD"), &parseTestReulst{false, ExitCodeOK, &wantOpt})
    43  	wantOpt = defaultOpt
    44  	wantOpt.order = "asc"
    45  	assert(testParse("ghs -o asc SEARCH_WORD"), &parseTestReulst{false, ExitCodeOK, &wantOpt})
    46  	wantOpt = defaultOpt
    47  	wantOpt.max = 1000
    48  	assert(testParse("ghs -m 1000 SEARCH_WORD"), &parseTestReulst{false, ExitCodeOK, &wantOpt})
    49  	wantOpt = defaultOpt
    50  	wantOpt.baseURL, _ = url.Parse("http://test.exmaple/")
    51  	assert(testParse("ghs -e http://test.exmaple/ SEARCH_WORD"), &parseTestReulst{false, ExitCodeOK, &wantOpt})
    52  	wantOpt = defaultOpt
    53  	wantOpt.token = "abcdefg"
    54  	assert(testParse("ghs -t abcdefg SEARCH_WORD"), &parseTestReulst{false, ExitCodeOK, &wantOpt})
    55  	wantOpt = defaultOpt
    56  	wantOpt.query = "in:name SEARCH_WORD"
    57  	assert(testParse("ghs -f name SEARCH_WORD"), &parseTestReulst{false, ExitCodeOK, &wantOpt})
    58  	wantOpt = defaultOpt
    59  	wantOpt.query = "user:sona-tar"
    60  	assert(testParse("ghs -u sona-tar"), &parseTestReulst{false, ExitCodeOK, &wantOpt})
    61  	wantOpt = defaultOpt
    62  	wantOpt.query = "repo:sona-tar/ghs"
    63  	assert(testParse("ghs -r sona-tar/ghs"), &parseTestReulst{false, ExitCodeOK, &wantOpt})
    64  	wantOpt = defaultOpt
    65  	wantOpt.query = "language:golang"
    66  	assert(testParse("ghs -l golang"), &parseTestReulst{false, ExitCodeOK, &wantOpt})
    67  
    68  	// no args test
    69  	assert(testParse("ghs"), &parseTestReulst{false, ExitCodeError, nil})
    70  	assert(testParse("ghs -o asc"), &parseTestReulst{false, ExitCodeError, nil})
    71  	wantOpt = defaultOpt
    72  	wantOpt.query = "user:sona-tar"
    73  	assert(testParse("ghs -u sona-tar"), &parseTestReulst{false, ExitCodeOK, &wantOpt})
    74  	wantOpt = defaultOpt
    75  	wantOpt.query = "repo:sona-tar/ghs"
    76  	assert(testParse("ghs -r sona-tar/ghs"), &parseTestReulst{false, ExitCodeOK, &wantOpt})
    77  	wantOpt = defaultOpt
    78  	wantOpt.query = "language:golang"
    79  	assert(testParse("ghs -l golang"), &parseTestReulst{false, ExitCodeOK, &wantOpt})
    80  
    81  	// invalid option value test
    82  	assert(testParse("ghs -m 1001 SEARCH_WORD"), &parseTestReulst{false, ExitCodeError, nil})
    83  	assert(testParse("ghs -m 0 SEARCH_WORD"), &parseTestReulst{false, ExitCodeError, nil})
    84  	assert(testParse("ghs -e : SEARCH_WORD"), &parseTestReulst{false, ExitCodeError, nil})
    85  }
    86  
    87  func testParse(args_string string) *parseTestReulst {
    88  	args := strings.Split(args_string, " ")[1:]
    89  	flags, _ := NewFlags(args)
    90  	version, exitCode, sOpt := flags.ParseOption()
    91  	return &parseTestReulst{version, exitCode, sOpt}
    92  }