| Leo Repp | 58b9f11 | 2021-11-22 11:57:47 +0100 | [diff] [blame^] | 1 | var t = require('tap') |
| 2 | |
| 3 | process.env.TEST_PSEUDOMAP = 'true' |
| 4 | |
| 5 | var PM = require('../') |
| 6 | runTests(PM) |
| 7 | |
| 8 | // if possible, verify that Map also behaves the same way |
| 9 | if (typeof Map === 'function') |
| 10 | runTests(Map) |
| 11 | |
| 12 | |
| 13 | function runTests (Map) { |
| 14 | t.throws(Map) |
| 15 | |
| 16 | var m = new Map() |
| 17 | |
| 18 | t.equal(m.size, 0) |
| 19 | |
| 20 | m.set(1, '1 string') |
| 21 | t.equal(m.get(1), '1 string') |
| 22 | t.equal(m.size, 1) |
| 23 | m.size = 1000 |
| 24 | t.equal(m.size, 1) |
| 25 | m.size = 0 |
| 26 | t.equal(m.size, 1) |
| 27 | |
| 28 | m = new Map([[1, 'number 1'], ['1', 'string 1']]) |
| 29 | t.equal(m.get(1), 'number 1') |
| 30 | t.equal(m.get('1'), 'string 1') |
| 31 | t.equal(m.size, 2) |
| 32 | |
| 33 | m = new Map(m) |
| 34 | t.equal(m.get(1), 'number 1') |
| 35 | t.equal(m.get('1'), 'string 1') |
| 36 | t.equal(m.size, 2) |
| 37 | |
| 38 | var akey = {} |
| 39 | var bkey = {} |
| 40 | m.set(akey, { some: 'data' }) |
| 41 | m.set(bkey, { some: 'other data' }) |
| 42 | t.same(m.get(akey), { some: 'data' }) |
| 43 | t.same(m.get(bkey), { some: 'other data' }) |
| 44 | t.equal(m.size, 4) |
| 45 | |
| 46 | var x = /x/ |
| 47 | var y = /x/ |
| 48 | m.set(x, 'x regex') |
| 49 | m.set(y, 'y regex') |
| 50 | t.equal(m.get(x), 'x regex') |
| 51 | m.set(x, 'x again') |
| 52 | t.equal(m.get(x), 'x again') |
| 53 | t.equal(m.size, 6) |
| 54 | |
| 55 | m.set(NaN, 'not a number') |
| 56 | t.equal(m.get(NaN), 'not a number') |
| 57 | m.set(NaN, 'it is a ' + typeof NaN) |
| 58 | t.equal(m.get(NaN), 'it is a number') |
| 59 | m.set('NaN', 'stringie nan') |
| 60 | t.equal(m.get(NaN), 'it is a number') |
| 61 | t.equal(m.get('NaN'), 'stringie nan') |
| 62 | t.equal(m.size, 8) |
| 63 | |
| 64 | m.delete(NaN) |
| 65 | t.equal(m.get(NaN), undefined) |
| 66 | t.equal(m.size, 7) |
| 67 | |
| 68 | var expect = [ |
| 69 | { value: 'number 1', key: 1 }, |
| 70 | { value: 'string 1', key: '1' }, |
| 71 | { value: { some: 'data' }, key: {} }, |
| 72 | { value: { some: 'other data' }, key: {} }, |
| 73 | { value: 'x again', key: /x/ }, |
| 74 | { value: 'y regex', key: /x/ }, |
| 75 | { value: 'stringie nan', key: 'NaN' } |
| 76 | ] |
| 77 | var actual = [] |
| 78 | |
| 79 | m.forEach(function (value, key) { |
| 80 | actual.push({ value: value, key: key }) |
| 81 | }) |
| 82 | t.same(actual, expect) |
| 83 | |
| 84 | m.clear() |
| 85 | t.equal(m.size, 0) |
| 86 | } |