Files
soulspace/node_modules/store/plugins/operations_test.js
2025-03-05 15:16:45 +08:00

73 lines
1.7 KiB
JavaScript

var { each, map } = require('../src/util')
var { deepEqual } = require('../tests/util')
module.exports = {
plugin: require('./operations'),
setup: setup,
}
function setup(store) {
test('push', function() {
_testArrayOp('push', [], [
[],
['a'],
['b','c'],
[null],
[[], {}]
])
})
test('unshift', function() {
_testArrayOp('unshift', undefined, [
[],
['a'],
['b','c'],
[null],
[[], {}]
])
})
test('pop', function() {
var arr = ['a', 'b', 'c', null, [[], {}]]
// Call pop arr.length + 1 times. No args each time
var argsList = map(arr, function() { return [] }).concat([])
_testArrayOp('pop', arr, argsList)
})
test('shift', function() {
var arr = ['a', 'b', 'c', null, [[], {}]]
// Call shift arr.length + 1 times. No args each time
var argsList = map(arr, function() { return [] }).concat([])
_testArrayOp('shift', arr, argsList)
})
test('assign', function() {
store.clearAll()
var expect = { bar:'cat', mat:{ hat:'bat', arr:[1,2,3] }}
store.assign('foo', expect)
assert(deepEqual(store.get('foo'), expect))
var add = { bar:'cat2', mat:{ hat:'bat2' }, newProp:'newProp'}
store.assign('foo', add)
each(add, function(val, key) {
expect[key] = val
})
assert(deepEqual(store.get('foo'), expect))
})
function _testArrayOp(fnName, arr, argLists) {
var key = 'test-'+fnName
store.set(key, arr)
arr = (arr || [])
var arrFn = arr[fnName]
var storeFn = store[fnName]
each(argLists, function(args) {
var expectedFnResult = arrFn.apply(arr, args)
var actualFnResult = storeFn.apply(store, [key].concat(args))
assert(deepEqual(expectedFnResult, actualFnResult))
var actual = store.get(key)
assert(deepEqual(arr, actual))
})
}
}