packages feed

essence-of-live-coding-0.1.0.0: test/Main.hs

{-# LANGUAGE ScopedTypeVariables #-}

-- test-framework
import Test.Framework

-- test-framework-quickcheck2
import Test.Framework.Providers.QuickCheck2

-- QuickCheck
import Test.QuickCheck

-- essence-of-live-coding
import LiveCoding
import qualified TestData.Foo1 as Foo1
import qualified TestData.Foo2 as Foo2

intToInteger :: Int -> Integer
intToInteger = toInteger

main = defaultMain tests

tests =
  [ testGroup "Builtin types"
    [ testProperty "Same" $ \(x :: Integer) (y :: Integer) -> x === migrate y x
    , testProperty "Different" $ \(x :: Integer) (y :: Bool) -> y === migrate y x
    ]
  , testGroup "Records"
    [ testProperty "" $ Foo1.foo' === migrate Foo1.foo Foo2.foo
    , testProperty "" $ Foo2.foo' === migrate Foo2.foo Foo1.foo
    , testProperty "" $ Foo2.bar' === migrate Foo2.bar Foo1.bar
    , testProperty "" $ Foo2.baz' === migrate Foo2.baz Foo1.baz
    ]
  , testGroup "User migration"
    [ testProperty "" $ Foo2.frob' === migrateWith (userMigration intToInteger) Foo2.frob Foo1.frob
    ]
  , testGroup "Newtype wrapping"
    [ testProperty "" $ \(x :: Integer) -> Foo2.Frob x === migrate Foo2.frob x
    ]
  , testGroup "Debugging"
    [ testProperty "To debugging state" $ \(x :: Int) (y :: Int) (z :: Int) ->
        Debugging { dbgState = x, state = y } === migrate Debugging { dbgState = x, state = z } y
    , testProperty "From debugging state" $ \(x :: Int) (y :: Int) (z :: Int) ->
        x === migrate y Debugging { dbgState = z, state = x }
    ]
  ]