Emoji Rendering Efficiency (#35568)
This commit is contained in:
78
app/javascript/mastodon/utils/__tests__/cache.test.ts
Normal file
78
app/javascript/mastodon/utils/__tests__/cache.test.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
import { createLimitedCache } from '../cache';
|
||||
|
||||
describe('createCache', () => {
|
||||
test('returns expected methods', () => {
|
||||
const actual = createLimitedCache();
|
||||
expect(actual).toBeTypeOf('object');
|
||||
expect(actual).toHaveProperty('get');
|
||||
expect(actual).toHaveProperty('has');
|
||||
expect(actual).toHaveProperty('delete');
|
||||
expect(actual).toHaveProperty('set');
|
||||
});
|
||||
|
||||
test('caches values provided to it', () => {
|
||||
const cache = createLimitedCache();
|
||||
cache.set('test', 'result');
|
||||
expect(cache.get('test')).toBe('result');
|
||||
});
|
||||
|
||||
test('has returns expected values', () => {
|
||||
const cache = createLimitedCache();
|
||||
cache.set('test', 'result');
|
||||
expect(cache.has('test')).toBeTruthy();
|
||||
expect(cache.has('not found')).toBeFalsy();
|
||||
});
|
||||
|
||||
test('updates a value if keys are the same', () => {
|
||||
const cache = createLimitedCache();
|
||||
cache.set('test1', 1);
|
||||
cache.set('test1', 2);
|
||||
expect(cache.get('test1')).toBe(2);
|
||||
});
|
||||
|
||||
test('delete removes an item', () => {
|
||||
const cache = createLimitedCache();
|
||||
cache.set('test', 'result');
|
||||
expect(cache.has('test')).toBeTruthy();
|
||||
cache.delete('test');
|
||||
expect(cache.has('test')).toBeFalsy();
|
||||
expect(cache.get('test')).toBeUndefined();
|
||||
});
|
||||
|
||||
test('removes oldest item cached if it exceeds a set size', () => {
|
||||
const cache = createLimitedCache({ maxSize: 1 });
|
||||
cache.set('test1', 1);
|
||||
cache.set('test2', 2);
|
||||
expect(cache.get('test1')).toBeUndefined();
|
||||
expect(cache.get('test2')).toBe(2);
|
||||
});
|
||||
|
||||
test('retrieving a value bumps up last access', () => {
|
||||
const cache = createLimitedCache({ maxSize: 2 });
|
||||
cache.set('test1', 1);
|
||||
cache.set('test2', 2);
|
||||
expect(cache.get('test1')).toBe(1);
|
||||
cache.set('test3', 3);
|
||||
expect(cache.get('test1')).toBe(1);
|
||||
expect(cache.get('test2')).toBeUndefined();
|
||||
expect(cache.get('test3')).toBe(3);
|
||||
});
|
||||
|
||||
test('logs when cache is added to and removed', () => {
|
||||
const log = vi.fn();
|
||||
const cache = createLimitedCache({ maxSize: 1, log });
|
||||
cache.set('test1', 1);
|
||||
expect(log).toHaveBeenLastCalledWith(
|
||||
'Added %s to cache, now size %d',
|
||||
'test1',
|
||||
1,
|
||||
);
|
||||
cache.set('test2', 1);
|
||||
expect(log).toHaveBeenLastCalledWith(
|
||||
'Added %s and deleted %s from cache, now size %d',
|
||||
'test2',
|
||||
'test1',
|
||||
1,
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user