packages feed

hsprocess-0.2: tests/System/Console/HSProcess/Representable/Test.hs

{- 
  Copyright 2013 Mario Pastorelli (pastorelli.mario@gmail.com)
 
    This file is part of HSProcess.
 
  HSProcess is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.
 
  HSProcess is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with HSProcess.  If not, see <http://www.gnu.org/licenses/>.
-}
{-# LANGUAGE ExtendedDefaultRules,OverloadedStrings #-}
module System.Console.HSProcess.Representable.Test where

import qualified Data.ByteString.Lazy.Char8 as C8

import qualified Test.Framework as TF
import Test.Framework.Providers.HUnit (hUnitTestToTests)
import Test.HUnit

import Data.Map (Map)
import qualified Data.Map as M
import Data.Set (Set)
import qualified Data.Set as S

import System.Console.HSProcess.Representable

import Test.Hspec 

spec :: Spec
spec = describe "repr" $ do
    it "can convert boolean values" $ do
        repr True `shouldBe` ["True"]
        repr False `shouldBe` ["False"]

    it "can convert char values" $ example $
        repr 'c' `shouldBe` ["c"]

    it "can convert double values" $ example $
        repr (1.1::Double) `shouldBe` ["1.1"]

    it "can convert float values" $ example $
        repr (1.1::Float) `shouldBe` ["1.1"]

    it "can convert int values" $ example $
        repr (1::Int) `shouldBe` ["1"]

    it "can convert integer values" $ example $
        repr (1::Integer) `shouldBe` ["1"]

    it "can convert maybe values" $ do 
        example $ repr (Nothing::Maybe ()) `shouldBe` [""]
        example $ repr (Just 1::Maybe Int) `shouldBe` ["1"]
        example $ repr (Just (Just True)) `shouldBe` ["True"]

    it "can convert unit value" $
        repr () `shouldBe` [""]

    it "can convert string values" $ do
        example $ repr "" `shouldBe` [""]
        example $ repr "word" `shouldBe` ["word"]
        example $ repr "word word" `shouldBe` ["word word"]

    it "can convert tuple values" $ do
        example $ repr (1,True) `shouldBe` ["1","True"]
        example $ repr ((1,2),False) `shouldBe` ["1 2","False"]

    it "can convert list values" $ do
        repr ([]::[()]) `shouldBe` []
        example $ repr [True] `shouldBe` ["True"]
        example $ repr [True,False] `shouldBe` ["True","False"]
        example $ repr [Just 1,Nothing] `shouldBe` ["1",""]
        example $ repr [[1,2,3],[4,5,6]] `shouldBe` ["1 2 3","4 5 6"]
        example $ repr ["w w","w w"] `shouldBe` ["w w","w w"]
        example $ repr [["w w"],["w w"]] `shouldBe` ["w w","w w"]

    it "can convert map values" $ do
        repr (M.empty::Map Bool Bool) `shouldBe` []
        example $ repr (M.fromList [(1,2),(3,4)]) `shouldBe` ["1 2","3 4"]
        example $ repr ([M.fromList [(1,2),(3,4)]]) `shouldBe` ["1 2\t3 4"]

    it "can convert set values" $ do
        repr (S.empty::Set Bool) `shouldBe` []
        example $ repr (S.fromList [1,2,3,4]) `shouldBe` ["1","2","3","4"]
        example $ repr ([S.fromList [1,2]]) `shouldBe` ["1 2"]