packages feed

pptable-0.3.0.0: test/Spec.hs

{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE ConstrainedClassMethods #-}
{-# LANGUAGE MultiParamTypeClasses#-}

import Data.Map as M
import Data.List as L
import Data.Vector as V
import qualified Text.PrettyPrint.Tabulate as T
import GHC.Generics as G
import Data.Data
import Text.PrettyPrint.Boxes as B

import Test.Tasty
import Test.Tasty.QuickCheck as QC
import Test.Tasty.HUnit

-- R0 has to derive from Data, since
-- it will be nested
data R01 =  R01 {test_string::String,
               test_integer::Integer,
               test_float::Float,
               test_double::Double}
  deriving (Data, Show, G.Generic)
instance T.CellValueFormatter R01

data R02 =  R02 {r2_id::Int, nested_r::R01}
  deriving (Show, G.Generic, Data)
instance T.CellValueFormatter R02

data R03 =  R03 {r3_id::Int, nested_r02:: R02}
          deriving (Show, G.Generic, Data)

instance T.Tabulate R01 T.ExpandWhenNested
instance T.Tabulate R02 T.ExpandWhenNested
instance T.Tabulate R03 T.ExpandWhenNested

getR01 = R01 {test_string="Jack-Jack"
           , test_integer=10
           , test_double=10.101
           , test_float=0.101021}

getR02 = R02 {r2_id=10, nested_r=getR01}

getR03 = R03 {r3_id=20, nested_r02=getR02}

testList = testCase "testList"
  (
    do
      let records = Prelude.replicate 2 $ getR03
          rows = B.rows $ T.renderTable records
          cols = B.cols $ T.renderTable records
      assertEqual "row count" rows 5
      assertEqual "col count" cols 91
  )


testMap = testCase "testMap"
  (
    do
      let records = M.fromList [("key1", getR03), ("key2", getR03)]
          rows = B.rows $ T.renderTable records
          cols = B.cols $ T.renderTable records
      assertEqual "row count" rows 5
      assertEqual "col count" cols 100
  )

testVector = testCase "testVector"
  (
    do
      let records = V.fromList [getR03, getR03]
          rows = B.rows $ T.renderTable records
          cols = B.cols $ T.renderTable records
      assertEqual "row count" rows 5
      assertEqual "col count" cols 91
  )

tests :: TestTree
tests = testGroup "Tests" [
  testList,
  testMap,
  testVector
  ]

main = defaultMain tests