packages feed

cobot-io-0.1.3.6: test/PDBWriterSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module PDBWriterSpec where

import           Bio.PDB                (modelsFromPDBFile, modelsToPDBText)
import           Control.Monad          (zipWithM_)
import           Control.Monad.IO.Class (liftIO)
import           Data.Text              (Text)
import qualified Data.Text              as T
import qualified Data.Text.IO           as TIO (readFile)
import           Test.Hspec

pdbWriterSpec :: Spec
pdbWriterSpec = describe "PDB format writer." $ do
    testWriting "correctly writes several models" "test/PDB/Writer/several_models.pdb"
    testWriting "correctly wrtes models with HETATMs" "test/PDB/Writer/hetatms.pdb"
    testWriting "correctly writes big complex model" "test/PDB/Writer/big_file.pdb"

testWriting :: String -> FilePath -> Spec
testWriting description path = it description $ do
    Right (_, models) <- modelsFromPDBFile path
    modelsText        <- liftIO $ TIO.readFile path

    let modelsTextFromWriter = modelsToPDBText models

    compareLinesOfText modelsTextFromWriter modelsText

compareLinesOfText :: Text -> Text -> Expectation
compareLinesOfText t = zipWithM_ shouldBe (T.splitOn newLine t) . T.splitOn newLine
  where
    newLine :: Text
    newLine = "\n"