53 lines
1.8 KiB
Haskell
53 lines
1.8 KiB
Haskell
{-# LANGUAGE FlexibleContexts #-}
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
module Main where
|
|
|
|
import GHC.IO.Handle ( Handle )
|
|
import System.IO ( openFile
|
|
, IOMode(ReadMode)
|
|
)
|
|
import System.IO.Temp ( withSystemTempFile )
|
|
import Test.Hspec
|
|
import qualified Data.ByteString as BS
|
|
import qualified Data.ByteString.Lazy as BSL
|
|
import Streamly.External.FileSystem.Handle.Posix
|
|
|
|
|
|
checkCopyLBS :: FilePath -> Handle -> IO ()
|
|
checkCopyLBS filename handle' = do
|
|
let content = "Some file content"
|
|
print $ "Checking " <> filename
|
|
copyLBS content handle'
|
|
handle <- openFile filename ReadMode
|
|
bsContent <- BS.hGetContents handle
|
|
bsContent `shouldBe` (BSL.toStrict content)
|
|
|
|
checkReadFileLBS :: FilePath -> Handle -> IO ()
|
|
checkReadFileLBS filename handle' = do
|
|
let content = "Some file content"
|
|
print $ "Checking " <> filename
|
|
copyLBS content handle'
|
|
handle <- openFile filename ReadMode
|
|
bsContent <- readFileLBS handle
|
|
(BSL.toStrict bsContent) `shouldBe` (BSL.toStrict content)
|
|
|
|
checkCopyFileHandle :: Handle -> Handle -> IO ()
|
|
checkCopyFileHandle from to = do
|
|
let content = "Some file content"
|
|
copyLBS' content from
|
|
copyFileHandle' from to
|
|
fromContent <- readFileLBS from
|
|
toContent <- readFileLBS to
|
|
(BSL.toStrict fromContent) `shouldBe` (BSL.toStrict toContent)
|
|
|
|
|
|
main :: IO ()
|
|
main = hspec $ do
|
|
describe "Streamly.External.FileSystem.Handle.Posix" $ do
|
|
it "copyLBS" $ withSystemTempFile "x" checkCopyLBS
|
|
it "readFileLBS" $ withSystemTempFile "x" checkReadFileLBS
|
|
it "copyFileHandle" $ withSystemTempFile
|
|
"x"
|
|
(\_ h1 -> withSystemTempFile "y" $ (\_ h2 -> checkCopyFileHandle h1 h2))
|