Skip to content

Commit 6a1af03

Browse files
authored
Feature/dhall csv tests (#2277)
* feat(dhall-to-csv): escape sequences test * feat(csv-to-dhall): escape sequences test * feat(dhall-to-csv): unions test * feat(csv-to-dhall): unions test * feat(dhall-to-csv): optionals test * feat(csv-to-dhall): optionals test * feat(dhall-to-csv): primitive types tests * feat(csv-to-dhall): primitive types test * fix(dhall-csv): take empty string instead of null for None * fix(dhall-csv): try to fix windows tests * fix(dhall-csv): try to fix windows tests * fix(dhall-csv): try to fix windows tests
1 parent 378d493 commit 6a1af03

37 files changed

+304
-2
lines changed

dhall-csv/src/Dhall/Csv.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,16 @@ dhallToCsv e0 = listConvert $ Core.normalize e0
6262
return $ Data.Csv.toNamedRecord $ Dhall.Map.toMap a'
6363
recordConvert e = Left $ Unsupported e
6464
fieldConvert :: Expr Void Void -> Either CompileError Data.Csv.Field
65+
fieldConvert (Core.BoolLit True) = return $ toField ("true" :: Text)
66+
fieldConvert (Core.BoolLit False) = return $ toField ("false" :: Text)
6567
fieldConvert (Core.NaturalLit a) = return $ toField a
6668
fieldConvert (Core.IntegerLit a) = return $ toField a
6769
fieldConvert (Core.DoubleLit (DhallDouble a)) = return $ toField a
6870
fieldConvert (Core.TextLit (Core.Chunks [] a)) = return $ toField a
6971
fieldConvert (Core.App (Core.Field (Core.Union _) _) a) = fieldConvert a
72+
fieldConvert (Core.Field (Core.Union _) (Core.FieldSelection _ k _)) = return $ toField k
73+
fieldConvert (Core.Some e) = fieldConvert e
74+
fieldConvert (Core.App Core.None _) = return $ toField ("" :: Text)
7075
fieldConvert e = Left $ Unsupported e
7176

7277
codeToValue

dhall-csv/src/Dhall/CsvToDhall.hs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import Data.List ((\\))
2424
import Data.Text (Text)
2525
import Data.Text.Encoding (decodeUtf8, decodeUtf8', encodeUtf8)
2626
import Data.Text.Encoding.Error (UnicodeException)
27-
import Data.Text.Read (decimal, double)
27+
import Data.Text.Read (decimal, double, signed)
2828
import Data.Void (Void)
2929
import Dhall.Core (Expr)
3030
import Dhall.Src (Src)
@@ -202,7 +202,7 @@ dhallFromCsv Conversion{..} typeExpr = listConvert (Core.normalize typeExpr)
202202
case decodeUtf8' field of
203203
Left err -> Left $ UnicodeError err
204204
Right _field ->
205-
case decimal _field of
205+
case (signed decimal) _field of
206206
Right (v, "") -> Right $ Core.IntegerLit v -- What to do when there is more text left to read?
207207
_ -> Left $ Mismatch Core.Integer field key
208208

@@ -221,6 +221,9 @@ dhallFromCsv Conversion{..} typeExpr = listConvert (Core.normalize typeExpr)
221221
Left err -> Left $ UnicodeError err
222222
Right _field -> return $ Core.TextLit $ Core.Chunks [] $ _field
223223

224+
-- Optionals null
225+
fieldConvert _ (Core.App Core.Optional t) (Just "") = return $ Core.App Core.None t
226+
224227
-- Optionals
225228
fieldConvert key (Core.App Core.Optional t) maybeField = do
226229
expression <- fieldConvert key t maybeField
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
someDouble
2+
3.14
3+
-2.68
4+
NaN
5+
2.0e128
6+
1.0e-12
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[ { someDouble = 3.14 }
2+
, { someDouble = -2.68 }
3+
, { someDouble = NaN }
4+
, { someDouble = 2.0000000000000005e128 }
5+
, { someDouble = 1.0e-12 }
6+
]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
List { someDouble : Double }
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
escapedText1,escapedText2
2+
"
3+
","
4+
"
5+
\,\
6+
"""",""""
7+
/,/
8+
$,$
9+
,
10+
,
11+
,
12+
☺,☺
13+
",",","
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[ { escapedText1 = "\n", escapedText2 = "\n" }
2+
, { escapedText1 = "\\", escapedText2 = "\\" }
3+
, { escapedText1 = "\"", escapedText2 = "\"" }
4+
, { escapedText1 = "/", escapedText2 = "/" }
5+
, { escapedText1 = "\$", escapedText2 = "\$" }
6+
, { escapedText1 = "\b", escapedText2 = "\b" }
7+
, { escapedText1 = "\f", escapedText2 = "\f" }
8+
, { escapedText1 = "\t", escapedText2 = "\t" }
9+
, { escapedText1 = "", escapedText2 = "" }
10+
, { escapedText1 = ",", escapedText2 = "," }
11+
]
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
List
2+
{ escapedText1 : Text
3+
, escapedText2 : Text
4+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
someInteger
2+
1
3+
-1
4+
0
5+
0
6+
10000000000
7+
-10000000000
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[ { someInteger = +1 }
2+
, { someInteger = -1 }
3+
, { someInteger = +0 }
4+
, { someInteger = +0 }
5+
, { someInteger = +10000000000 }
6+
, { someInteger = -10000000000 }
7+
]

0 commit comments

Comments
 (0)