packages feed

hinterface-0.5.0.0: test/Foreign/Erlang/ControlMessageSpec.hs

{-# LANGUAGE ScopedTypeVariables #-}

module Foreign.Erlang.ControlMessageSpec ( spec ) where

import           Test.Hspec
import           Test.QuickCheck

import qualified Data.ByteString.Lazy           as LBS
import           Data.Binary                    ( decode, encode )

import           Foreign.Erlang.ControlMessage
import           Foreign.Erlang.Term

spec :: Spec
spec = describe "ControlMessage" $ do
    it "decode . encode = id" $
        property $
            \(a :: ControlMessage) -> (decode . encode) a `shouldBe` a
    it "TICK encodes as expected" $
        LBS.unpack (encode TICK) `shouldBe` [ 0, 0, 0, 0 ]
    it "LINK encodes as expected" $
        LBS.unpack (encode (LINK (pid "from" 1 2 3) (pid "to" 4 5 6))) `shouldBe`
            [ 0
            , 0
            , 0
            , 38
            , 112
            , 131
            , 104
            , 3
            , 97
            , 1
            , 103
            , 100
            , 0
            , 4
            , 102
            , 114
            , 111
            , 109
            , 0
            , 0
            , 0
            , 1
            , 0
            , 0
            , 0
            , 2
            , 3
            , 103
            , 100
            , 0
            , 2
            , 116
            , 111
            , 0
            , 0
            , 0
            , 4
            , 0
            , 0
            , 0
            , 5
            , 6
            ]
    it "SEND encodes as expected" $
        LBS.unpack (encode (SEND (pid "to" 4 5 6) (atom "hello"))) `shouldBe`
            [ 0
            , 0
            , 0
            , 33
            , 112
            , 131
            , 104
            , 3
            , 97
            , 2
            , 100
            , 0
            , 0
            , 103
            , 100
            , 0
            , 2
            , 116
            , 111
            , 0
            , 0
            , 0
            , 4
            , 0
            , 0
            , 0
            , 5
            , 6
            , 131
            , 100
            , 0
            , 5
            , 104
            , 101
            , 108
            , 108
            , 111
            ]
    it "EXIT encodes as expected" $
        LBS.unpack (encode (EXIT (pid "from" 1 2 3) (pid "to" 4 5 6) (atom "normal"))) `shouldBe`
            [ 0
            , 0
            , 0
            , 47
            , 112
            , 131
            , 104
            , 4
            , 97
            , 3
            , 103
            , 100
            , 0
            , 4
            , 102
            , 114
            , 111
            , 109
            , 0
            , 0
            , 0
            , 1
            , 0
            , 0
            , 0
            , 2
            , 3
            , 103
            , 100
            , 0
            , 2
            , 116
            , 111
            , 0
            , 0
            , 0
            , 4
            , 0
            , 0
            , 0
            , 5
            , 6
            , 100
            , 0
            , 6
            , 110
            , 111
            , 114
            , 109
            , 97
            , 108
            ]
    it "UNLINK encodes as expected" $
        LBS.unpack (encode (UNLINK (pid "from" 1 2 3) (pid "to" 4 5 6))) `shouldBe`
            [ 0
            , 0
            , 0
            , 38
            , 112
            , 131
            , 104
            , 3
            , 97
            , 4
            , 103
            , 100
            , 0
            , 4
            , 102
            , 114
            , 111
            , 109
            , 0
            , 0
            , 0
            , 1
            , 0
            , 0
            , 0
            , 2
            , 3
            , 103
            , 100
            , 0
            , 2
            , 116
            , 111
            , 0
            , 0
            , 0
            , 4
            , 0
            , 0
            , 0
            , 5
            , 6
            ]
    it "NODE_LINK encodes as expected" $
        LBS.unpack (encode NODE_LINK) `shouldBe` [ 0, 0, 0, 6, 112, 131, 104, 1, 97, 5 ]
    it "REG_SEND encodes as expected" $
        LBS.unpack (encode (REG_SEND (pid "from" 1 2 3) (atom "to") (atom "hello"))) `shouldBe`
            [ 0
            , 0
            , 0
            , 40
            , 112
            , 131
            , 104
            , 4
            , 97
            , 6
            , 103
            , 100
            , 0
            , 4
            , 102
            , 114
            , 111
            , 109
            , 0
            , 0
            , 0
            , 1
            , 0
            , 0
            , 0
            , 2
            , 3
            , 100
            , 0
            , 0
            , 100
            , 0
            , 2
            , 116
            , 111
            , 131
            , 100
            , 0
            , 5
            , 104
            , 101
            , 108
            , 108
            , 111
            ]
    it "GROUP_LEADER encodes as expected" $
        LBS.unpack (encode (GROUP_LEADER (pid "from" 1 2 3) (pid "to" 4 5 6))) `shouldBe`
            [ 0
            , 0
            , 0
            , 38
            , 112
            , 131
            , 104
            , 3
            , 97
            , 7
            , 103
            , 100
            , 0
            , 4
            , 102
            , 114
            , 111
            , 109
            , 0
            , 0
            , 0
            , 1
            , 0
            , 0
            , 0
            , 2
            , 3
            , 103
            , 100
            , 0
            , 2
            , 116
            , 111
            , 0
            , 0
            , 0
            , 4
            , 0
            , 0
            , 0
            , 5
            , 6
            ]
    it "EXIT2 encodes as expected" $
        LBS.unpack (encode (EXIT2 (pid "from" 1 2 3) (pid "to" 4 5 6) (atom "normal"))) `shouldBe`
            [ 0
            , 0
            , 0
            , 47
            , 112
            , 131
            , 104
            , 4
            , 97
            , 8
            , 103
            , 100
            , 0
            , 4
            , 102
            , 114
            , 111
            , 109
            , 0
            , 0
            , 0
            , 1
            , 0
            , 0
            , 0
            , 2
            , 3
            , 103
            , 100
            , 0
            , 2
            , 116
            , 111
            , 0
            , 0
            , 0
            , 4
            , 0
            , 0
            , 0
            , 5
            , 6
            , 100
            , 0
            , 6
            , 110
            , 111
            , 114
            , 109
            , 97
            , 108
            ]