-- -*- coding: utf-8; mode: haskell; -*-
-- File: tests/Tests/Mock.hs
--
-- License:
-- Copyright 2017 Awake Security
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE StandaloneDeriving #-}
-- |
-- Module : Tests.Mock
-- Copyright : Copyright 2017 Awake Security
-- License : Apache-2.0
-- Maintainer : opensource@awakesecurity.com
-- Stability : experimental
--
-- This module contains concrete types that are used when mocking interfaces
-- defined in "Language.Ninja.Mock".
module Tests.Mock
( FSAction (..)
) where
import Data.Text (Text)
import Language.Ninja.Misc.Path (Path)
import Language.Ninja.Mock.ReadFile (MonadReadFile (..))
import qualified Control.Monad.Mock as Mock
import Data.Type.Equality ((:~:) (Refl))
--------------------------------------------------------------------------------
data FSAction r where
ReadFile :: !Path -> FSAction Text
WriteFile :: !Path -> !Text -> FSAction ()
deriving instance Eq (FSAction r)
deriving instance Show (FSAction r)
instance Mock.Action FSAction where
eqAction (a@(ReadFile {})) (b@(ReadFile {})) | (a == b) = Just Refl
eqAction (a@(WriteFile {})) (b@(WriteFile {})) | (a == b) = Just Refl
eqAction _ _ = Nothing
instance (Monad m) => MonadReadFile (Mock.MockT FSAction m) where
readFile path = Mock.mockAction "readFile" (ReadFile path)
--------------------------------------------------------------------------------