Skip to content

Commit c15413f

Browse files
committed
Fixes #65 add elm-explorations/test dependency as part of init
1 parent 80784cc commit c15413f

File tree

4 files changed

+149
-83
lines changed

4 files changed

+149
-83
lines changed

src/Builder/File.elm

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ module Builder.File exposing
99
, timeDecoder
1010
, timeEncoder
1111
, writeBinary
12-
, writeBuilder
1312
, writePackage
1413
, writeUtf8
1514
, zeroTime
@@ -115,15 +114,6 @@ readStdin =
115114

116115

117116

118-
-- WRITE BUILDER
119-
120-
121-
writeBuilder : FilePath -> String -> IO ()
122-
writeBuilder =
123-
IO.writeString
124-
125-
126-
127117
-- WRITE PACKAGE
128118

129119

src/Compiler/Elm/Package.elm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ module Compiler.Elm.Package exposing
2020
, parser
2121
, random
2222
, suggestions
23+
, test
2324
, time
2425
, toChars
2526
, toJsonString
@@ -173,6 +174,11 @@ linearAlgebra =
173174
toName elmExplorations "linear-algebra"
174175

175176

177+
test : Name
178+
test =
179+
toName elmExplorations "test"
180+
181+
176182
elm : Author
177183
elm =
178184
"elm"

src/Terminal/Init.elm

Lines changed: 142 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@ module Terminal.Init exposing
33
, run
44
)
55

6+
import Basics.Extra exposing (flip)
7+
import Builder.Deps.Registry as Registry
68
import Builder.Deps.Solver as Solver
79
import Builder.Elm.Outline as Outline
10+
import Builder.File as File
811
import Builder.Reporting as Reporting
912
import Builder.Reporting.Exit as Exit
1013
import Builder.Reporting.Exit.Help as Help
14+
import Builder.Stuff as Stuff
1115
import Compiler.Data.NonEmptyList as NE
1216
import Compiler.Elm.Constraint as Con
1317
import Compiler.Elm.Licenses as Licenses
@@ -111,78 +115,115 @@ init package =
111115
IO.pure (Err (Exit.InitRegistryProblem problem))
112116

