git.iko.soy/typeable/stackage2nix
on master help sign in
191 lines 6.2 kB history raw
1{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE QuasiQuotes #-}
4module Stack.ConfigSpec (spec) where
6import Data.ByteString
7import Data.List.NonEmpty as NE
8import Data.Text.Encoding as T
9import Data.Yaml as Y
10import Network.URI as URI
11import Stack.Config
12import Test.Hspec
13import Text.Shakespeare.Text
16spec :: Spec
17spec = describe "StackConfig" $ do
18 specify "minimal"
19 $ checkYamlConfig minimalBs minimalConf
20 specify "packageDefault"
21 $ checkYamlConfig packageDefaultBs packageDefaultConf
22 specify "packageSimpleList"
23 $ checkYamlConfig packageSimpleListBs packageSimpleListConf
24 specify "packageLocations"
25 $ checkYamlConfig packageLocationsBs packageLocationsConf
26 specify "packageExtraDeps"
27 $ checkYamlConfig packageExtraDepsBs packageExtraDepsConf
28 specify "packageMixed"
29 $ checkYamlConfig packageMixedBs packageMixedConf
30 specify "packageExtraDepsNew"
31 $ checkYamlConfig packageExtraDepsNewBs packageExtraDepsNewConf
33parseYamlConfig :: ByteString -> Maybe StackConfig
34parseYamlConfig = either (const Nothing) (Just . fromYamlConfig) . Y.decodeEither'
36checkYamlConfig :: ByteString -> StackConfig -> Expectation
37checkYamlConfig bs sc = parseYamlConfig bs `shouldBe` Just sc
39stUri :: String -> URI
40stUri s =
41 let Just uri = parseURI s
42 in uri
44minimalBs :: ByteString
45minimalBs = T.encodeUtf8 [st|
46resolver: lts-10.0
47|]
49minimalConf :: StackConfig
50minimalConf = StackConfig
51 { _scResolver = StackResolver "lts-10.0"
52 , _scPackages = NE.fromList
53 [ StackPackage (PlFilePath ".") False Nothing]
54 , _scExtraDeps = []
55 }
57packageDefaultBs :: ByteString
58packageDefaultBs = T.encodeUtf8 [st|
59resolver: lts-10.0
60packages:
61 - .
62|]
64packageDefaultConf :: StackConfig
65packageDefaultConf = minimalConf
67packageSimpleListBs :: ByteString
68packageSimpleListBs = T.encodeUtf8 [st|
69resolver: lts-10.0
70packages:
71 - client
72 - server
73|]
75packageSimpleListConf :: StackConfig
76packageSimpleListConf = StackConfig
77 { _scResolver = StackResolver "lts-10.0"
78 , _scPackages = NE.fromList
79 [ StackPackage (PlFilePath "client") False Nothing
80 , StackPackage (PlFilePath "server") False Nothing ]
81 , _scExtraDeps = []
82 }
84packageLocationsBs :: ByteString
85packageLocationsBs = T.encodeUtf8 [st|
86resolver: lts-10.0
87packages:
88 - location: humble/package
89 subdirs:
90 - client
91 - server
92 - location: https://example.com/foo/bar/baz-0.0.2.tar.gz
93 extra-dep: true
94 subdirs:
95 - extra
96 - location:
97 git: git@github.com:example/mega-repo
98 commit: 6a86ee32e5b869a877151f74064572225e1a0000
99 subdirs:
100 - subdir1
101 - subdir2
102 extra-dep: true
103|]
105packageLocationsConf :: StackConfig
106packageLocationsConf = StackConfig
107 { _scResolver = StackResolver "lts-10.0"
108 , _scPackages = NE.fromList
109 [ StackPackage (PlFilePath "humble/package") False (Just "client")
110 , StackPackage (PlFilePath "humble/package") False (Just "server") ]
111 , _scExtraDeps =
112 [ StackPackage (PlUri $ stUri "https://example.com/foo/bar/baz-0.0.2.tar.gz") True (Just "extra")
113 , StackPackage (PlRepo $ Repo (Vcs "git") "git@github.com:example/mega-repo" "6a86ee32e5b869a877151f74064572225e1a0000") True (Just "subdir1")
114 , StackPackage (PlRepo $ Repo (Vcs "git") "git@github.com:example/mega-repo" "6a86ee32e5b869a877151f74064572225e1a0000") True (Just "subdir2")
115 ]
116 }
118packageExtraDepsBs :: ByteString
119packageExtraDepsBs = T.encodeUtf8 [st|
120resolver: lts-10.0
121extra-deps:
122 - acme-missiles-0.3
123 - humble-package-1
124|]
126packageExtraDepsConf :: StackConfig
127packageExtraDepsConf = StackConfig
128 { _scResolver = StackResolver "lts-10.0"
129 , _scPackages = NE.fromList [ StackPackage (PlFilePath ".") False Nothing ]
130 , _scExtraDeps =
131 [ StackPackage (PlIndex $ PackageIndex "acme-missiles-0.3" Nothing) True Nothing
132 , StackPackage (PlIndex $ PackageIndex "humble-package-1" Nothing) True Nothing ]
133 }
135packageMixedBs :: ByteString
136packageMixedBs = T.encodeUtf8 [st|
137resolver: lts-10.0
138packages:
139 - client
140 - server
141extra-deps:
142 - acme-missiles-0.3
143 - humble-package-1
144|]
146packageMixedConf :: StackConfig
147packageMixedConf = StackConfig
148 { _scResolver = StackResolver "lts-10.0"
149 , _scPackages = NE.fromList
150 [ StackPackage (PlFilePath "client") False Nothing
151 , StackPackage (PlFilePath "server") False Nothing ]
152 , _scExtraDeps =
153 [ StackPackage (PlIndex $ PackageIndex "acme-missiles-0.3" Nothing) True Nothing
154 , StackPackage (PlIndex $ PackageIndex "humble-package-1" Nothing) True Nothing ]
155 }
157packageExtraDepsNewBs :: ByteString
158packageExtraDepsNewBs = T.encodeUtf8 [st|
159resolver: lts-10.0
160extra-deps:
161 - vendor/lib
162 - acme-missiles-0.3
163 - git: git@github.com:yesodweb/wai
164 commit: 2f8a8e1b771829f4a8a77c0111352ce45a14c30f
165 subdirs:
166 - auto-update
167 - wai
168 - https://example.com/foo/bar/baz-0.0.2.tar.gz
169 - archive: http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip
170 subdirs:
171 - wai
172 - warp
173 - archive: ../acme-missiles-0.3.tar.gz
174 sha256: e563d8b524017a06b32768c4db8eff1f822f3fb22a90320b7e414402647b735b
175|]
177packageExtraDepsNewConf :: StackConfig
178packageExtraDepsNewConf = StackConfig
179 { _scResolver = StackResolver "lts-10.0"
180 , _scPackages = NE.fromList [ StackPackage (PlFilePath ".") False Nothing ]
181 , _scExtraDeps =
182 [ StackPackage (PlFilePath "vendor/lib") True Nothing
183 , StackPackage (PlIndex $ PackageIndex "acme-missiles-0.3" Nothing) True Nothing
184 , StackPackage (PlRepo $ Repo (Vcs "git") "git@github.com:yesodweb/wai" "2f8a8e1b771829f4a8a77c0111352ce45a14c30f") True (Just "auto-update")
185 , StackPackage (PlRepo $ Repo (Vcs "git") "git@github.com:yesodweb/wai" "2f8a8e1b771829f4a8a77c0111352ce45a14c30f") True (Just "wai")
186 , StackPackage (PlUri $ stUri "https://example.com/foo/bar/baz-0.0.2.tar.gz") True Nothing
187 , StackPackage (PlUri $ stUri "http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip") True (Just "wai")
188 , StackPackage (PlUri $ stUri "http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip") True (Just "warp")
189 , StackPackage (PlFilePath "../acme-missiles-0.3.tar.gz") True Nothing
190 ]
191 }