packages feed

language-puppet-1.5.1: tests/Interpreter/Function/ShellquoteSpec.hs

{-# 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\""