packages feed

patrol-0.1.0.1: source/test-suite/Patrol/Type/MechanismMetaSpec.hs

{-# LANGUAGE QuasiQuotes #-}

module Patrol.Type.MechanismMetaSpec where

import qualified Data.Aeson as Aeson
import qualified Data.Aeson.QQ.Simple as Aeson
import qualified Patrol.Type.CError as CError
import qualified Patrol.Type.MachException as MachException
import qualified Patrol.Type.MechanismMeta as MechanismMeta
import qualified Patrol.Type.NsError as NsError
import qualified Patrol.Type.PosixSignal as PosixSignal
import qualified Test.Hspec as Hspec

spec :: Hspec.Spec
spec = Hspec.describe "Patrol.Type.MechanismMeta" $ do
  Hspec.describe "ToJSON" $ do
    Hspec.it "works" $ do
      let mechanismMeta = MechanismMeta.empty
          json = [Aeson.aesonQQ| {} |]
      Aeson.toJSON mechanismMeta `Hspec.shouldBe` json

    Hspec.it "works with a C error" $ do
      let cError = CError.empty {CError.number = Just 0}
          mechanismMeta = MechanismMeta.empty {MechanismMeta.errno = Just cError}
          json = [Aeson.aesonQQ| { "errno": { "number": 0 } } |]
      Aeson.toJSON mechanismMeta `Hspec.shouldBe` json

    Hspec.it "works with a mach exception" $ do
      let machException =
            MachException.empty
              { MachException.code = Just 0
              }
          mechanismMeta = MechanismMeta.empty {MechanismMeta.machException = Just machException}
          json = [Aeson.aesonQQ| { "mach_exception": { "code": 0 } } |]
      Aeson.toJSON mechanismMeta `Hspec.shouldBe` json

    Hspec.it "works with an NS error" $ do
      let nsError = NsError.empty {NsError.code = Just 0}
          mechanismMeta = MechanismMeta.empty {MechanismMeta.nsError = Just nsError}
          json = [Aeson.aesonQQ| { "ns_error": { "code": 0 } } |]
      Aeson.toJSON mechanismMeta `Hspec.shouldBe` json

    Hspec.it "works with a signal" $ do
      let posixSignal = PosixSignal.empty {PosixSignal.code = Just 0}
          mechanismMeta = MechanismMeta.empty {MechanismMeta.signal = Just posixSignal}
          json = [Aeson.aesonQQ| { "signal": { "code": 0 } } |]
      Aeson.toJSON mechanismMeta `Hspec.shouldBe` json