Blame view
node_modules/shimmer/test/massWrap.tap.js
4.62 KB
f7563de62
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
'use strict' var tap = require('tap') var test = tap.test var sinon = require('sinon') var shimmer = require('../index.js') var outsider = 0 function counter () { return ++outsider } function anticounter () { return --outsider } var generator = { inc: counter, dec: anticounter } var arrow = { in: counter, out: anticounter } var nester = { in: counter, out: anticounter } test('should wrap multiple functions safely', function (t) { t.plan(9) t.equal(counter, generator.inc, 'basic function equality testing should work') t.equal(anticounter, generator.dec, 'basic function equality testing should work') t.doesNotThrow(function () { generator.inc() }) t.doesNotThrow(function () { generator.dec() }) t.equal(0, outsider, 'calls have side effects') var count = 0 function wrapper (original) { return function () { count++ var returned = original.apply(this, arguments) count++ return returned } } shimmer.massWrap(generator, ['inc', 'dec'], wrapper) t.doesNotThrow(function () { generator.inc() }) t.doesNotThrow(function () { generator.dec() }) t.equal(4, count, 'both pre and post increments should have happened') t.equal(0, outsider, 'original function has still been called') }) test('should wrap multiple functions on multiple modules safely', function (t) { t.plan(15) t.equal(counter, arrow.in, 'basic function equality testing should work') t.equal(counter, nester.in, 'basic function equality testing should work') t.equal(anticounter, arrow.out, 'basic function equality testing should work') t.equal(anticounter, nester.out, 'basic function equality testing should work') t.doesNotThrow(function () { arrow.in() }) t.doesNotThrow(function () { nester.in() }) t.doesNotThrow(function () { arrow.out() }) t.doesNotThrow(function () { nester.out() }) t.equal(0, outsider, 'calls have side effects') var count = 0 function wrapper (original) { return function () { count++ var returned = original.apply(this, arguments) count++ return returned } } shimmer.massWrap([arrow, nester], ['in', 'out'], wrapper) t.doesNotThrow(function () { arrow.in() }) t.doesNotThrow(function () { arrow.out() }) t.doesNotThrow(function () { nester.in() }) t.doesNotThrow(function () { nester.out() }) t.equal(8, count, 'both pre and post increments should have happened') t.equal(0, outsider, 'original function has still been called') }) test('wrap called with no arguments', function (t) { t.plan(2) var mock = sinon.expectation .create('logger') .twice() shimmer({logger: mock}) t.doesNotThrow(function () { shimmer.massWrap() }, "wrapping with no arguments doesn't throw") t.doesNotThrow(function () { mock.verify() }, 'logger was called with the expected message') }) test('wrap called with module but nothing else', function (t) { t.plan(2) var mock = sinon.expectation .create('logger') .withExactArgs('must provide one or more functions to wrap on modules') .once() shimmer({logger: mock}) t.doesNotThrow(function () { shimmer.massWrap(generator) }, "wrapping with only 1 argument doesn't throw") t.doesNotThrow(function () { mock.verify() }, 'logger was called with the expected message') }) test('wrap called with original but no wrapper', function (t) { t.plan(2) var mock = sinon.expectation .create('logger') .twice() shimmer({logger: mock}) t.doesNotThrow(function () { shimmer.massWrap(generator, ['inc']) }, "wrapping with only original function doesn't throw") t.doesNotThrow(function () { mock.verify() }, 'logger was called with the expected message') }) test('wrap called with non-function original', function (t) { t.plan(2) var mock = sinon.expectation .create('logger') .withExactArgs('must provide one or more functions to wrap on modules') .once() shimmer({logger: mock}) t.doesNotThrow(function () { shimmer.massWrap({orange: 'slices'}, 'orange', function () {}) }, "wrapping non-function original doesn't throw") t.doesNotThrow(function () { mock.verify() }, 'logger was called with the expected message') }) test('wrap called with non-function wrapper', function (t) { t.plan(2) var mock = sinon.expectation .create('logger') .withArgs('must provide one or more functions to wrap on modules') .once() shimmer({logger: mock}) t.doesNotThrow(function () { shimmer.massWrap({orange: function () {}}, 'orange', 'hamchunx') }, "wrapping with non-function wrapper doesn't throw") t.doesNotThrow(function () { mock.verify() }, 'logger was called with the expected message') }) |