phino-0.0.0.1: test/RewriterSpec.hs
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# OPTIONS_GHC -Wno-orphans #-}
-- SPDX-FileCopyrightText: Copyright (c) 2025 Objectionary.com
-- SPDX-License-Identifier: MIT
module RewriterSpec where
import Control.Monad (forM_)
import Data.Aeson
import Data.Yaml qualified as Yaml
import GHC.Generics
import Misc (allPathsIn)
import Rewriter (rewrite)
import Test.Hspec (Spec, describe, runIO, shouldBe, it)
import qualified Yaml
import System.FilePath (takeBaseName)
data YamlPack = YamlPack
{ input :: String,
output :: String,
ruleSet :: Maybe Yaml.RuleSet
}
deriving (Generic, FromJSON, Show)
yamlPack :: FilePath -> IO YamlPack
yamlPack = Yaml.decodeFileThrow
spec :: Spec
spec = do
describe "rewrite packs" $ do
packs <- runIO (allPathsIn "test/resources/rewriter-packs")
forM_
packs
( \pth -> do
pack <- runIO $ yamlPack pth
let output' = output pack
input' = input pack
ruleSet' = ruleSet pack
rewritten <- runIO $ rewrite input' ruleSet'
it (takeBaseName pth) (rewritten `shouldBe` output')
)