packages feed

happstack-contrib-0.2.1: tests/Happstack/Contrib/Tests/HList001.hs

{-# LANGUAGE TemplateHaskell, DeriveDataTypeable,
             FlexibleInstances, MultiParamTypeClasses,
             OverlappingInstances, UndecidableInstances #-}
module Happstack.Contrib.Tests.HList001 (hlist001, t10, t10_2, t11) where

import Language.Haskell.TH
import Happstack.Data
import Happstack.Contrib.HList
import Test.HUnit

$( deriveAll [''Show,''Eq, ''Default]
   [d|
       data UserInfo = UserInfo User Pass 
       newtype User = User String 
       newtype Pass = Pass String 
       newtype Age = Age Int
    |]
 )

t10, t10_2, t11 :: Test

t10   = "t10"    ~: hlextract (User "alex" .&. "abc") @?= "abc"
t10_2 = "t10_2"  ~: hlextract (User "alex" .&. Pass "pass" .&. "abc") @?= "abc"
t11   = "t11"    ~:
        let hl = User "alex" .&. Pass "pass"
        in Pass "pass2" @?= (hlextract $ hlupdate hl (Pass "pass2"))

hlist001 :: Test
hlist001 = "hlextract" ~: [t10, t10_2, t11]