{-# LANGUAGE OverloadedLists #-} module Interpreter.Function.ShellquoteSpec (spec, main) where import Helpers main :: IO () main = hspec spec check :: [Expression] -> Text -> Expectation check = checkExprsSuccess "shellquote" spec :: Spec spec = do it "should handle no arguments" (check [] "") it "should handle array arguments" $ check ["foo", ["bar@example.com", "localhost:/dev/null"], "xyzzy+-4711,23"] "foo bar@example.com localhost:/dev/null xyzzy+-4711,23" it "should quote unsafe characters" $ check ["/etc/passwd ", "(ls)", "*", "[?]", "'&'"] "\"/etc/passwd \" \"(ls)\" \"*\" \"[?]\" \"'&'\"" it "should deal with double quotes" $ check ["\"foo\"bar\""] "'\"foo\"bar\"'" it "should cope with dollar signs" $ check ["$PATH", "foo$bar", "\"x$\""] "'$PATH' 'foo$bar' '\"x$\"'" it "should deal with apostrophes (single quotes)" $ check ["'foo'bar'", "`$'EDITOR'`"] "\"'foo'bar'\" \"\\`\\$'EDITOR'\\`\"" it "should cope with grave accents (backquotes)" $ check ["`echo *`", "`ls \"$MAILPATH\"`"] "'`echo *`' '`ls \"$MAILPATH\"`'" it "should deal with both single and double quotes" $ check ["'foo\"bar\"xyzzy'", "\"foo'bar'xyzzy\""] "\"'foo\\\"bar\\\"xyzzy'\" \"\\\"foo'bar'xyzzy\\\"\"" it "should handle multiple quotes *and* dollars and backquotes" $ check ["'foo\"$x`bar`\"xyzzy'"] "\"'foo\\\"\\$x\\`bar\\`\\\"xyzzy'\"" it "should handle linefeeds" $ check ["foo \n bar"] "\"foo \n bar\""