github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/app/slashcommands/util_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package slashcommands 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestParseNamedArgs(t *testing.T) { 13 data := []struct { 14 name string 15 s string 16 m map[string]string 17 }{ 18 {"empty", "", map[string]string{}}, 19 {"gibberish", "ifu3ue-h29f8", map[string]string{}}, 20 {"action only", "remote status", map[string]string{ActionKey: "status"}}, 21 {"no action", "remote --arg1 val1 --arg2 val2", map[string]string{"arg1": "val1", "arg2": "val2"}}, 22 {"command only", "remote", map[string]string{}}, 23 {"trailing empty arg", "remote add --arg1 val1 --arg2", map[string]string{ActionKey: "add", "arg1": "val1", "arg2": ""}}, 24 {"leading empty arg", "remote add --arg1 --arg2 val2", map[string]string{ActionKey: "add", "arg1": "", "arg2": "val2"}}, 25 {"weird", "-- -- -- --", map[string]string{}}, 26 {"hyphen before action", "remote -- add", map[string]string{}}, 27 {"trailing hyphen", "remote add -- ", map[string]string{ActionKey: "add"}}, 28 {"hyphen in val", "remote add --arg1 val-1 ", map[string]string{ActionKey: "add", "arg1": "val-1"}}, 29 {"quote prefix and suffix", "remote add --arg1 \"val-1\"", map[string]string{ActionKey: "add", "arg1": "val-1"}}, 30 {"quote embedded", "remote add --arg1 O'Brien", map[string]string{ActionKey: "add", "arg1": "O'Brien"}}, 31 {"quote prefix, suffix, and embedded", "remote add --arg1 \"O'Brien\"", map[string]string{ActionKey: "add", "arg1": "O'Brien"}}, 32 {"empty quotes", "remote add --arg1 \"\"", map[string]string{ActionKey: "add", "arg1": ""}}, 33 } 34 35 for _, tt := range data { 36 m := parseNamedArgs(tt.s) 37 assert.NotNil(t, m) 38 assert.Equal(t, tt.m, m, tt.name) 39 } 40 }