packages feed

nvim-hs-0.2.0: test-suite/Neovim/RPC/SocketReaderSpec.hs

{-# LANGUAGE OverloadedStrings #-}
module Neovim.RPC.SocketReaderSpec
    where

import           Neovim
import           Neovim.Plugin.Classes
import           Neovim.RPC.Common
import           Neovim.RPC.SocketReader (parseParams)

import           Test.Hspec
import           Test.QuickCheck

spec :: Spec
spec = do
  describe "parseParams" $ do

    it "should pass the inner argument list as is for functions" $ do
      parseParams (Function (F "") Sync) [ObjectArray [ObjectNil, ObjectBinary "ABC"]]
        `shouldBe` [ObjectNil, ObjectBinary "ABC"]
      parseParams (Function (F "") Sync) [ObjectNil, ObjectBinary "ABC"]
        `shouldBe` [ObjectNil, ObjectBinary "ABC"]
      parseParams (Function (F "") Sync) []
        `shouldBe` []

    let defCmdArgs = def :: CommandArguments
    it "should filter out implicit arguments" $ do
      parseParams (Command (F "") (mkCommandOptions [CmdSync Sync, CmdNargs "*"]))
          [ObjectArray []]
        `shouldBe` [toObject defCmdArgs]
      parseParams (Command (F "") (mkCommandOptions [CmdSync Sync, CmdNargs "*"]))
          [ObjectArray [ObjectBinary "7", ObjectInt 7]]
        `shouldBe` [toObject defCmdArgs, ObjectBinary "7", ObjectInt 7]

    it "should set the CommandOptions argument as expected" $ do
      parseParams (Command (F "") (mkCommandOptions
                    [ CmdRange WholeFile, CmdBang, CmdNargs "*"]))
          [ ObjectArray [ObjectBinary "7", ObjectBinary "8", ObjectNil]
          , ObjectArray [ObjectInt 1, ObjectInt 12]
          , ObjectInt 1
          ]
        `shouldBe` [ toObject (defCmdArgs { bang = Just True, range = Just (1,12) })
                   , ObjectBinary "7"
                   , ObjectBinary "8"
                   , ObjectNil]

    it "should pass this test" $ do
        parseParams (Command (F "") (mkCommandOptions [CmdNargs "+", CmdRange WholeFile, CmdBang]))
            [ ObjectArray [ ObjectBinary "me"
                          , ObjectBinary "up"
                          , ObjectBinary "before"
                          , ObjectBinary "you"
                          , ObjectBinary "go"
                          , ObjectBinary "go"
                          ]
            , ObjectArray [ ObjectInt 1
                          , ObjectInt 27
                          ]
            , ObjectInt 0
            ]
          `shouldBe` [ toObject (defCmdArgs { bang = Just False, range = Just (1,27) })
                     , ObjectBinary "me"
                     , ObjectArray [ ObjectBinary "up"
                                   , ObjectBinary "before"
                                   , ObjectBinary "you"
                                   , ObjectBinary "go"
                                   , ObjectBinary "go"
                                   ]
                     ]