1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
{-# LANGUAGE OverloadedStrings #-}
module UnitTests.Distribution.Client.ProjectPlanning (tests) where
import Data.List.NonEmpty
import Distribution.Client.ProjectPlanning (ComponentTarget (..), SubComponentTarget (..), nubComponentTargets)
import Distribution.Types.ComponentName
import Distribution.Types.LibraryName
import Test.Tasty
import Test.Tasty.HUnit
tests :: [TestTree]
tests =
[ testGroup "Build Target Tests" buildTargetTests
]
-- ----------------------------------------------------------------------------
-- Build Target Tests
-- ----------------------------------------------------------------------------
buildTargetTests :: [TestTree]
buildTargetTests =
[ testGroup "nubComponentTargets" nubComponentTargetsTests
]
nubComponentTargetsTests :: [TestTree]
nubComponentTargetsTests =
[ testCase "Works on empty list" $
nubComponentTargets [] @?= ([] :: [(ComponentTarget, NonEmpty Int)])
, testCase "Merges targets to same component" $
nubComponentTargets
[ (mainLibModuleTarget, 1 :: Int)
, (mainLibFileTarget, 2)
]
@?= [(mainLibWholeCompTarget, 1 :| [2])]
, testCase "Merges whole component targets" $
nubComponentTargets [(mainLibFileTarget, 2), (mainLibWholeCompTarget, 1 :: Int)]
@?= [(mainLibWholeCompTarget, 2 :| [1])],
testCase "Don't merge unrelated targets" $
nubComponentTargets
[ (mainLibWholeCompTarget, 1 :: Int)
, (exeWholeCompTarget, 2)
]
@?= [(mainLibWholeCompTarget, pure 1), (exeWholeCompTarget, pure 2)]
, testCase "Merge multiple related targets" $
nubComponentTargets
[ (mainLibWholeCompTarget, 1 :: Int)
, (mainLibModuleTarget, 4)
, (exeWholeCompTarget, 2)
, (exeFileTarget, 3)
]
@?= [(mainLibWholeCompTarget, 1 :| [4]), (exeWholeCompTarget, 2 :| [3])]
, testCase "Merge related targets, don't merge unrelated ones" $
nubComponentTargets
[ (mainLibFileTarget, 1 :: Int)
, (mainLibModuleTarget, 4)
, (exeWholeCompTarget, 2)
, (exeFileTarget, 3)
, (exe2FileTarget, 5)
]
@?=
[ (mainLibWholeCompTarget, 1 :| [4])
, (exeWholeCompTarget, 2 :| [3])
, (exe2WholeCompTarget, 5 :| [])
]
]
-- ----------------------------------------------------------------------------
-- Utils
-- ----------------------------------------------------------------------------
mainLibWholeCompTarget :: ComponentTarget
mainLibWholeCompTarget = ComponentTarget (CLibName LMainLibName) WholeComponent
mainLibModuleTarget :: ComponentTarget
mainLibModuleTarget = ComponentTarget (CLibName LMainLibName) (ModuleTarget "Lib")
mainLibFileTarget :: ComponentTarget
mainLibFileTarget = ComponentTarget (CLibName LMainLibName) (FileTarget "./Lib.hs")
exeWholeCompTarget :: ComponentTarget
exeWholeCompTarget = ComponentTarget (CExeName "exe") WholeComponent
exeFileTarget :: ComponentTarget
exeFileTarget = ComponentTarget (CExeName "exe") (FileTarget "./Main.hs")
exe2WholeCompTarget :: ComponentTarget
exe2WholeCompTarget = ComponentTarget (CExeName "exe2") WholeComponent
exe2FileTarget :: ComponentTarget
exe2FileTarget = ComponentTarget (CExeName "exe2") (FileTarget "./Main2.hs")
|