content: module IHaskell.Test.Util (lstrip, rstrip, strip, replace, ghc, shouldBeAmong) where
  
  import           Prelude
  import qualified Data.Text as T
  
  import           Test.HUnit (assertBool)
  
  import           GHC
  import qualified GHC.Paths
  
  -- | Drop whitespace from the left of a string.
  lstrip :: String -> String
  lstrip = dropWhile (`elem` (" \t\r\n" :: String))
  
  -- | Drop whitespace from the right of a string.
  rstrip :: String -> String
  rstrip = reverse . lstrip . reverse
  
  -- | Drop whitespace from both sides of a string.
  strip :: String -> String
  strip = rstrip . lstrip
  
  -- | Replace all occurrences of a string with another string.
  replace :: String -> String -> String -> String
  replace needle replacement haystack =
    T.unpack $ T.replace (T.pack needle) (T.pack replacement) (T.pack haystack)
  
  ghc ::  Ghc a -> IO a
  ghc = runGhc (Just GHC.Paths.libdir)
  --
  -- | @sublist \`shouldbeAmong\` list@ sets the expectation that @sublist@ elements are 
  -- among those in @list@.
  shouldBeAmong :: (Show a, Eq a) => [a] -> [a] -> IO ()
  sublist `shouldBeAmong` list = assertBool errorMsg $ and [x `elem` list | x <- sublist]
    where
      errorMsg = show list ++ " doesn't contain " ++ show sublist
  