1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 15:50:04 +08:00
SpaceVim/bundle/gina.vim/test/vital/System/Store.vimspec

163 lines
4.8 KiB
Plaintext

Describe System.Store
Before all
let File = vital#gina#import('System.File')
let Path = vital#gina#import('System.Filepath')
End
Before
let Store = vital#gina#import('System.Store')
End
Describe .hash({pathlist})
It returns an unique sha256 string of {pathlist}
let hash1 = Store.hash(['a', 'b', 'c'])
let hash2 = Store.hash(['a', 'b', 'c'])
let hash3 = Store.hash(['b', 'a', 'c'])
let hash4 = Store.hash(['a', 'a', 'a'])
Assert Equals(hash1, hash2)
Assert Equals(hash1, hash3)
Assert NotEquals(hash1, hash4)
End
End
Describe .get_slug_expr()
Before
function! s:VitalSystemStoreGetSlugExpr(Store) abort
let expr = a:Store.get_slug_expr()
return eval(expr)
endfunction
End
It returns a slug expression of the function
let slug = s:VitalSystemStoreGetSlugExpr(Store)
Assert Match(slug, '^<SNR>\d\+_VitalSystemStoreGetSlugExpr$')
End
End
Describe .of({pathlist})
It returns a store instance of {pathlist}
let store1 = Store.of(['a', 'b', 'c'])
let store2 = Store.of(['b', 'a', 'c'])
Assert KeyExists(store1, 'is_expired')
Assert KeyExists(store1, 'get')
Assert KeyExists(store1, 'set')
Assert KeyExists(store1, 'remove')
Assert KeyExists(store1, 'clear')
Assert IsFunction(store1.is_expired)
Assert IsFunction(store1.get)
Assert IsFunction(store1.set)
Assert IsFunction(store1.remove)
Assert IsFunction(store1.clear)
Assert Same(store1, store2)
End
End
Describe .remove({pathlist})
It removes a cached store instance of {pathlist}
let store1 = Store.of(['a', 'b', 'c'])
let store2 = Store.of(['b', 'a', 'c'])
call Store.remove(['a', 'b', 'c'])
let store3 = Store.of(['a', 'b', 'c'])
Assert Same(store1, store2)
Assert NotSame(store1, store3)
End
End
Describe store instance
Before
let root = resolve(tempname())
let store = Store.of(map(
\ ['a', 'b', 'c'],
\ 'Path.join(root, v:val)'
\))
call mkdir(root, 'p')
for path in store.pathlist
call writefile([], path)
endfor
End
After
call File.rmdir(root, 'r')
End
Describe store.is_expired({name})
It returns 1 if {name} is not cached in the instance
Assert Equals(store.is_expired('foo'), 1)
End
It returns 0 if {name} is cached and no files are updated
call store.set('foo', 'foo')
Assert Equals(store.is_expired('foo'), 0)
End
It returns 1 if {name} is cached but files are updated
call store.set('foo', 'foo')
sleep 1
call writefile(['updated'], store.pathlist[0])
Assert Equals(store.is_expired('foo'), 1)
End
End
Describe store.has({name})
It returns 1 if {name} cache exist
call store.set('foo', 'foo')
Assert Equals(store.has('foo'), 1)
Assert Equals(store.has('bar'), 0)
End
End
Describe store.get({name} [, {default}])
It returns {default} if {name} is not cached in the instance
Assert Equals(store.get('foo'), 0)
Assert Equals(store.get('foo', 'default'), 'default')
End
It returns a cached content if {name} is cached and no files are updated
call store.set('foo', 'foo')
Assert Equals(store.get('foo'), 'foo')
End
It returns {default} if {name} is cached but files are updated
call store.set('foo', 'foo')
sleep 1
call writefile(['updated'], store.pathlist[0])
Assert Equals(store.get('foo'), 0)
Assert Equals(store.get('foo', 'default'), 'default')
End
End
Describe store.set({name}, {value})
It stores {value} as {name} and return the instance (method chain)
Assert Same(store.set('foo', 'foo'), store)
Assert Equals(store.set('foo', 'foo').get('foo'), 'foo')
Assert Equals(store.set('bar', 'bar').get('bar'), 'bar')
Assert Equals(store.set('foo', 'bar').get('foo'), 'bar')
End
End
Describe store.remove({name})
It remove a {name} cache and return the instance (method chain)
call store.set('foo', 'foo')
call store.set('bar', 'bar')
Assert Same(store.remove('foo'), store)
Assert Equals(store.has('foo'), 0)
Assert Equals(store.remove('bar').has('bar'), 0)
End
It won't throw exceptin even no {name} cache exist
Assert Same(store.remove('helloworld'), store)
End
End
Describe store.clear()
It clears all caches and return the instance (method chain)
call store.set('foo', 'foo')
call store.set('bar', 'bar')
Assert Same(store.clear(), store)
Assert Equals(store.has('foo'), 0)
Assert Equals(store.has('bar'), 0)
End
End
End
End