purescript-yaml/test/Main.purs

146 lines
3.0 KiB
Haskell
Raw Normal View History

2015-12-20 14:35:04 +00:00
module Test.Main where
import Control.Monad.Eff (Eff)
import Control.Monad.Except (runExcept)
import Data.Either (Either(..))
2017-05-07 04:25:58 +00:00
import Data.Foreign (F, readArray)
import Data.YAML.Foreign.Decode (parseYAML)
import Data.YAML.Foreign.Encode (printYAML)
2017-05-07 04:25:58 +00:00
import Data.Traversable (traverse)
import Prelude (Unit, bind, ($), void, discard, (>>=))
import Test.Instances (readGeoObject, readMobility, readPoint, GeoObject(..), Mobility(..), Point(..))
2015-12-20 14:35:04 +00:00
import Test.Spec (describe, it)
import Test.Spec.Assertions (shouldEqual)
import Test.Spec.Reporter.Console (consoleReporter)
import Test.Spec.Runner (RunnerEffects, run)
2017-05-07 04:25:58 +00:00
import Control.Monad.Eff.Console (log, CONSOLE)
import Data.Map as Map
import Data.Map (Map)
import Data.StrMap as StrMap
import Data.StrMap (StrMap)
2015-12-20 14:35:04 +00:00
yamlInput :: String
yamlInput = """
- Name: House
Scale: 9.5
# Points describe the outer limit of an object.
Points:
- X: 10
Y: 10
- X: 20
Y: 10
- X: 5
Y: 5
Mobility: Fix
Coverage: 10
- Name: Tree
Scale: 1
Points:
- X: 1
Y: 1
- X: 2
Y: 2
- X: 0
Y: 0
Mobility: Fix
Coverage: 10
"""
yamlOutput :: String
2017-05-07 04:25:58 +00:00
yamlOutput = """- Mobility: Fix
2015-12-20 14:35:04 +00:00
Points:
- X: 10
'Y': 10
- X: 20
'Y': 10
- X: 5
'Y': 5
2017-05-07 04:25:58 +00:00
Coverage: 10
Name: House
2015-12-20 14:35:04 +00:00
Scale: 9.5
2017-05-07 04:25:58 +00:00
- Mobility: Fix
2015-12-20 14:35:04 +00:00
Points:
- X: 1
'Y': 1
- X: 2
'Y': 2
- X: 0
'Y': 0
2017-05-07 04:25:58 +00:00
Coverage: 10
Name: Tree
2015-12-20 14:35:04 +00:00
Scale: 1
"""
yamlMapOutput :: String
yamlMapOutput = """key:
- Mobility: Fix
Points:
- X: 10
'Y': 10
- X: 20
'Y': 10
- X: 5
'Y': 5
Coverage: 10
Name: House
Scale: 9.5
- Mobility: Fix
Points:
- X: 1
'Y': 1
- X: 2
'Y': 2
- X: 0
'Y': 0
Coverage: 10
Name: Tree
Scale: 1
"""
testStrMap :: StrMap (Array GeoObject)
testStrMap = StrMap.singleton "key" parsedData
testMap :: Map String (Array GeoObject)
testMap = Map.singleton "key" parsedData
2015-12-20 14:35:04 +00:00
parsedData :: Array GeoObject
parsedData =
[ GeoObject
{ coverage: 10.0
, mobility: Fix
, name: "House"
, points: [ Point 10 10, Point 20 10, Point 5 5 ]
, scale: 9.5
}
, GeoObject
{ coverage: 10.0
, mobility: Fix
, name: "Tree"
, points: [ Point 1 1, Point 2 2, Point 0 0 ]
, scale: 1.0
}
]
main :: Eff (RunnerEffects ()) Unit
2015-12-20 14:35:04 +00:00
main = run [consoleReporter] do
describe "purescript-yaml" do
2015-12-20 14:35:04 +00:00
describe "decode" do
it "Decodes YAML" do
2017-05-07 04:25:58 +00:00
let decoded =
(parseYAML yamlInput) >>=
readArray >>=
traverse readGeoObject
(runExcept decoded) `shouldEqual` (Right parsedData)
describe "encode" do
2015-12-20 14:35:04 +00:00
it "Encodes YAML" $ do
let encoded = printYAML parsedData
encoded `shouldEqual` yamlOutput
let encodedStrMap = printYAML testStrMap
encodedStrMap `shouldEqual` yamlMapOutput
let encodedMap = printYAML testMap
encodedMap `shouldEqual` yamlMapOutput