139 lines
3.6 KiB
Go
139 lines
3.6 KiB
Go
package ruleset_v2
|
|
|
|
import (
|
|
"errors"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestParseFuncCall(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
input string
|
|
expected struct {
|
|
funcName string
|
|
params []string
|
|
err error
|
|
}
|
|
}{
|
|
{
|
|
name: "Normal case, one param",
|
|
input: `one("baz")`,
|
|
expected: struct {
|
|
funcName string
|
|
params []string
|
|
err error
|
|
}{funcName: "one", params: []string{"baz"}, err: nil},
|
|
},
|
|
{
|
|
name: "Normal case, one param, extra space in function call",
|
|
input: `two("baz" )`,
|
|
expected: struct {
|
|
funcName string
|
|
params []string
|
|
err error
|
|
}{funcName: "two", params: []string{"baz"}, err: nil},
|
|
},
|
|
{
|
|
name: "Normal case, one param, extra space in param",
|
|
input: `three("baz ")`,
|
|
expected: struct {
|
|
funcName string
|
|
params []string
|
|
err error
|
|
}{funcName: "three", params: []string{"baz "}, err: nil},
|
|
},
|
|
{
|
|
name: "Space in front of function",
|
|
input: ` three("baz")`,
|
|
expected: struct {
|
|
funcName string
|
|
params []string
|
|
err error
|
|
}{funcName: "three", params: []string{"baz"}, err: nil},
|
|
},
|
|
{
|
|
name: "Normal case, two params",
|
|
input: `foobar("baz", "qux")`,
|
|
expected: struct {
|
|
funcName string
|
|
params []string
|
|
err error
|
|
}{funcName: "foobar", params: []string{"baz", "qux"}, err: nil},
|
|
},
|
|
{
|
|
name: "Normal case, two params, no spaces between param comma",
|
|
input: `foobar("baz","qux")`,
|
|
expected: struct {
|
|
funcName string
|
|
params []string
|
|
err error
|
|
}{funcName: "foobar", params: []string{"baz", "qux"}, err: nil},
|
|
},
|
|
{
|
|
name: "Escaped parenthesis",
|
|
input: `testFunc("hello\(world", "anotherParam")`,
|
|
expected: struct {
|
|
funcName string
|
|
params []string
|
|
err error
|
|
}{funcName: "testFunc", params: []string{`hello(world`, "anotherParam"}, err: nil},
|
|
},
|
|
{
|
|
name: "Escaped quote",
|
|
input: `testFunc("hello\"world", "anotherParam")`,
|
|
expected: struct {
|
|
funcName string
|
|
params []string
|
|
err error
|
|
}{funcName: "testFunc", params: []string{`hello"world`, "anotherParam"}, err: nil},
|
|
},
|
|
{
|
|
name: "Two Escaped quote",
|
|
input: `testFunc("hello: \"world\"", "anotherParam")`,
|
|
expected: struct {
|
|
funcName string
|
|
params []string
|
|
err error
|
|
}{funcName: "testFunc", params: []string{`hello: "world"`, "anotherParam"}, err: nil},
|
|
},
|
|
{
|
|
name: "No parameters",
|
|
input: `emptyFunc()`,
|
|
expected: struct {
|
|
funcName string
|
|
params []string
|
|
err error
|
|
}{funcName: "emptyFunc", params: []string{}, err: nil},
|
|
},
|
|
{
|
|
name: "Invalid format",
|
|
input: `invalidFunc`,
|
|
expected: struct {
|
|
funcName string
|
|
params []string
|
|
err error
|
|
}{funcName: "", params: nil, err: errors.New("invalid function call format")},
|
|
},
|
|
{
|
|
name: "Invalid format 2",
|
|
input: `invalidFunc "foo", "bar"`,
|
|
expected: struct {
|
|
funcName string
|
|
params []string
|
|
err error
|
|
}{funcName: "", params: nil, err: errors.New("invalid function call format")},
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
funcName, params, err := parseFuncCall(tc.input)
|
|
if funcName != tc.expected.funcName || !reflect.DeepEqual(params, tc.expected.params) || (err != nil && tc.expected.err != nil && err.Error() != tc.expected.err.Error()) {
|
|
//if funcName != tc.expected.funcName || (err != nil && tc.expected.err != nil && err.Error() != tc.expected.err.Error()) {
|
|
t.Errorf("Test %s failed: got (%s, %v, %v), want (%s, %v, %v)", tc.name, funcName, params, err, tc.expected.funcName, tc.expected.params, tc.expected.err)
|
|
}
|
|
})
|
|
}
|
|
}
|