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 }