node and browser bindings for gleam
at master 2.8 kB view raw
1import gleam/list 2import gleeunit/should 3import plinth/javascript/storage 4 5pub fn get_throw_test() { 6 use <- run(True, False) 7 should.be_error(storage.local()) 8 should.be_error(storage.session()) 9} 10 11pub fn get_undef_test() { 12 use <- run(False, True) 13 should.be_error(storage.local()) 14 should.be_error(storage.session()) 15} 16 17pub fn get_set_test() { 18 use <- run(False, False) 19 let assert Ok(local) = storage.local() 20 should.be_ok(storage.set_item(local, "Foo", "Bar")) 21 should.equal(storage.get_item(local, "Foo"), Ok("Bar")) 22} 23 24pub fn set_limit_test() { 25 use <- run(False, False) 26 let assert Ok(session) = storage.session() 27 should.be_ok(storage.set_item(session, "Foo1", "Bar")) 28 should.be_ok(storage.set_item(session, "Foo2", "Bar")) 29 should.be_ok(storage.set_item(session, "Foo3", "Bar")) 30 should.be_ok(storage.set_item(session, "Foo4", "Bar")) 31 should.be_ok(storage.set_item(session, "Foo5", "Bar")) 32 should.be_error(storage.set_item(session, "Foo6", "Bar")) 33} 34 35pub fn length_test() { 36 use <- run(False, False) 37 let assert Ok(local) = storage.local() 38 should.be_ok(storage.set_item(local, "Foo", "Bar")) 39 should.be_ok(storage.set_item(local, "Foo2", "Bar")) 40 should.equal(storage.length(local), 2) 41} 42 43pub fn key_test() { 44 use <- run(False, False) 45 let assert Ok(local) = storage.local() 46 should.be_ok(storage.set_item(local, "Foo1", "Bar1")) 47 should.be_ok(storage.set_item(local, "Foo2", "Bar2")) 48 should.be_ok(storage.set_item(local, "Foo3", "Bar3")) 49 should.be_ok(storage.set_item(local, "Foo4", "Bar4")) 50 should.be_ok(storage.set_item(local, "Foo5", "Bar5")) 51 52 let indexes = [0, 1, 2, 3, 4] 53 let keys = list.try_map(indexes, fn(i) { storage.key(local, i) }) 54 should.equal(keys, Ok(["Foo1", "Foo2", "Foo3", "Foo4", "Foo5"])) 55} 56 57pub fn key_fail_test() { 58 use <- run(False, False) 59 let assert Ok(local) = storage.local() 60 should.be_error(storage.key(local, 1)) 61} 62 63pub fn remove_test() { 64 use <- run(False, False) 65 let assert Ok(local) = storage.local() 66 should.equal(storage.remove_item(local, "not here"), Nil) 67 should.be_ok(storage.set_item(local, "Foo", "Bar")) 68 should.equal(storage.remove_item(local, "Foo"), Nil) 69 should.be_error(storage.get_item(local, "Foo")) 70} 71 72pub fn clear_test() { 73 use <- run(False, False) 74 let assert Ok(session) = storage.session() 75 should.be_ok(storage.set_item(session, "Foo1", "Bar")) 76 should.be_ok(storage.set_item(session, "Foo2", "Bar")) 77 should.be_ok(storage.set_item(session, "Foo3", "Bar")) 78 should.be_ok(storage.set_item(session, "Foo4", "Bar")) 79 should.be_ok(storage.set_item(session, "Foo5", "Bar")) 80 storage.clear(session) 81 should.equal(storage.length(session), 0) 82} 83 84@external(javascript, "../storage_test_ffi.mjs", "runWithMockStorage") 85fn run(should_throw: Bool, should_undef: Bool, callback: fn() -> a) -> Nil