113117
Ok (Solver.Env cache _ connection registry) ->
114-
Solver.verify cache connection registry defaults
115-
|> IO.bind
116-
(\result ->
117-
case result of
118-
Solver.SolverErr exit ->
119-
IO.pure (Err (Exit.InitSolverProblem exit))
120-
121-
Solver.NoSolution ->
122-
IO.pure (Err (Exit.InitNoSolution (Dict.keys compare defaults)))
123-
124-
Solver.NoOfflineSolution ->
125-
IO.pure (Err (Exit.InitNoOfflineSolution (Dict.keys compare defaults)))
126-
127-
Solver.SolverOk details ->
128-
Utils.dirCreateDirectoryIfMissing True "src"
129-
|> IO.bind
130-
(\_ ->
131-
let
132-
outline : Outline.Outline
133-
outline =
134-
if package then
135-
let
136-
directs : Dict ( String, String ) Pkg.Name Con.Constraint
137-
directs =
138-
Dict.map
139-
(\pkg _ ->
140-
let
141-
(Solver.Details vsn _) =
142-
Utils.find identity pkg details
143-
in
144-
Con.untilNextMajor vsn
145-
)
146-
packageDefaults
147-
in
148-
Outline.Pkg <|
149-
Outline.PkgOutline
150-
Pkg.dummyName
151-
Outline.defaultSummary
152-
Licenses.bsd3
153-
V.one
154-
(Outline.ExposedList [])
155-
directs
156-
Dict.empty
157-
Con.defaultElm
158-
159-
else
160-
let
161-
solution : Dict ( String, String ) Pkg.Name V.Version
162-
solution =
163-
Dict.map (\_ (Solver.Details vsn _) -> vsn) details
164-
165-
directs : Dict ( String, String ) Pkg.Name V.Version
166-
directs =
167-
Dict.intersection compare solution defaults
168-
169-
indirects : Dict ( String, String ) Pkg.Name V.Version
170-
indirects =
171-
Dict.diff solution defaults
172-
in
173-
Outline.App <|
174-
Outline.AppOutline V.elmCompiler
175-
(NE.Nonempty (Outline.RelativeSrcDir "src") [])
176-
directs
177-
indirects
178-
Dict.empty
179-
Dict.empty
180-
in
181-
Outline.write "." outline
182-
)
183-
|> IO.bind (\_ -> IO.putStrLn "Okay, I created it. Now read that link!")
184-
|> IO.fmap (\_ -> Ok ())
185-
)
118+
verify cache connection registry defaults <|
119+
\details ->
120+
verify cache connection registry testDefaults <|
121+
\testDetails ->
122+
Utils.dirCreateDirectoryIfMissing True "src"
123+
|> IO.bind (\_ -> Utils.dirCreateDirectoryIfMissing True "tests")
124+
|> IO.bind (\_ -> File.writeUtf8 "tests/Example.elm" testExample)
125+
|> IO.bind
126+
(\_ ->
127+
let
128+
outline : Outline.Outline
129+
outline =
130+
if package then
131+
let
132+
directs : Dict ( String, String ) Pkg.Name Con.Constraint
133+
directs =
134+
Dict.map
135+
(\pkg _ ->
136+
let
137+
(Solver.Details vsn _) =
138+
Utils.find identity pkg details
139+
in
140+
Con.untilNextMajor vsn
141+
)
142+
packageDefaults
143+
144+
testDirects : Dict ( String, String ) Pkg.Name Con.Constraint
145+
testDirects =
146+
Dict.map
147+
(\pkg _ ->
148+
let
149+
(Solver.Details vsn _) =
150+
Utils.find identity pkg testDetails
151+
in
152+
Con.untilNextMajor vsn
153+
)
154+
packageTestDefaults
155+
in
156+
Outline.Pkg <|
157+
Outline.PkgOutline
158+
Pkg.dummyName
159+
Outline.defaultSummary
160+
Licenses.bsd3
161+
V.one
162+
(Outline.ExposedList [])
163+
directs
164+
testDirects
165+
Con.defaultElm
166+
167+
else
168+
let
169+
solution : Dict ( String, String ) Pkg.Name V.Version
170+
solution =
171+
Dict.map (\_ (Solver.Details vsn _) -> vsn) details
172+
173+
directs : Dict ( String, String ) Pkg.Name V.Version
174+
directs =
175+
Dict.intersection compare solution defaults
176+
177+
indirects : Dict ( String, String ) Pkg.Name V.Version
178+
indirects =
179+
Dict.diff solution defaults
180+
181+
testSolution : Dict ( String, String ) Pkg.Name V.Version
182+
testSolution =
183+
Dict.map (\_ (Solver.Details vsn _) -> vsn) testDetails
184+
185+
testDirects : Dict ( String, String ) Pkg.Name V.Version
186+
testDirects =
187+
Dict.intersection compare testSolution testDefaults
188+
189+
testIndirects : Dict ( String, String ) Pkg.Name V.Version
190+
testIndirects =
191+
Dict.diff testSolution testDefaults
192+
|> flip Dict.diff directs
193+
|> flip Dict.diff indirects
194+
in
195+
Outline.App <|
196+
Outline.AppOutline V.elmCompiler
197+
(NE.Nonempty (Outline.RelativeSrcDir "src") [])
198+
directs
199+
indirects
200+
testDirects
201+
testIndirects
202+
in
203+
Outline.write "." outline
204+
)
205+
|> IO.bind (\_ -> IO.putStrLn "Okay, I created it. Now read that link!")
206+
|> IO.fmap (\_ -> Ok ())
207+
)
208+
209+
210+
verify : Stuff.PackageCache -> Solver.Connection -> Registry.Registry -> Dict ( String, String ) Pkg.Name Con.Constraint -> (Dict ( String, String ) Pkg.Name Solver.Details -> IO (Result Exit.Init ())) -> IO (Result Exit.Init ())
211+
verify cache connection registry constraints callback =
212+
Solver.verify cache connection registry constraints
213+
|> IO.bind
214+
(\result ->
215+
case result of
216+
Solver.SolverErr exit ->
217+
IO.pure (Err (Exit.InitSolverProblem exit))
218+
219+
Solver.NoSolution ->
220+
IO.pure (Err (Exit.InitNoSolution (Dict.keys compare constraints)))
221+
222+
Solver.NoOfflineSolution ->
223+
IO.pure (Err (Exit.InitNoOfflineSolution (Dict.keys compare constraints)))
224+
225+
Solver.SolverOk details ->
226+
callback details
186227
)
187228

188229

@@ -195,8 +236,37 @@ defaults =
195236
]
196237

197238

239+
testDefaults : Dict ( String, String ) Pkg.Name Con.Constraint
240+
testDefaults =
241+
Dict.fromList identity
242+
[ ( Pkg.test, Con.anything )
243+
]
244+
245+
198246
packageDefaults : Dict ( String, String ) Pkg.Name Con.Constraint
199247
packageDefaults =
200248
Dict.fromList identity
201249
[ ( Pkg.core, Con.anything )
202250
]
251+
252+
253+
packageTestDefaults : Dict ( String, String ) Pkg.Name Con.Constraint
254+
packageTestDefaults =
255+
Dict.fromList identity
256+
[ ( Pkg.test, Con.anything )
257+
]
258+
259+
260+
testExample : String
261+
testExample =
262+
"""module Example exposing (..)
263+
264+
import Expect exposing (Expectation)
265+
import Fuzz exposing (Fuzzer, int, list, string)
266+
import Test exposing (..)
267+
268+
269+
suite : Test
270+
suite =
271+
todo "Implement our first test. See https://package.elm-lang.org/packages/elm-explorations/test/latest for how to do this!"
272+
"""

src/Terminal/Make.elm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ generate : Reporting.Style -> FilePath -> String -> NE.Nonempty ModuleName.Raw -
306306
generate style target builder names =
307307
Task.io
308308
(Utils.dirCreateDirectoryIfMissing True (Utils.fpTakeDirectory target)
309-
|> IO.bind (\_ -> File.writeBuilder target builder)
309+
|> IO.bind (\_ -> File.writeUtf8 target builder)
310310
|> IO.bind (\_ -> Reporting.reportGenerate style names target)
311311
)
312312

0 commit comments

Comments
 (0)