packages feed

colorless-1.0.0: tests/ValSpec.hs

module ValSpec (spec) where

import qualified Data.Map as Map
import Test.Hspec
import Data.Aeson
import Data.Aeson.Types
import Data.Text (Text)

import Colorless.Runtime.Types
import Colorless.Runtime.Val

spec :: Spec
spec = do
  describe "parse basic types from json" $ do
    it "Enumeral" $ shouldBe
      (parseMaybe parseJSON $ object [ "tag" .= ("None" :: Text) ])
      (Just $ Val'ApiVal $ ApiVal'Enumeral $ Enumeral "None" Nothing)
    it "Struct" $ shouldBe
      (parseMaybe parseJSON $ object [ "x" .= True ])
      (Just $ Val'ApiVal $ ApiVal'Struct $ Struct $ Map.fromList [("x", Val'Const $ Const'Bool True)] )
    it "Struct" $ shouldBe
      (parseMaybe parseJSON $ object [ "x" .= object [ "tag" .= ("None" :: Text) ] ])
      (Just $ Val'ApiVal $ ApiVal'Struct $ Struct $ Map.fromList [("x", Val'ApiVal $ ApiVal'Enumeral $ Enumeral "None" Nothing)] )
  describe "parse types from val" $ do
    context "Option" $ do
      it "None" $ shouldBe
        (fromVal $ Val'Const Const'Null)
        (Just Nothing :: Maybe (Maybe Bool))
      it "Some" $ shouldBe
        (fromVal $ Val'Const $ Const'Bool $ True)
        (Just (Just True) :: Maybe (Maybe Bool))