You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
2.1 KiB
145 lines
2.1 KiB
// Copyright (c) Tailscale Inc & contributors
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
package freedesktop
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestEscape(t *testing.T) {
|
|
tests := []struct {
|
|
name, input, want string
|
|
}{
|
|
{
|
|
name: "no-illegal-chars",
|
|
input: "/home/user",
|
|
want: "/home/user",
|
|
},
|
|
{
|
|
name: "empty-string",
|
|
input: "",
|
|
want: "\"\"",
|
|
},
|
|
{
|
|
name: "space",
|
|
input: " ",
|
|
want: "\" \"",
|
|
},
|
|
{
|
|
name: "tab",
|
|
input: "\t",
|
|
want: "\"\t\"",
|
|
},
|
|
{
|
|
name: "newline",
|
|
input: "\n",
|
|
want: "\"\n\"",
|
|
},
|
|
{
|
|
name: "double-quote",
|
|
input: "\"",
|
|
want: "\"\\\"\"",
|
|
},
|
|
{
|
|
name: "single-quote",
|
|
input: "'",
|
|
want: "\"'\"",
|
|
},
|
|
{
|
|
name: "backslash",
|
|
input: "\\",
|
|
want: "\"\\\\\"",
|
|
},
|
|
{
|
|
name: "greater-than",
|
|
input: ">",
|
|
want: "\">\"",
|
|
},
|
|
{
|
|
name: "less-than",
|
|
input: "<",
|
|
want: "\"<\"",
|
|
},
|
|
{
|
|
name: "tilde",
|
|
input: "~",
|
|
want: "\"~\"",
|
|
},
|
|
{
|
|
name: "pipe",
|
|
input: "|",
|
|
want: "\"|\"",
|
|
},
|
|
{
|
|
name: "ampersand",
|
|
input: "&",
|
|
want: "\"&\"",
|
|
},
|
|
{
|
|
name: "semicolon",
|
|
input: ";",
|
|
want: "\";\"",
|
|
},
|
|
{
|
|
name: "dollar",
|
|
input: "$",
|
|
want: "\"\\$\"",
|
|
},
|
|
{
|
|
name: "asterisk",
|
|
input: "*",
|
|
want: "\"*\"",
|
|
},
|
|
{
|
|
name: "question-mark",
|
|
input: "?",
|
|
want: "\"?\"",
|
|
},
|
|
{
|
|
name: "hash",
|
|
input: "#",
|
|
want: "\"#\"",
|
|
},
|
|
{
|
|
name: "open-paren",
|
|
input: "(",
|
|
want: "\"(\"",
|
|
},
|
|
{
|
|
name: "close-paren",
|
|
input: ")",
|
|
want: "\")\"",
|
|
},
|
|
{
|
|
name: "backtick",
|
|
input: "`",
|
|
want: "\"\\`\"",
|
|
},
|
|
{
|
|
name: "char-without-escape",
|
|
input: "/home/user\t",
|
|
want: "\"/home/user\t\"",
|
|
},
|
|
{
|
|
name: "char-with-escape",
|
|
input: "/home/user\\",
|
|
want: "\"/home/user\\\\\"",
|
|
},
|
|
{
|
|
name: "all-illegal-chars",
|
|
input: "/home/user" + needsEscape,
|
|
want: "\"/home/user \t\n\\\"'\\\\><~|&;\\$*?#()\\`\"",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := Quote(tt.input)
|
|
if strings.Compare(got, tt.want) != 0 {
|
|
t.Errorf("expected %s, got %s", tt.want, got)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|