UNPKG

recoil

Version:

Recoil - A state management library for React

158 lines (156 loc) 4.89 kB
/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @emails oncall+recoil * @flow strict-local * @format */ 'use strict'; const { getRecoilTestFn } = require('../../testing/Recoil_TestingUtils'); let treeCacheFromPolicy; const testRecoil = getRecoilTestFn(() => { treeCacheFromPolicy = require('../Recoil_treeCacheFromPolicy'); }); declare var valGetterFromPath: (path: any) => any; declare var clonePath: (path: any) => any; describe('treeCacheFromPolicy()', () => { testRecoil('equality: reference, eviction: none', () => { const policy = { equality: 'reference', eviction: 'none' }; const cache = treeCacheFromPolicy<{ [string]: number }>(policy); const path1 = [['a', [1]], ['b', [2]]]; const obj1 = { a: 1 }; const path2 = [['a', [2]]]; const obj2 = { b: 2 }; const path3 = [['a', [3]], ['c', [4]]]; const obj3 = { c: 3 }; cache.set(path1, obj1); cache.set(path2, obj2); cache.set(path3, obj3); expect(cache.size()).toBe(3); expect(cache.get(valGetterFromPath(path1))).toBe(obj1); expect(cache.get(valGetterFromPath(path2))).toBe(obj2); expect(cache.get(valGetterFromPath(path3))).toBe(obj3); expect(cache.get(valGetterFromPath(clonePath(path1)))).toBe(undefined); expect(cache.get(valGetterFromPath(clonePath(path2)))).toBe(undefined); expect(cache.get(valGetterFromPath(clonePath(path3)))).toBe(undefined); }); testRecoil('equality: value, eviction: none', () => { const policy = { equality: 'value', eviction: 'none' }; const cache = treeCacheFromPolicy<{ [string]: number }>(policy); const path1 = [['a', [1]], ['b', [2]]]; const obj1 = { a: 1 }; const path2 = [['a', [2]]]; const obj2 = { b: 2 }; const path3 = [['a', [3]], ['c', [4]]]; const obj3 = { c: 3 }; cache.set(path1, obj1); cache.set(path2, obj2); cache.set(path3, obj3); expect(cache.size()).toBe(3); expect(cache.get(valGetterFromPath(path1))).toBe(obj1); expect(cache.get(valGetterFromPath(path2))).toBe(obj2); expect(cache.get(valGetterFromPath(path3))).toBe(obj3); expect(cache.get(valGetterFromPath(clonePath(path1)))).toBe(obj1); expect(cache.get(valGetterFromPath(clonePath(path2)))).toBe(obj2); expect(cache.get(valGetterFromPath(clonePath(path3)))).toBe(obj3); }); testRecoil('equality: reference, eviction: lru', () => { const policy = { equality: 'reference', eviction: 'lru', maxSize: 2 }; const cache = treeCacheFromPolicy<{ [string]: number }>(policy); const path1 = [['a', [1]], ['b', [2]]]; const obj1 = { a: 1 }; const path2 = [['a', [2]]]; const obj2 = { b: 2 }; const path3 = [['a', [3]], ['c', [4]]]; const obj3 = { c: 3 }; cache.set(path1, obj1); cache.set(path2, obj2); cache.set(path3, obj3); expect(cache.size()).toBe(2); expect(cache.get(valGetterFromPath(path1))).toBe(undefined); expect(cache.get(valGetterFromPath(path2))).toBe(obj2); expect(cache.get(valGetterFromPath(path3))).toBe(obj3); cache.set(path1, obj1); expect(cache.size()).toBe(2); expect(cache.get(valGetterFromPath(path2))).toBe(undefined); expect(cache.get(valGetterFromPath(path1))).toBe(obj1); expect(cache.get(valGetterFromPath(path3))).toBe(obj3); expect(cache.get(valGetterFromPath(clonePath(path1)))).toBe(undefined); expect(cache.get(valGetterFromPath(clonePath(path3)))).toBe(undefined); }); testRecoil('equality: value, eviction: lru', () => { const policy = { equality: 'value', eviction: 'lru', maxSize: 2 }; const cache = treeCacheFromPolicy<{ [string]: number }>(policy); const path1 = [['a', [1]], ['b', [2]]]; const obj1 = { a: 1 }; const path2 = [['a', [2]]]; const obj2 = { b: 2 }; const path3 = [['a', [3]], ['c', [4]]]; const obj3 = { c: 3 }; cache.set(path1, obj1); cache.set(path2, obj2); cache.set(path3, obj3); expect(cache.size()).toBe(2); expect(cache.get(valGetterFromPath(path1))).toBe(undefined); expect(cache.get(valGetterFromPath(path2))).toBe(obj2); expect(cache.get(valGetterFromPath(path3))).toBe(obj3); cache.set(path1, obj1); expect(cache.size()).toBe(2); expect(cache.get(valGetterFromPath(path2))).toBe(undefined); expect(cache.get(valGetterFromPath(path1))).toBe(obj1); expect(cache.get(valGetterFromPath(path3))).toBe(obj3); expect(cache.get(valGetterFromPath(clonePath(path1)))).toBe(obj1); expect(cache.get(valGetterFromPath(clonePath(path3)))).toBe(obj3); }); });