|
@@ -455,3 +455,203 @@ func TestParseUri(t *testing.T) {
|
|
|
log.Printf("test '%s' : OK", test.name)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func TestQueryEscape(t *testing.T) {
|
|
|
+ tests := []struct {
|
|
|
+ name string
|
|
|
+ env map[string]interface{}
|
|
|
+ code string
|
|
|
+ result string
|
|
|
+ err string
|
|
|
+ }{
|
|
|
+ {
|
|
|
+ name: "QueryEscape() test: basic test",
|
|
|
+ env: map[string]interface{}{
|
|
|
+ "uri": "/foo?a=1&b=2",
|
|
|
+ "QueryEscape": QueryEscape,
|
|
|
+ },
|
|
|
+ code: "QueryEscape(uri)",
|
|
|
+ result: "%2Ffoo%3Fa%3D1%26b%3D2",
|
|
|
+ err: "",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "QueryEscape() test: basic test",
|
|
|
+ env: map[string]interface{}{
|
|
|
+ "uri": "/foo?a=1&&b=<>'\"",
|
|
|
+ "QueryEscape": QueryEscape,
|
|
|
+ },
|
|
|
+ code: "QueryEscape(uri)",
|
|
|
+ result: "%2Ffoo%3Fa%3D1%26%26b%3D%3C%3E%27%22",
|
|
|
+ err: "",
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, test := range tests {
|
|
|
+ program, err := expr.Compile(test.code, expr.Env(test.env))
|
|
|
+ require.NoError(t, err)
|
|
|
+ output, err := expr.Run(program, test.env)
|
|
|
+ require.NoError(t, err)
|
|
|
+ require.Equal(t, test.result, output)
|
|
|
+ log.Printf("test '%s' : OK", test.name)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestPathEscape(t *testing.T) {
|
|
|
+ tests := []struct {
|
|
|
+ name string
|
|
|
+ env map[string]interface{}
|
|
|
+ code string
|
|
|
+ result string
|
|
|
+ err string
|
|
|
+ }{
|
|
|
+ {
|
|
|
+ name: "PathEscape() test: basic test",
|
|
|
+ env: map[string]interface{}{
|
|
|
+ "uri": "/foo?a=1&b=2",
|
|
|
+ "PathEscape": PathEscape,
|
|
|
+ },
|
|
|
+ code: "PathEscape(uri)",
|
|
|
+ result: "%2Ffoo%3Fa=1&b=2",
|
|
|
+ err: "",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "PathEscape() test: basic test with more special chars",
|
|
|
+ env: map[string]interface{}{
|
|
|
+ "uri": "/foo?a=1&&b=<>'\"",
|
|
|
+ "PathEscape": PathEscape,
|
|
|
+ },
|
|
|
+ code: "PathEscape(uri)",
|
|
|
+ result: "%2Ffoo%3Fa=1&&b=%3C%3E%27%22",
|
|
|
+ err: "",
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, test := range tests {
|
|
|
+ program, err := expr.Compile(test.code, expr.Env(test.env))
|
|
|
+ require.NoError(t, err)
|
|
|
+ output, err := expr.Run(program, test.env)
|
|
|
+ require.NoError(t, err)
|
|
|
+ require.Equal(t, test.result, output)
|
|
|
+ log.Printf("test '%s' : OK", test.name)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestPathUnescape(t *testing.T) {
|
|
|
+ tests := []struct {
|
|
|
+ name string
|
|
|
+ env map[string]interface{}
|
|
|
+ code string
|
|
|
+ result string
|
|
|
+ err string
|
|
|
+ }{
|
|
|
+ {
|
|
|
+ name: "PathUnescape() test: basic test",
|
|
|
+ env: map[string]interface{}{
|
|
|
+ "uri": "%2Ffoo%3Fa=1&b=%3C%3E%27%22",
|
|
|
+ "PathUnescape": PathUnescape,
|
|
|
+ },
|
|
|
+ code: "PathUnescape(uri)",
|
|
|
+ result: "/foo?a=1&b=<>'\"",
|
|
|
+ err: "",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "PathUnescape() test: basic test with more special chars",
|
|
|
+ env: map[string]interface{}{
|
|
|
+ "uri": "/$%7Bjndi",
|
|
|
+ "PathUnescape": PathUnescape,
|
|
|
+ },
|
|
|
+ code: "PathUnescape(uri)",
|
|
|
+ result: "/${jndi",
|
|
|
+ err: "",
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, test := range tests {
|
|
|
+ program, err := expr.Compile(test.code, expr.Env(test.env))
|
|
|
+ require.NoError(t, err)
|
|
|
+ output, err := expr.Run(program, test.env)
|
|
|
+ require.NoError(t, err)
|
|
|
+ require.Equal(t, test.result, output)
|
|
|
+ log.Printf("test '%s' : OK", test.name)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestQueryUnescape(t *testing.T) {
|
|
|
+ tests := []struct {
|
|
|
+ name string
|
|
|
+ env map[string]interface{}
|
|
|
+ code string
|
|
|
+ result string
|
|
|
+ err string
|
|
|
+ }{
|
|
|
+ {
|
|
|
+ name: "QueryUnescape() test: basic test",
|
|
|
+ env: map[string]interface{}{
|
|
|
+ "uri": "%2Ffoo%3Fa=1&b=%3C%3E%27%22",
|
|
|
+ "QueryUnescape": QueryUnescape,
|
|
|
+ },
|
|
|
+ code: "QueryUnescape(uri)",
|
|
|
+ result: "/foo?a=1&b=<>'\"",
|
|
|
+ err: "",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "QueryUnescape() test: basic test with more special chars",
|
|
|
+ env: map[string]interface{}{
|
|
|
+ "uri": "/$%7Bjndi",
|
|
|
+ "QueryUnescape": QueryUnescape,
|
|
|
+ },
|
|
|
+ code: "QueryUnescape(uri)",
|
|
|
+ result: "/${jndi",
|
|
|
+ err: "",
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, test := range tests {
|
|
|
+ program, err := expr.Compile(test.code, expr.Env(test.env))
|
|
|
+ require.NoError(t, err)
|
|
|
+ output, err := expr.Run(program, test.env)
|
|
|
+ require.NoError(t, err)
|
|
|
+ require.Equal(t, test.result, output)
|
|
|
+ log.Printf("test '%s' : OK", test.name)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestLower(t *testing.T) {
|
|
|
+ tests := []struct {
|
|
|
+ name string
|
|
|
+ env map[string]interface{}
|
|
|
+ code string
|
|
|
+ result string
|
|
|
+ err string
|
|
|
+ }{
|
|
|
+ {
|
|
|
+ name: "Lower() test: basic test",
|
|
|
+ env: map[string]interface{}{
|
|
|
+ "name": "ABCDEFG",
|
|
|
+ "Lower": Lower,
|
|
|
+ },
|
|
|
+ code: "Lower(name)",
|
|
|
+ result: "abcdefg",
|
|
|
+ err: "",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "Lower() test: basic test with more special chars",
|
|
|
+ env: map[string]interface{}{
|
|
|
+ "name": "AbcDefG!#",
|
|
|
+ "Lower": Lower,
|
|
|
+ },
|
|
|
+ code: "Lower(name)",
|
|
|
+ result: "abcdefg!#",
|
|
|
+ err: "",
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, test := range tests {
|
|
|
+ program, err := expr.Compile(test.code, expr.Env(test.env))
|
|
|
+ require.NoError(t, err)
|
|
|
+ output, err := expr.Run(program, test.env)
|
|
|
+ require.NoError(t, err)
|
|
|
+ require.Equal(t, test.result, output)
|
|
|
+ log.Printf("test '%s' : OK", test.name)
|
|
|
+ }
|
|
|
+}
|