|
| 1 | +module UnitTests.Distribution.Client.Init.FileCreators ( |
| 2 | + tests |
| 3 | + ) where |
| 4 | + |
| 5 | +import Distribution.Client.Init.FileCreators |
| 6 | + ( generateCabalFile ) |
| 7 | + |
| 8 | +import qualified Data.Set as Set |
| 9 | + |
| 10 | +import Distribution.Client.Init.Types |
| 11 | + ( InitFlags(..), PackageType(..) ) |
| 12 | +import Distribution.Simple.Setup |
| 13 | + ( Flag(..) ) |
| 14 | + |
| 15 | + |
| 16 | +import Distribution.CabalSpecVersion |
| 17 | + ( CabalSpecVersion(CabalSpecV2_4) ) |
| 18 | +import Distribution.Types.Dependency |
| 19 | + ( Dependency, mkDependency ) |
| 20 | +import Distribution.Types.PackageName |
| 21 | + ( mkPackageName ) |
| 22 | +import Distribution.Types.VersionRange |
| 23 | + ( majorBoundVersion ) |
| 24 | +import Distribution.Types.Version |
| 25 | + ( mkVersion ) |
| 26 | +import qualified Distribution.ModuleName as ModuleName |
| 27 | + ( fromString ) |
| 28 | +import qualified Distribution.SPDX as SPDX |
| 29 | +import Language.Haskell.Extension ( Language(..) ) |
| 30 | + |
| 31 | +import Test.Tasty |
| 32 | +import Test.Tasty.HUnit |
| 33 | + |
| 34 | +tests :: [TestTree] |
| 35 | +tests = |
| 36 | + [ testCase "generateCabalFile exe" |
| 37 | + (generateCabalFileTest "exekg" exeFlags expectedExeOutput) |
| 38 | + , testCase "generateCabalFile libExeAndTests" |
| 39 | + (generateCabalFileTest "libExeAndTestsPackage" libExeAndTestFlags expectedLibExeAndTestOutput) |
| 40 | + ] |
| 41 | + |
| 42 | +generateCabalFileTest :: String -> InitFlags -> String -> Assertion |
| 43 | +generateCabalFileTest filename flags expected = |
| 44 | + assertEqual |
| 45 | + ("Generated cabal file does not match: '" ++ filename ++ "'") expected actual |
| 46 | + where |
| 47 | + actual = generateCabalFile filename flags |
| 48 | + |
| 49 | +-------------------------------------------------- |
| 50 | +-- Simple exe. |
| 51 | + |
| 52 | +exeFlags :: InitFlags |
| 53 | +exeFlags = baseTestFlags { |
| 54 | + packageType = Flag Executable |
| 55 | + , applicationDirs = Just ["app"] |
| 56 | + } |
| 57 | + |
| 58 | +expectedExeOutput :: String |
| 59 | +expectedExeOutput = |
| 60 | + "cabal-version: 2.4\n" |
| 61 | + ++ "name: foo\n" |
| 62 | + ++ "version: 3.2.1\n" |
| 63 | + ++ "synopsis: The foo package\n" |
| 64 | + ++ "homepage: https://github.com/foo/foo\n" |
| 65 | + ++ "license: NONE\n" |
| 66 | + ++ "author: me\n" |
| 67 | + ++ "maintainer: [email protected]\n" |
| 68 | + ++ "category: SomeCat\n" |
| 69 | + ++ "extra-source-files: CHANGELOG.md\n" |
| 70 | + ++ "\n" |
| 71 | + ++ "executable foo\n" |
| 72 | + ++ " main-is: Main.hs\n" |
| 73 | + ++ " build-depends: base:{} ^>=4.13.0.0, containers:{} ^>=5.7.0.0, unordered-containers:{} ^>=2.7.0.0\n" |
| 74 | + ++ " hs-source-dirs: app\n" |
| 75 | + ++ " default-language: Haskell2010\n" |
| 76 | + |
| 77 | +-- |
| 78 | +-------------------------------------------------- |
| 79 | + |
| 80 | + |
| 81 | + |
| 82 | +-------------------------------------------------- |
| 83 | +-- Lib, exe, and test suite |
| 84 | + |
| 85 | +libExeAndTestFlags :: InitFlags |
| 86 | +libExeAndTestFlags = baseTestFlags { |
| 87 | + packageType = Flag LibraryAndExecutable |
| 88 | + , initializeTestSuite = Flag True |
| 89 | + , testDirs = Just ["tests"] |
| 90 | + , exposedModules = Just (map ModuleName.fromString ["A", "B"]) |
| 91 | + , sourceDirs = Just ["lib"] |
| 92 | + , applicationDirs = Just ["app"] |
| 93 | + } |
| 94 | + |
| 95 | +expectedLibExeAndTestOutput :: String |
| 96 | +expectedLibExeAndTestOutput = |
| 97 | + "cabal-version: 2.4\n" |
| 98 | + ++ "name: foo\n" |
| 99 | + ++ "version: 3.2.1\n" |
| 100 | + ++ "synopsis: The foo package\n" |
| 101 | + ++ "homepage: https://github.com/foo/foo\n" |
| 102 | + ++ "license: NONE\n" |
| 103 | + ++ "author: me\n" |
| 104 | + ++ "maintainer: [email protected]\n" |
| 105 | + ++ "category: SomeCat\n" |
| 106 | + ++ "extra-source-files: CHANGELOG.md\n" |
| 107 | + ++ "\n" |
| 108 | + ++ "library\n" |
| 109 | + ++ " exposed-modules: A, B\n" |
| 110 | + ++ " build-depends: base:{} ^>=4.13.0.0, containers:{} ^>=5.7.0.0, unordered-containers:{} ^>=2.7.0.0\n" |
| 111 | + ++ " hs-source-dirs: lib\n" |
| 112 | + ++ " default-language: Haskell2010\n" |
| 113 | + ++ "\n" |
| 114 | + ++ "executable foo\n" |
| 115 | + ++ " main-is: Main.hs\n" |
| 116 | + ++ " build-depends: base:{} ^>=4.13.0.0, containers:{} ^>=5.7.0.0, unordered-containers:{} ^>=2.7.0.0\n" |
| 117 | + ++ " hs-source-dirs: app\n" |
| 118 | + ++ " default-language: Haskell2010\n" |
| 119 | + ++ "\n" |
| 120 | + ++ "test-suite foo-test\n" |
| 121 | + ++ " default-language: Haskell2010\n" |
| 122 | + ++ " type: exitcode-stdio-1.0\n" |
| 123 | + ++ " hs-source-dirs: tests\n" |
| 124 | + ++ " main-is: MyLibTest.hs\n" |
| 125 | + ++ " build-depends: base:{} ^>=4.13.0.0, containers:{} ^>=5.7.0.0, unordered-containers:{} ^>=2.7.0.0\n" |
| 126 | + |
| 127 | +-- |
| 128 | +-------------------------------------------------- |
| 129 | + |
| 130 | + |
| 131 | +testDependencies :: [Dependency] |
| 132 | +testDependencies = |
| 133 | + [ mkDependency (mkPackageName "base") (majorBoundVersion (mkVersion [4,13,0,0])) Set.empty |
| 134 | + , mkDependency (mkPackageName "containers") (majorBoundVersion (mkVersion [5,7,0,0])) Set.empty |
| 135 | + , mkDependency (mkPackageName "unordered-containers") (majorBoundVersion (mkVersion [2,7,0,0])) Set.empty |
| 136 | + ] |
| 137 | + |
| 138 | +baseTestFlags :: InitFlags |
| 139 | +baseTestFlags = InitFlags { |
| 140 | + packageName = Flag (mkPackageName "foo") |
| 141 | + , noComments = Flag False |
| 142 | + , minimal = Flag True |
| 143 | + , version = Flag (mkVersion [3,2,1]) |
| 144 | + , synopsis = Flag "The foo package" |
| 145 | + , homepage = Flag "https://github.com/foo/foo" |
| 146 | + , license = Flag SPDX.NONE |
| 147 | + , author = Flag "me" |
| 148 | + , email = Flag "[email protected]" |
| 149 | + , category = Flag (Left "SomeCat") |
| 150 | + , cabalVersion = Flag CabalSpecV2_4 |
| 151 | + , extraSrc = Just ["CHANGELOG.md"] |
| 152 | + , interactive = Flag False |
| 153 | + , mainIs = Flag "Main.hs" |
| 154 | + , otherModules = Nothing |
| 155 | + , otherExts = Nothing |
| 156 | + , applicationDirs = Nothing |
| 157 | + , language = Flag Haskell2010 |
| 158 | + , buildTools = Nothing |
| 159 | + , packageType = Flag Executable |
| 160 | + , initializeTestSuite = Flag False |
| 161 | + , exposedModules = Nothing |
| 162 | + , sourceDirs = Nothing |
| 163 | + , testDirs = Nothing |
| 164 | + , dependencies = Just testDependencies |
| 165 | + , quiet = Flag True |
| 166 | + , packageDir = NoFlag |
| 167 | + , simpleProject = Flag False |
| 168 | + , initHcPath = NoFlag |
| 169 | + , initVerbosity = NoFlag |
| 170 | + , overwrite = NoFlag |
| 171 | + } |
0 commit comments