module ShowCommandSpec (showCommandSpec) where import TestInit showCommandSpec :: Spec showCommandSpec = do describe "show_command" $ do it "preserves the empty string" $ do show_command "echo" [""] @?= "echo \"\"" it "does not quote arguments that do not contain special characters" $ do show_command "echo" ["a1~!@#%^-_+=:,.?/"] @?= "echo a1~!@#%^-_+=:,.?/" it "quotes whitespace" $ do show_command "echo" [" "] @?= "echo \" \"" show_command "echo" ["\t"] @?= "echo \"\t\"" show_command "echo" ["\r"] @?= "echo \"\r\"" show_command "echo" ["\n"] @?= "echo \"\n\"" it "quotes arguments that contain special characters" $ do show_command "echo" ["'"] @?= "echo \"'\"" show_command "echo" ["&"] @?= "echo \"&\"" show_command "echo" ["|"] @?= "echo \"|\"" show_command "echo" [";"] @?= "echo \";\"" show_command "echo" ["("] @?= "echo \"(\"" show_command "echo" [")"] @?= "echo \")\"" show_command "echo" ["{"] @?= "echo \"{\"" show_command "echo" ["}"] @?= "echo \"}\"" show_command "echo" ["<"] @?= "echo \"<\"" show_command "echo" [">"] @?= "echo \">\"" it "escapes the few special characters that must be escaped even in quotes" $ do show_command "echo" ["\""] @?= "echo \"\\\"\"" show_command "echo" ["\\"] @?= "echo \"\\\\\"" show_command "echo" ["$"] @?= "echo \"\\$\"" show_command "echo" ["`"] @?= "echo \"\\`\""