module Gyehoek.Test.Golden (root) where import Test.Tasty (TestTree, testGroup) import Test.Tasty.Silver import Gyehoek.Driver qualified as Driver import System.FilePath import Data.List (List) import Data.Functor ((<&>)) import System.Directory import Data.Function import System.Environment.Blank (getEnvDefault) import qualified System.Process.Text as PT disabled :: List String disabled = [ "square" ] root :: IO TestTree root = do all_cases <- listDirectory "golden" let tests = all_cases & filter (`notElem` disabled) & fmap ("golden") testGroup "golden" <$> sequenceA [ executionTests tests ] executionTests :: List FilePath -> IO TestTree executionTests files = do cmd <- getEnvDefault "GYEHOEK_RUNTIME" "runtime/target/debug/gyehoek-runtime" pure $ testGroup "execution" $ files <&> \test -> let testname = takeFileName test scmfile = test "source.scm" resultfile = test "exec" action = do t <- Driver.lower_e2e scmfile PT.readProcessWithExitCode cmd ["-"] t in goldenVsAction testname resultfile action printProcResult