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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
module UnitTests.Distribution.Client.Init.Simple
( tests
) where
import Prelude as P
import Test.Tasty
import Test.Tasty.HUnit
import Distribution.Client.Init.Defaults
import Distribution.Client.Init.Simple
import Distribution.Client.Init.Types
import Data.List.NonEmpty hiding (zip)
import Distribution.Client.Types
import Distribution.Simple.PackageIndex hiding (fromList)
import Distribution.Types.PackageName
import Distribution.Verbosity
import UnitTests.Distribution.Client.Init.Utils
import Distribution.Simple.Setup
import qualified Data.List.NonEmpty as NEL
import Distribution.Types.Dependency
import Distribution.Client.Init.Utils (mkPackageNameDep, getBaseDep)
import qualified Data.Set as Set
import Distribution.Client.Init.FlagExtractors (getCabalVersionNoPrompt)
tests
:: Verbosity
-> InitFlags
-> InstalledPackageIndex
-> SourcePackageDb
-> TestTree
tests v _initFlags pkgIx srcDb = testGroup "Distribution.Client.Init.Simple.hs"
[ simpleCreateProjectTests v pkgIx srcDb pkgName
]
where
pkgName = mkPackageName "simple-test"
simpleCreateProjectTests
:: Verbosity
-> InstalledPackageIndex
-> SourcePackageDb
-> PackageName
-> TestTree
simpleCreateProjectTests v pkgIx srcDb pkgName =
testGroup "Simple createProject tests"
[ testCase "Simple lib createProject - no tests" $ do
let inputs = fromList
[ "1" -- package type: Library
, "simple.test" -- package dir: used for determining package name;
-- note that . will be replaced with - in a sanitization step,
-- and we get the expected "simple-test" -- regression test for #8404
, "simple.test" -- package dir again: the prompt monad needs extra parameter for every
-- IO call, and this one will be used for canonicalizePath,
-- which is called as a part of sanitization
, "n" -- no tests
]
flags = emptyFlags { packageType = Flag Library }
settings = ProjectSettings
(WriteOpts False False False v "/home/test/1" Library pkgName defaultCabalVersion)
(simplePkgDesc pkgName) (Just $ simpleLibTarget baseDep)
Nothing Nothing
case _runPrompt (createProject v pkgIx srcDb flags) inputs of
Left e -> assertFailure $ "Failed to create simple lib project: " ++ show e
Right (settings', _) -> settings @=? settings'
, testCase "Simple lib createProject - with tests" $ do
let inputs = fromList ["1", "simple-test", "simple-test", "y", "1"]
flags = emptyFlags { packageType = Flag Library }
settings = ProjectSettings
(WriteOpts False False False v "/home/test/1" Library pkgName defaultCabalVersion)
(simplePkgDesc pkgName) (Just $ simpleLibTarget baseDep)
Nothing (Just $ simpleTestTarget (Just pkgName) baseDep)
case _runPrompt (createProject v pkgIx srcDb flags) inputs of
Left e -> assertFailure $ "Failed to create simple lib (with tests)project: " ++ show e
Right (settings', _) -> settings @=? settings'
, testCase "Simple exe createProject" $ do
let inputs = fromList ["2", "simple-test", "simple-test"]
flags = emptyFlags { packageType = Flag Executable }
settings = ProjectSettings
(WriteOpts False False False v "/home/test/2" Executable pkgName defaultCabalVersion)
(simplePkgDesc pkgName) Nothing
(Just $ simpleExeTarget Nothing baseDep) Nothing
case _runPrompt (createProject v pkgIx srcDb flags) inputs of
Left e -> assertFailure $ "Failed to create simple exe project: " ++ show e
Right (settings', _) -> settings @=? settings'
, testCase "Simple lib+exe createProject - no tests" $ do
let inputs = fromList ["2", "simple-test", "simple-test", "n"]
flags = emptyFlags { packageType = Flag LibraryAndExecutable }
settings = ProjectSettings
(WriteOpts False False False v "/home/test/2" LibraryAndExecutable pkgName defaultCabalVersion)
(simplePkgDesc pkgName) (Just $ simpleLibTarget baseDep)
(Just $ simpleExeTarget (Just pkgName) baseDep) Nothing
case _runPrompt (createProject v pkgIx srcDb flags) inputs of
Left e -> assertFailure $ "Failed to create simple lib+exe project: " ++ show e
Right (settings', _) -> settings @=? settings'
, testCase "Simple lib+exe createProject - with tests" $ do
let inputs = fromList ["2", "simple-test", "simple-test", "y", "1"]
flags = emptyFlags { packageType = Flag LibraryAndExecutable }
settings = ProjectSettings
(WriteOpts False False False v "/home/test/2" LibraryAndExecutable pkgName defaultCabalVersion)
(simplePkgDesc pkgName) (Just $ simpleLibTarget baseDep)
(Just $ simpleExeTarget (Just pkgName) baseDep)
(Just $ simpleTestTarget (Just pkgName) baseDep)
case _runPrompt (createProject v pkgIx srcDb flags) inputs of
Left e -> assertFailure $ "Failed to create simple lib+exe (with tests) project: " ++ show e
Right (settings', _) -> settings @=? settings'
, testCase "Simple standalone tests" $ do
let inputs = fromList ["2", "simple-test", "simple-test", "y", "1"]
flags = emptyFlags { packageType = Flag TestSuite }
settings = ProjectSettings
(WriteOpts False False False v "/home/test/2" TestSuite pkgName defaultCabalVersion)
(simplePkgDesc pkgName) Nothing Nothing
(Just $ simpleTestTarget Nothing baseDep)
case _runPrompt (createProject v pkgIx srcDb flags) inputs of
Left e -> assertFailure $ "Failed to create simple standalone test project: " ++ show e
Right (settings', _) -> settings @=? settings'
]
where
baseDep = case _runPrompt (getBaseDep pkgIx emptyFlags) $ fromList [] of
Left e -> error $ show e
Right a -> fst a
-- -------------------------------------------------------------------- --
-- Utils
mkPkgDep :: Maybe PackageName -> [Dependency]
mkPkgDep Nothing = []
mkPkgDep (Just pn) = [mkPackageNameDep pn]
simplePkgDesc :: PackageName -> PkgDescription
simplePkgDesc pkgName = PkgDescription
defaultCabalVersion
pkgName
defaultVersion
(defaultLicense $ getCabalVersionNoPrompt dummyFlags)
"" "" "" "" ""
mempty
(Just $ Set.singleton defaultChangelog)
simpleLibTarget :: [Dependency] -> LibTarget
simpleLibTarget baseDep = LibTarget
[defaultSourceDir]
defaultLanguage
(myLibModule NEL.:| [])
[] [] baseDep []
simpleExeTarget :: Maybe PackageName -> [Dependency] -> ExeTarget
simpleExeTarget pn baseDep = ExeTarget
defaultMainIs
[defaultApplicationDir]
defaultLanguage
[] [] (baseDep ++ mkPkgDep pn) []
simpleTestTarget :: Maybe PackageName -> [Dependency] -> TestTarget
simpleTestTarget pn baseDep = TestTarget
defaultMainIs
[defaultTestDir]
defaultLanguage
[] [] (baseDep ++ mkPkgDep pn) []
|