package pattern import ( "testing" "github.com/stretchr/testify/require" ) func Test_Parse(t *testing.T) { for _, tc := range []struct { input string expected expr err error }{ { " bar f ", expr{capture("foo"), literals(" bar f "), capture("f")}, nil, }, { "", expr{literals(""), capture("bar")}, nil, }, { "<>", expr{literals("<>")}, nil, }, { "<_>", expr{capture("_")}, nil, }, { "<1_>", expr{literals("<1_>")}, nil, }, { ` - [<_>] " <_>" `, expr{capture("ip"), literals(" - "), capture("user"), literals(" ["), capture("_"), literals(`] "`), capture("method"), literals(" "), capture("path"), literals(" "), capture('_'), literals(`" `), capture("status"), literals(" "), capture("size"), literals(" "), capture("url"), literals(" "), capture("user_agent")}, nil, }, } { tc := tc actual, err := parseExpr(tc.input) if tc.err != nil || err != nil { require.Equal(t, tc.err, err) return } require.Equal(t, tc.expected, actual) } }