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  }