github.com/elves/elvish@v0.15.0/pkg/parse/quote_test.go (about) 1 package parse 2 3 import ( 4 "testing" 5 6 . "github.com/elves/elvish/pkg/tt" 7 ) 8 9 func TestQuote(t *testing.T) { 10 Test(t, Fn("Quote", Quote).ArgsFmt("(%q)").RetsFmt("%q"), Table{ 11 // Empty string is single-quoted. 12 Args("").Rets(`''`), 13 14 // Bareword when possible. 15 Args("x-y:z@h/d").Rets("x-y:z@h/d"), 16 17 // Single quote when there are special characters but no unprintable 18 // characters. 19 Args("x$y[]ef'").Rets("'x$y[]ef'''"), 20 21 // Tilde needs quoting only leading the expression. 22 Args("~x").Rets("'~x'"), 23 Args("x~").Rets("x~"), 24 25 // Double quote when there is unprintable char. 26 Args("a\nb").Rets(`"a\nb"`), 27 Args("\x1b\"\\").Rets(`"\e\"\\"`), 28 29 // Commas and equal signs are always quoted, so that the quoted string is 30 // safe for use everywhere. 31 Args("a,b").Rets(`'a,b'`), 32 Args("a=b").Rets(`'a=b'`), 33 }) 34 } 35 36 func TestQuoteVariableName(t *testing.T) { 37 Test(t, Fn("QuoteVariableName", QuoteVariableName).ArgsFmt("(%q)").RetsFmt("%q"), Table{ 38 Args("").Rets("''"), 39 Args("foo").Rets("foo"), 40 Args("a/b").Rets("'a/b'"), 41 Args("\x1b").Rets(`"\e"`), 42 }) 43 }