@@ -1,5 +1,6 @@
11import Test.HUnit
22import ProjectM36.Base
3+import ProjectM36.Error
34import ProjectM36.IsomorphicSchema
45import ProjectM36.Relation
56import ProjectM36.RelationalExpression
@@ -7,10 +8,11 @@ import qualified ProjectM36.DatabaseContext as DBC
78import qualified ProjectM36.Attribute as A
89import System.Exit
910import qualified Data.Map as M
11+import qualified Data.Set as S
1012import Control.Monad.State
1113
1214testList :: Test
13−testList = TestList [testIsoRename, testIsoRestrict, testIsoUnion]
15+testList = TestList [testIsoRename, testIsoRestrict, testIsoUnion, testSchemaValidation]
1416
1517main :: IO ()
1618main = do
@@ -25,7 +27,17 @@ assertEither x = case x of
2527-- create some potential schemas which should not be accepted
2628testSchemaValidation :: Test
2729testSchemaValidation = TestCase $ do
28− undefined
30+ let potentialSchema = DBC.basicDatabaseContext {
31+ relationVariables = M.singleton "anotherRel" relationTrue
32+ }
33+ -- missing relvars failure
34+ morphs = [IsoRename "true" "true", IsoRename "false" "false"]
35+ missingRelVarError = Just (RelVarReferencesMissing (S.singleton "anotherRel"))
36+ assertEqual "missing relvar validation" missingRelVarError (validateSchema (Schema morphs) potentialSchema)
37+ -- duplicate relvar mention
38+ let morphs' = [IsoRename "true" "true", IsoRename "false" "true", IsoRename "true" "anotherRel"]
39+ duplicateRelVarError = Just (RelVarOutReferencedMoreThanOnce "true")
40+ assertEqual "duplicate relvars in morphs" duplicateRelVarError (validateSchema (Schema morphs') potentialSchema)
2941
3042testIsoRename :: Test
3143testIsoRename = TestCase $ do