@@ -1,80 +1,42 @@
11module Test.Main where
22
33import Prelude
4+import Control.Monad.Eff (Eff)
5+import Control.Monad.Eff.Console (CONSOLE, log)
6+import Control.Monad.Eff.Ref (REF)
47
8+import Data.Vault as V
59import Data.Maybe (Maybe(..))
6−import Data.Vault as Vault
7−import Effect (Effect)
8−import Effect.Aff (launchAff_)
9−import Effect.Class (liftEffect)
10−import Test.Spec (describe, it)
11−import Test.Spec.Assertions (shouldEqual)
12−import Test.Spec.Reporter (consoleReporter)
13−import Test.Spec.Runner (runSpec)
1410
15−main :: Effect Unit
16−main =
17− launchAff_ $
18− runSpec [ consoleReporter ] do
19− it "inserts an item" do
20− let s0 = Vault.empty
21− k <- liftEffect Vault.newKey
22− let
23− v = { foo: 1 }
24− s1 = Vault.insert k v s0
25− Vault.lookup k s1 `shouldEqual` pure v
26− it "adjusts an item" do
27− let s0 = Vault.empty
28− k <- liftEffect Vault.newKey
29− let
30− v0 = { foo: 1 }
31− s1 = Vault.insert k v0 s0
32− s2 = Vault.adjust (\r -> r { foo = r.foo + 1 }) k s1
33− Vault.lookup k s2 `shouldEqual` pure { foo: 2 }
34− it "deletes an item" do
35− let s0 = Vault.empty
36− k <- liftEffect Vault.newKey
37− let
38− s1 = Vault.insert k 1 s0
39− s2 = Vault.delete k s1
40− Vault.lookup k s2 `shouldEqual` Nothing
41− it "merges two vaults" do
42− k <- liftEffect Vault.newKey
43− l <- liftEffect Vault.newKey
44− let
45− a = Vault.insert k 1 Vault.empty
46− b = Vault.empty # Vault.insert k 2 # Vault.insert l 3
47− c = Vault.union a b
48− Vault.lookup k c `shouldEqual` pure 1
49− Vault.lookup l c `shouldEqual` pure 3
50− describe "on insert" do
51− it "does not affect other items" do
52− k <- liftEffect Vault.newKey
53− let
54− s0 = Vault.empty
55− s1 = Vault.insert k "foo" s0
56− k' <- liftEffect Vault.newKey
57− let s2 = Vault.insert k' 3 s1
58− Vault.lookup k s2 `shouldEqual` pure "foo"
59− describe "on adjust" do
60− it "does not affect other items" do
61− k <- liftEffect Vault.newKey
62− let
63− s0 = Vault.empty
64− s1 = Vault.insert k "foo" s0
65− k' <- liftEffect Vault.newKey
66− let
67− s2 = Vault.insert k' "hi" s1
68− s3 = Vault.adjust (_ <> "!") k' s2
69− Vault.lookup k s3 `shouldEqual` pure "foo"
70− describe "on delete" do
71− it "does not affect other items" do
72− k <- liftEffect Vault.newKey
73− let
74− s0 = Vault.empty
75− s1 = Vault.insert k "foo" s0
76− k' <- liftEffect Vault.newKey
77− let
78− s2 = Vault.insert k' "hi" s1
79− s3 = Vault.delete k' s2
80− Vault.lookup k s3 `shouldEqual` pure "foo"
11+itemKeyInt :: forall eff. Eff (ref :: REF | eff) (V.Key Int)
12+itemKeyInt = V.newKey
13+
14+itemKeyString :: forall eff. Eff (ref :: REF | eff) (V.Key String)
15+itemKeyString = V.newKey
16+
17+testCreateAndGet :: forall eff. Eff (console :: CONSOLE, ref :: REF | eff) Unit
18+testCreateAndGet = do
19+ k1 <- itemKeyString
20+ k2 <- itemKeyInt
21+ let m1 = V.insert k1 "vault" V.empty
22+ v1 = V.lookup k1 m1
23+ v2 = V.lookup k2 m1
24+ when (v1 /= Just "vault") (log "Failed getting value from Vault")
25+ when (v2 /= Nothing) (log "Non existing value should return Nothing")
26+
27+testCreateAndDelete :: forall eff. Eff (console :: CONSOLE, ref :: REF | eff) Unit
28+testCreateAndDelete = do
29+ k <- itemKeyInt
30+ let m1 = V.insert k 1 V.empty
31+ v1 = V.lookup k m1
32+ m2 = V.delete k m1
33+ v2 = V.lookup k m2
34+ when (v1 == v2) $ log "Deleted item should return Nothing"
35+
36+main :: forall eff. Eff (console :: CONSOLE, ref :: REF | eff) Unit
37+main = do
38+ log "Create new Vault Item"
39+ testCreateAndGet
40+
41+ log "Crate new Vault Item and Delete"
42+ testCreateAndDelete