@@ -26,6 +26,7 @@ import Data.Time.Clock (UTCTime(..))
2626import Data.Time.Calendar (fromGregorian)
2727import Data.Interval (interval, Interval, Extended(Finite))
2828import Control.Concurrent.STM
29+import Control.Concurrent
2930import qualified STMContainers.Map as STMMap
3031
3132main :: IO ()
@@ -33,7 +34,7 @@ main = do
3334 tcounts <- runTestTT (TestList tests)
3435 if errors tcounts + failures tcounts > 0 then exitFailure else exitSuccess
3536 where
36− tests = map (\(tutd, expected) -> TestCase $ assertTutdEqual basicDatabaseContext expected tutd) simpleRelTests ++ map (\(tutd, expected) -> TestCase $ assertTutdEqual dateExamples expected tutd) dateExampleRelTests ++ [transactionGraphBasicTest, transactionGraphAddCommitTest, transactionRollbackTest, transactionJumpTest, transactionBranchTest, simpleJoinTest]
37+ tests = map (\(tutd, expected) -> TestCase $ assertTutdEqual basicDatabaseContext expected tutd) simpleRelTests ++ map (\(tutd, expected) -> TestCase $ assertTutdEqual dateExamples expected tutd) dateExampleRelTests ++ [transactionGraphBasicTest, transactionGraphAddCommitTest, transactionRollbackTest, transactionJumpTest, transactionBranchTest, simpleJoinTest, testNotification]
3738 simpleRelTests = [("x:=true", Right relationTrue),
3839 ("x:=false", Right relationFalse),
3940 ("x:=true union false", Right relationTrue),
@@ -128,14 +129,14 @@ assertTutdEqual databaseContext expected tutd = assertEqual tutd expected interp
128129
129130transactionGraphBasicTest :: Test
130131transactionGraphBasicTest = TestCase $ do
131− (_, dbconn) <- dateExamplesConnection
132+ (_, dbconn) <- dateExamplesConnection emptyNotificationCallback
132133 graph <- transactionGraph dbconn
133134 assertEqual "validate bootstrapped graph" (validateGraph graph) Nothing
134135
135136--add a new transaction to the graph, validate it is in the graph
136137transactionGraphAddCommitTest :: Test
137138transactionGraphAddCommitTest = TestCase $ do
138− (sessionId, dbconn) <- dateExamplesConnection
139+ (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
139140 case parseTutorialD "x:=S" of
140141 Left err -> assertFailure (show err)
141142 Right parsed -> do
@@ -152,7 +153,7 @@ transactionGraphAddCommitTest = TestCase $ do
152153
153154transactionRollbackTest :: Test
154155transactionRollbackTest = TestCase $ do
155− (sessionId, dbconn) <- dateExamplesConnection
156+ (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
156157 graph <- transactionGraph dbconn
157158 maybeErr <- executeDatabaseContextExpr sessionId dbconn (Assign "x" (RelationVariable "S"))
158159 case maybeErr of
@@ -167,7 +168,7 @@ transactionRollbackTest = TestCase $ do
167168--commit a new transaction with "x" relation, jump to first transaction, verify that "x" is not present
168169transactionJumpTest :: Test
169170transactionJumpTest = TestCase $ do
170− (sessionId, dbconn) <- dateExamplesConnection
171+ (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
171172 (DisconnectedTransaction firstUUID _) <- disconnectedTransaction sessionId dbconn
172173 maybeErr <- executeDatabaseContextExpr sessionId dbconn (Assign "x" (RelationVariable "S"))
173174 case maybeErr of
@@ -190,7 +191,7 @@ maybeFail Nothing = return ()
190191--branch from the first transaction and verify that there are two heads
191192transactionBranchTest :: Test
192193transactionBranchTest = TestCase $ do
193− (sessionId, dbconn) <- dateExamplesConnection
194+ (sessionId, dbconn) <- dateExamplesConnection emptyNotificationCallback
194195 mapM_ (\x -> x >>= maybeFail) [executeGraphExpr sessionId dbconn (Branch "test"),
195196 executeDatabaseContextExpr sessionId dbconn (Assign "x" (RelationVariable "S")),
196197 commit sessionId dbconn,
@@ -263,5 +264,13 @@ dateExamplesConnection callback = do
263264testNotification :: Test
264265testNotification = TestCase $ do
265266 notifmvar <- newEmptyMVar
266− let notifCallback mvar = putMVar mvar ()
267− conn <- dateExamplesConnection
267+ let notifCallback mvar = \_ _ -> putMVar mvar ()
268+ relvarx = RelationVariable "x"
269+ (sess, conn) <- dateExamplesConnection (notifCallback notifmvar)
270+ let check' x = x >>= maybe (pure ()) (\err -> assertFailure (show err))
271+ check' $ executeDatabaseContextExpr sess conn (Assign "x" (ExistingRelation relationTrue))
272+ check' $ executeDatabaseContextExpr sess conn (AddNotification "test notification" relvarx relvarx)
273+ check' $ commit sess conn
274+ check' $ executeDatabaseContextExpr sess conn (Assign "x" (ExistingRelation relationFalse))
275+ check' $ commit sess conn
276+ takeMVar notifmvar