You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
1.8 KiB
86 lines
1.8 KiB
var t = require('tap') |
|
|
|
process.env.TEST_PSEUDOMAP = 'true' |
|
|
|
var PM = require('../') |
|
runTests(PM) |
|
|
|
// if possible, verify that Map also behaves the same way |
|
if (typeof Map === 'function') |
|
runTests(Map) |
|
|
|
|
|
function runTests (Map) { |
|
t.throws(Map) |
|
|
|
var m = new Map() |
|
|
|
t.equal(m.size, 0) |
|
|
|
m.set(1, '1 string') |
|
t.equal(m.get(1), '1 string') |
|
t.equal(m.size, 1) |
|
m.size = 1000 |
|
t.equal(m.size, 1) |
|
m.size = 0 |
|
t.equal(m.size, 1) |
|
|
|
m = new Map([[1, 'number 1'], ['1', 'string 1']]) |
|
t.equal(m.get(1), 'number 1') |
|
t.equal(m.get('1'), 'string 1') |
|
t.equal(m.size, 2) |
|
|
|
m = new Map(m) |
|
t.equal(m.get(1), 'number 1') |
|
t.equal(m.get('1'), 'string 1') |
|
t.equal(m.size, 2) |
|
|
|
var akey = {} |
|
var bkey = {} |
|
m.set(akey, { some: 'data' }) |
|
m.set(bkey, { some: 'other data' }) |
|
t.same(m.get(akey), { some: 'data' }) |
|
t.same(m.get(bkey), { some: 'other data' }) |
|
t.equal(m.size, 4) |
|
|
|
var x = /x/ |
|
var y = /x/ |
|
m.set(x, 'x regex') |
|
m.set(y, 'y regex') |
|
t.equal(m.get(x), 'x regex') |
|
m.set(x, 'x again') |
|
t.equal(m.get(x), 'x again') |
|
t.equal(m.size, 6) |
|
|
|
m.set(NaN, 'not a number') |
|
t.equal(m.get(NaN), 'not a number') |
|
m.set(NaN, 'it is a ' + typeof NaN) |
|
t.equal(m.get(NaN), 'it is a number') |
|
m.set('NaN', 'stringie nan') |
|
t.equal(m.get(NaN), 'it is a number') |
|
t.equal(m.get('NaN'), 'stringie nan') |
|
t.equal(m.size, 8) |
|
|
|
m.delete(NaN) |
|
t.equal(m.get(NaN), undefined) |
|
t.equal(m.size, 7) |
|
|
|
var expect = [ |
|
{ value: 'number 1', key: 1 }, |
|
{ value: 'string 1', key: '1' }, |
|
{ value: { some: 'data' }, key: {} }, |
|
{ value: { some: 'other data' }, key: {} }, |
|
{ value: 'x again', key: /x/ }, |
|
{ value: 'y regex', key: /x/ }, |
|
{ value: 'stringie nan', key: 'NaN' } |
|
] |
|
var actual = [] |
|
|
|
m.forEach(function (value, key) { |
|
actual.push({ value: value, key: key }) |
|
}) |
|
t.same(actual, expect) |
|
|
|
m.clear() |
|
t.equal(m.size, 0) |
|
}
|
|
|