Skip to content

Commit 8212e90

Browse files
committed
Add unit tests for 'nubComponentTargets'
1 parent 608cc4a commit 8212e90

File tree

3 files changed

+95
-0
lines changed

3 files changed

+95
-0
lines changed

cabal-install/cabal-install.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ Test-Suite unit-tests
278278
UnitTests.Distribution.Client.TreeDiffInstances
279279
UnitTests.Distribution.Client.UserConfig
280280
UnitTests.Distribution.Client.ProjectConfig
281+
UnitTests.Distribution.Client.ProjectPlanning
281282
UnitTests.Distribution.Client.JobControl
282283
UnitTests.Distribution.Client.IndexUtils
283284
UnitTests.Distribution.Client.IndexUtils.Timestamp

cabal-install/tests/UnitTests.hs

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

0 commit comments

Comments
 (0)