2015-12-20 14:35:04 +00:00
|
|
|
module Test.Main where
|
|
|
|
|
2017-02-04 18:47:10 +00:00
|
|
|
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)
|
2017-02-04 18:47:10 +00:00
|
|
|
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)
|
2017-02-04 18:47:10 +00:00
|
|
|
import Test.Spec.Runner (RunnerEffects, run)
|
2017-05-07 04:25:58 +00:00
|
|
|
import Control.Monad.Eff.Console (log, CONSOLE)
|
2017-05-10 00:23:42 +00:00
|
|
|
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
|
|
|
|
"""
|
|
|
|
|
2017-05-10 00:23:42 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
2017-02-04 18:47:10 +00:00
|
|
|
main :: Eff (RunnerEffects ()) Unit
|
2015-12-20 14:35:04 +00:00
|
|
|
main = run [consoleReporter] do
|
2017-05-10 00:23:42 +00:00
|
|
|
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
|
2017-02-04 18:47:10 +00:00
|
|
|
(runExcept decoded) `shouldEqual` (Right parsedData)
|
2017-05-10 00:23:42 +00:00
|
|
|
describe "encode" do
|
2015-12-20 14:35:04 +00:00
|
|
|
it "Encodes YAML" $ do
|
|
|
|
let encoded = printYAML parsedData
|
|
|
|
encoded `shouldEqual` yamlOutput
|
2017-05-10 00:23:42 +00:00
|
|
|
|
|
|
|
let encodedStrMap = printYAML testStrMap
|
|
|
|
encodedStrMap `shouldEqual` yamlMapOutput
|
|
|
|
|
|
|
|
let encodedMap = printYAML testMap
|
|
|
|
encodedMap `shouldEqual` yamlMapOutput
|