@@ -1,41 +1,80 @@
1module Test.Main where
1module Test.Main where
3import Prelude
3import Prelude
5−import Effect.Console (log)
8import Data.Maybe (Maybe(..))
5import Data.Maybe (Maybe(..))
9−
6+import Data.Vault as Vault
10−itemKeyInt :: Effect (V.Key Int)
7+import Effect (Effect)
11−itemKeyInt = V.newKey
8+import Effect.Aff (launchAff_)
12−
9+import Effect.Class (liftEffect)
13−itemKeyString :: Effect (V.Key String)
10+import Test.Spec (describe, it)
14−itemKeyString = V.newKey
11+import Test.Spec.Assertions (shouldEqual)
15−
12+import Test.Spec.Reporter (consoleReporter)
16−testCreateAndGet :: Effect Unit
13+import Test.Spec.Runner (runSpec)
20− let m1 = V.insert k1 "vault" V.empty
23− when (v1 /= Just "vault") (log "Failed getting value from Vault")
24− when (v2 /= Nothing) (log "Non existing value should return Nothing")
26−testCreateAndDelete :: Effect Unit
27−testCreateAndDelete = do
29− let m1 = V.insert k 1 V.empty
33− when (v1 == v2) $ log "Deleted item should return Nothing"
35main :: Effect Unit
15main :: Effect Unit
37− log "Create new Vault Item"
17+ launchAff_ $
38− testCreateAndGet
18+ runSpec [ consoleReporter ] do
39−
19+ it "inserts an item" do
40− log "Crate new Vault Item and Delete"
20+ let s0 = Vault.empty
41− testCreateAndDelete
21+ k <- liftEffect Vault.newKey
24+ s1 = Vault.insert k v s0
25+ Vault.lookup k s1 `shouldEqual` pure v
26+ it "adjusts an item" do
28+ k <- liftEffect Vault.newKey
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
36+ k <- liftEffect Vault.newKey
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
45+ a = Vault.insert k 1 Vault.empty
46+ b = Vault.empty # Vault.insert k 2 # Vault.insert l 3
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
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
64+ s1 = Vault.insert k "foo" s0
65+ k' <- liftEffect Vault.newKey
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
75+ s1 = Vault.insert k "foo" s0
76+ k' <- liftEffect Vault.newKey
78+ s2 = Vault.insert k' "hi" s1
79+ s3 = Vault.delete k' s2
80+ Vault.lookup k s3 `shouldEqual` pure "foo"