content: {-# LANGUAGE OverloadedStrings #-}
  module SshSpec ( sshSpec ) where
  
  import TestInit
  import qualified Data.Text as T
  
  sshSpec :: Spec
  sshSpec = do
    let q = "'" -- a single quote
    let qq = "'\\''" -- quote of a single quote
    let qqq = T.concat [qq, "\\", qq, qq] -- quote of qq
    describe "sshCommandText" $ do
      it "simple command" $ do
        let res = sshCommandText [("wibble", [])] SeqSsh
        res @?= T.concat [q, qq, "wibble", qq, q]
  
      it "space command" $ do
        let res = sshCommandText [("to", ["outer space"])] SeqSsh
        res @?= T.concat [q, qq, "to", qq, " ", qq, "outer space", qq ,q]
  
      it "multiple space commands" $ do
        let res = sshCommandText [("to", ["outer space"]), ("and", ["back again"])] SeqSsh
        res @?= T.concat
                  [ q, qq, "to", qq, " ", qq, "outer space", qq
                  , " && "
                  , qq, "and", qq, " ", qq, "back again", qq, q
                  ]
  
      it "commands with quotes and spaces" $ do
        let res = sshCommandText [ ("echo", ["Godfater's brother, Tom says: \"huh??\""])
                                 , ("foo", ["--dir", "Tom's father/"])] SeqSsh
        res @?= T.concat
                  [ q, qq, "echo", qq, " "
                  , qq, "Godfater", qqq, "s brother, Tom says: \"huh??\"", qq
                  , " && "
                  , qq, "foo", qq, " "
                  , qq, "--dir", qq, " "
                  , qq, "Tom", qqq, "s father/", qq, q
                  ]
  