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  }