packages feed

headroom-0.1.0.0: test/Headroom/HeaderSpec.hs

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Headroom.HeaderSpec
  ( spec
  )
where

import           Headroom.FileType              ( FileType(..) )
import           Headroom.Header
import           RIO
import           RIO.FilePath
import           Test.Hspec

spec :: Spec
spec = do
  let readTemplate p = readFileUtf8 $ "test-data/code-samples/haskell" </> p
  describe "addHeader" $ do
    it "adds header to source code if no header is present" $ do
      let header = Header Haskell "-- This is header"
      source   <- readTemplate "stripped.hs"
      expected <- readTemplate "replaced-simple.hs"
      addHeader header source `shouldBe` expected

    it "does nothing if some header is already present" $ do
      let header = Header Haskell "-- This is header"
      source <- readTemplate "full.hs"
      addHeader header source `shouldBe` source

  describe "containsHeader" $ do
    it "detects whether source code header is present" $ do
      withHeader    <- readTemplate "full.hs"
      withoutHeader <- readTemplate "stripped.hs"
      containsHeader Haskell withHeader `shouldBe` True
      containsHeader Haskell withoutHeader `shouldBe` False

  describe "dropHeader" $ do
    it "drops header from source code" $ do
      source   <- readTemplate "full.hs"
      expected <- readTemplate "stripped.hs"
      dropHeader Haskell source `shouldBe` expected

  describe "headerSize" $ do
    it "returns correct size of header for source code" $ do
      source <- readTemplate "full.hs"
      headerSize Haskell source `shouldBe` 15

  describe "replaceHeader" $ do
    it "replaces header in source code" $ do
      let header = Header Haskell "-- This is header"
      source   <- readTemplate "full.hs"
      expected <- readTemplate "replaced-simple.hs"
      replaceHeader header source `shouldBe` expected