packages feed

generic-labels-0.1.0.1: test/Inspection.hs

{-# LANGUAGE TemplateHaskell #-}

module Inspection
  ( tests )
  where

-- cabal
import qualified Distribution.TestSuite as Cabal

-- inspection-testing
import qualified Test.Inspection as Inspection
  ( Result(..) )

-- generic-labels-test
import qualified ShouldCompile.Adapt.RRR as Adapt.RRR
import qualified ShouldCompile.Adapt.TTR as Adapt.TTR
import qualified ShouldCompile.Adapt.TTT as Adapt.TTT
import qualified ShouldCompile.Adapt.SingletonArg    as Adapt.SingletonArg
import qualified ShouldCompile.Adapt.SingletonArgOpt as Adapt.SingletonArgOpt
import qualified ShouldCompile.Adapt.SingletonOpt    as Adapt.SingletonOpt
import qualified ShouldCompile.Inject.Basic as Inject.Basic
import qualified ShouldCompile.Inject.PolymorphicR  as Inject.PolymorphicR 
import qualified ShouldCompile.Project.Basic as Project.Basic
import qualified ShouldCompile.Project.PolymorphicR as Project.PolymorphicR
import qualified ShouldCompile.Project.PolymorphicT as Project.PolymorphicT

--------------------------------------------------------------------------------
-- Inspection tests.

tests :: IO [ Cabal.Test ]
tests = pure $ map mkCabalTest inspectionResults

inspectionResults :: [ ( String, Inspection.Result ) ]
inspectionResults =
  [ ( "Adapt.RRR", Adapt.RRR.result )
  , ( "Adapt.TTR", Adapt.TTR.result )
  , ( "Adapt.TTT", Adapt.TTT.result )
  , ( "Adapt.SingletonArg"   , Adapt.SingletonArg.result    )
  , ( "Adapt.SingletonArgOpt", Adapt.SingletonArgOpt.result )
  , ( "Adapt.SingletonOpt"   , Adapt.SingletonOpt.result    )
  , ( "Inject.Basic", Inject.Basic.result )
  , ( "Inject.PolymorphicR", Inject.PolymorphicR.result )
  , ( "Project.Basic", Project.Basic.result )
  , ( "Project.PolymorphicR", Project.PolymorphicR.result )
  , ( "Project.PolymorphicT", Project.PolymorphicT.result )
  ]

--------------------------------------------------------------------------------
-- Converting to 'Cabal' test types.

mkCabalTest :: ( String, Inspection.Result ) -> Cabal.Test
mkCabalTest ( testName, inspectionResult ) =
  Cabal.Test $
    Cabal.TestInstance
      { Cabal.run  = pure . Cabal.Finished . cabalResult $ inspectionResult
      , Cabal.name = testName
      , Cabal.tags = []
      , Cabal.options   = []
      , Cabal.setOption = \ _ _ -> Left "Test does not have any options."
      }

cabalResult :: Inspection.Result -> Cabal.Result
cabalResult ( Inspection.Failure err ) = Cabal.Error err
cabalResult _                          = Cabal.Pass