module Migrate where -- base import Data.Data (dataTypeName, isAlgType) -- QuickCheck import Test.QuickCheck.Property ((===)) -- test-framework import Test.Framework -- test-framework-quickcheck2 import Test.Framework.Providers.QuickCheck2 (testProperty) -- essence-of-live-coding import LiveCoding (Data (dataTypeOf), castMigration, runSafeMigration) import LiveCoding.Migrate import Migrate.NoMigration import qualified TestData.Foo1 as Foo1 import qualified TestData.Foo2 as Foo2 test = testGroup "Migrate" [ testGroup "Internal assumptions" [ testGroup "matchingAlgebraicDataTypes" [ testProperty "True for types with the same name" $ matchingAlgebraicDataTypes Foo1.foo Foo2.foo , testGroup "debugging tests" [ testProperty "isAlgType" $ isAlgType $ dataTypeOf Foo1.foo ] ] ] , testGroup "standard migrations" [ testGroup "castMigration" [ testProperty "Migrates for same data type" $ runSafeMigration castMigration Foo1.same Foo1.same == Foo1.same , testProperty "Does not migrate for different data types" $ runSafeMigration castMigration Foo1.same Foo2.same == Foo1.same , testProperty "Migrates for same builtin type" $ runSafeMigration castMigration (23 :: Int) (42 :: Int) == 42 , testProperty "Does not migrate for different builtin types" $ runSafeMigration castMigration (23 :: Int) (42 :: Integer) == 23 ] , testGroup "sameConstructorMigration" [ testProperty "Migrates when constructor names and arity match" $ runSafeMigration (sameConstructorMigration castMigration) Foo1.same Foo2.same == Foo1.same' , testProperty "Migrates for same data type" $ runSafeMigration (sameConstructorMigration castMigration) Foo1.same Foo1.same' == Foo1.same' ] ] , Migrate.NoMigration.test ]