tasty-sugar-0.2.0.0: test/TestParamsAssoc.hs
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE ScopedTypeVariables #-}
module TestParamsAssoc ( paramsAssocTests ) where
import Data.List
import System.FilePath ( (</>) )
import qualified Test.Tasty as TT
import Test.Tasty.HUnit
import Test.Tasty.Sugar
import TestUtils
import Text.RawString.QQ
sample :: [String]
sample = lines [r|
recursive.rs
recursive.fast.exe
recursive.fast.expct
simple.c
simple.expct
simple.noopt.clang.exe
simple.noopt.gcc.exe
simple.noopt-gcc.expct
simple.opt-clang.exe
simple.clang-noopt-clang.exe
simple.clang-gcc.exe
simple-opt.expct
simple-opt.gcc-exe
|]
testInpPath = "test/params/samples"
-- Note: in addition to other differences when compared to the tests
-- here (TestNoAssoc, TestSingleAssoc, TestMultiAssoc), this test is
-- somewhat different in that the *output* is used as the rootname
-- instead of the source (e.g. a .c file), so parameter values must be
-- identified and removed from the root to match corresponding expects
-- and associated files.
sugarCube = mkCUBE { inputDir = testInpPath
, rootName = "*.exe"
, separators = "-."
, expectedSuffix = "expct"
, associatedNames = [ ("c-source", "c")
, ("rust-source", "rs")
, ("haskell", "hs")
]
, validParams = [
("optimization", Nothing)
,("c-compiler", Just ["gcc", "clang"])
]
}
paramsAssocTests :: [TT.TestTree]
paramsAssocTests =
let (sugar1,_s1desc) = findSugarIn sugarCube sample
in [ testCase "valid sample" $ 14 @=? length sample
, sugarTestEq "correct found count" sugarCube sample 6 length
, testCase "results" $ compareBags "results" sugar1 $
let p = (testInpPath </>) in
[
Sweets { rootMatchName = "recursive.fast.exe"
, rootBaseName = "recursive"
, rootFile = p "recursive.fast.exe"
, cubeParams = validParams sugarCube
, expected =
[
Expectation
{ expectedFile = p "recursive.fast.expct"
, expParamsMatch = [ ("optimization", Explicit "fast")
, ("c-compiler", Assumed "gcc")
]
, associated = [ ("rust-source", p "recursive.rs") ]
}
, Expectation
{ expectedFile = p "recursive.fast.expct"
, expParamsMatch = [ ("optimization", Explicit "fast")
, ("c-compiler", Assumed "clang")
]
, associated = [ ("rust-source", p "recursive.rs") ]
}
]
}
, Sweets { rootMatchName = "simple.noopt.clang.exe"
, rootBaseName = "simple"
, rootFile = p "simple.noopt.clang.exe"
, cubeParams = validParams sugarCube
, expected =
[
Expectation
{ expectedFile = p "simple.expct"
, expParamsMatch = [ ("optimization", Explicit "noopt")
, ("c-compiler", Explicit "clang")
]
, associated = [ ("c-source", p "simple.c")]
}
]
}
, Sweets { rootMatchName = "simple.noopt.gcc.exe"
, rootBaseName = "simple"
, rootFile = p "simple.noopt.gcc.exe"
, cubeParams = validParams sugarCube
, expected =
[ Expectation
{ expectedFile = p "simple.noopt-gcc.expct"
, expParamsMatch = [ ("optimization", Explicit "noopt")
, ("c-compiler", Explicit "gcc")
]
, associated = [ ("c-source", p "simple.c")]
}
]
}
, Sweets { rootMatchName = "simple.opt-clang.exe"
, rootBaseName = "simple"
, rootFile = p "simple.opt-clang.exe"
, cubeParams = validParams sugarCube
, expected =
[ Expectation
{ expectedFile = p "simple-opt.expct"
, expParamsMatch = [ ("optimization", Explicit "opt")
, ("c-compiler", Explicit "clang")
]
, associated = [ ("c-source", p "simple.c")]
}
]
}
-- This repeats a parameter value, which nullifies any
-- parameter matching and so those elements that look like
-- parameters are just part of the base.
, Sweets { rootMatchName = "simple.clang-noopt-clang.exe"
, rootBaseName = "simple"
, rootFile = p "simple.clang-noopt-clang.exe"
, cubeParams = validParams sugarCube
, expected =
[ Expectation
{ expectedFile = p "simple.expct"
, expParamsMatch = [ ("optimization", NotSpecified)
, ("c-compiler", Assumed "gcc")
]
, associated = [ ("c-source", p "simple.c")]
}
, Expectation
{ expectedFile = p "simple.expct"
, expParamsMatch = [ ("optimization", NotSpecified)
, ("c-compiler", Assumed "clang")
]
, associated = [ ("c-source", p "simple.c")]
}
]
}
-- This repeats a parameter with a different value, which
-- nullifies any parameter matching and so those elements
-- that look like parameters are just part of the base.
, Sweets { rootMatchName = "simple.clang-gcc.exe"
, rootBaseName = "simple"
, rootFile = p "simple.clang-gcc.exe"
, cubeParams = validParams sugarCube
, expected =
[ Expectation
{ expectedFile = p "simple.expct"
, expParamsMatch = [ ("optimization", NotSpecified)
, ("c-compiler", Assumed "gcc")
]
, associated = [ ("c-source", p "simple.c")]
}
, Expectation
{ expectedFile = p "simple.expct"
, expParamsMatch = [ ("optimization", NotSpecified)
, ("c-compiler", Assumed "clang")
]
, associated = [ ("c-source", p "simple.c")]
}
]
}
-- n.b. simple-opt.gcc-exe is *not* matched: the rootname is
-- "*.exe" so the '.' separator is required.
]
]