mirror of
https://github.com/zulip/zulip.git
synced 2025-11-14 10:57:58 +00:00
We have ~5 years of proof that we'll probably never extend Dict with more options. Breaking the classes into makes both a little faster (no options to check), and we remove some options in FoldDict that are never used (from/from_array). A possible next step is to fine-tune the Dict to use Map internally. Note that the TypeScript types for FoldDict are now more specific (requiring string keys). Of course, this isn't really enforced until we convert other modules to TS.
99 lines
2.3 KiB
JavaScript
99 lines
2.3 KiB
JavaScript
const FoldDict = zrequire('fold_dict').FoldDict;
|
|
set_global('blueslip', global.make_zblueslip());
|
|
|
|
run_test('basic', () => {
|
|
const d = new FoldDict();
|
|
|
|
assert(d.is_empty());
|
|
|
|
assert.deepEqual(d.keys(), []);
|
|
|
|
d.set('foo', 'bar');
|
|
assert.equal(d.get('foo'), 'bar');
|
|
assert(!d.is_empty());
|
|
|
|
d.set('foo', 'baz');
|
|
assert.equal(d.get('foo'), 'baz');
|
|
assert.equal(d.num_items(), 1);
|
|
|
|
d.set('bar', 'qux');
|
|
assert.equal(d.get('foo'), 'baz');
|
|
assert.equal(d.get('bar'), 'qux');
|
|
assert.equal(d.num_items(), 2);
|
|
|
|
assert.equal(d.has('bar'), true);
|
|
assert.equal(d.has('baz'), false);
|
|
|
|
assert.deepEqual(d.keys(), ['foo', 'bar']);
|
|
assert.deepEqual(d.values(), ['baz', 'qux']);
|
|
assert.deepEqual(d.items(), [['foo', 'baz'], ['bar', 'qux']]);
|
|
|
|
d.del('bar');
|
|
assert.equal(d.has('bar'), false);
|
|
assert.strictEqual(d.get('bar'), undefined);
|
|
|
|
assert.deepEqual(d.keys(), ['foo']);
|
|
|
|
const val = ['foo'];
|
|
const res = d.set('abc', val);
|
|
assert.equal(val, res);
|
|
});
|
|
|
|
run_test('case insensitivity', () => {
|
|
const d = new FoldDict();
|
|
|
|
assert.deepEqual(d.keys(), []);
|
|
|
|
assert(!d.has('foo'));
|
|
d.set('fOO', 'Hello World');
|
|
assert.equal(d.get('foo'), 'Hello World');
|
|
assert(d.has('foo'));
|
|
assert(d.has('FOO'));
|
|
assert(!d.has('not_a_key'));
|
|
|
|
assert.deepEqual(d.keys(), ['fOO']);
|
|
|
|
d.del('Foo');
|
|
assert.equal(d.has('foo'), false);
|
|
|
|
assert.deepEqual(d.keys(), []);
|
|
});
|
|
|
|
run_test('clear', () => {
|
|
const d = new FoldDict();
|
|
|
|
function populate() {
|
|
d.set('fOO', 1);
|
|
assert.equal(d.get('foo'), 1);
|
|
d.set('bAR', 2);
|
|
assert.equal(d.get('bar'), 2);
|
|
}
|
|
|
|
populate();
|
|
assert.equal(d.num_items(), 2);
|
|
assert(!d.is_empty());
|
|
|
|
d.clear();
|
|
assert.equal(d.get('fOO'), undefined);
|
|
assert.equal(d.get('bAR'), undefined);
|
|
assert.equal(d.num_items(), 0);
|
|
assert(d.is_empty());
|
|
|
|
// make sure it still works after clearing
|
|
populate();
|
|
assert.equal(d.num_items(), 2);
|
|
});
|
|
|
|
run_test('undefined_keys', () => {
|
|
blueslip.set_test_data('error', 'Tried to call a FoldDict method with an undefined key.');
|
|
|
|
const d = new FoldDict();
|
|
|
|
assert.equal(d.has(undefined), false);
|
|
assert.strictEqual(d.get(undefined), undefined);
|
|
assert.equal(blueslip.get_test_logs('error').length, 2);
|
|
|
|
blueslip.clear_test_data();
|
|
});
|
|
|