add_dependencies({ _: 'third/underscore/underscore.js' }); var _ = global._; var Dict = require('js/dict.js'); var assert = require('assert'); (function test_basic() { var d = new Dict(); assert.deepEqual(d.keys(), []); d.set('foo', 'bar'); assert.equal(d.get('foo'), 'bar'); d.set('foo', 'baz'); assert.equal(d.get('foo'), 'baz'); d.set('bar', 'qux'); assert.equal(d.get('foo'), 'baz'); assert.equal(d.get('bar'), 'qux'); 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']); var val = ['foo']; var res = d.set('abc', val); assert.equal(val, res); }()); (function test_restricted_keys() { var d = new Dict(); assert.equal(d.has('__proto__'), false); assert.equal(d.has('hasOwnProperty'), false); assert.equal(d.has('toString'), false); assert.strictEqual(d.get('__proto__'), undefined); assert.strictEqual(d.get('hasOwnProperty'), undefined); assert.strictEqual(d.get('toString'), undefined); d.set('hasOwnProperty', function () {return true;}); assert.equal(d.has('blah'), false); d.set('__proto__', 'foo'); d.set('foo', 'bar'); assert.equal(d.get('foo'), 'bar'); }()); (function test_construction() { var d1 = new Dict(); assert.deepEqual(d1.items(), []); var d2 = Dict.from({foo: 'bar', baz: 'qux'}); assert.deepEqual(d2.items(), [['foo', 'bar'], ['baz', 'qux']]); var d3 = d2.clone(); d3.del('foo'); assert.deepEqual(d2.items(), [['foo', 'bar'], ['baz', 'qux']]); assert.deepEqual(d3.items(), [['baz', 'qux']]); var caught; try { Dict.from('bogus'); } catch (e) { caught = true; assert.equal(e.toString(), 'TypeError: Cannot convert argument to Dict'); } assert(caught); }()); (function test_each() { var d = new Dict(); d.set('apple', 40); d.set('banana', 50); d.set('carrot', 60); var unseen_keys = d.keys(); var cnt = 0; d.each(function (v, k) { assert.equal(v, d.get(k)); unseen_keys = _.without(unseen_keys, k); cnt += 1; }); assert.equal(cnt, d.keys().length); assert.equal(unseen_keys.length, 0); }()); (function test_setdefault() { var d = new Dict(); var val = ['foo']; var res = d.setdefault('foo', val); assert.equal(res, val); assert.equal(d.has('foo'), true); assert.equal(d.get('foo'), val); var val2 = ['foo2']; res = d.setdefault('foo', val2); assert.equal(res, val); assert.equal(d.get('foo'), val); }()); (function test_num_items() { var d = new Dict(); assert.equal(d.num_items(), 0); d.set('foo', 1); assert.equal(d.num_items(), 1); d.set('foo', 2); assert.equal(d.num_items(), 1); d.set('bar', 1); assert.equal(d.num_items(), 2); d.del('foo'); assert.equal(d.num_items(), 1); }());