GeezerVison is showing github.com — test: add common.mustSucceed · nodejs/node@70cb708
File treeExpand file treeCollapse file tree Open diff view settings Some content is hiddenLarge Commits have some content hidden by default. Use the searchbox below for content that may be hidden. Dismiss bannerExpand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: doc/guides/writing-tests.md +5Lines changed: 5 additions & 0 deletions - Display the source diff
- Display the rich diff
| Original file line number | Diff line number | Diff line change |
|---|
@@ -209,6 +209,11 @@ const server = http.createServer(common.mustCall((req, res) => { | 209 | 209 |
| 210 | 210 | ``` | 211 | 211 |
| | 212 | +**Note:** Many functions invoke their callback with an `err` value as the first | | 213 | +argument. It is not a good idea to simply pass `common.mustCall()` to those | | 214 | +because `common.mustCall()` will ignore the error. Use `common.mustSucceed()` | | 215 | +instead. | | 216 | + | 212 | 217 | #### Countdown Module | 213 | 218 |
| 214 | 219 | The common [Countdown module](https://github.com/nodejs/node/tree/master/test/common#countdown-module) | |
Collapse file Copy file name to clipboardExpand all lines: test/.eslintrc.yaml +1Lines changed: 1 addition & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
| 50 | 50 | node-core/prefer-assert-iferror: error | 51 | 51 | node-core/prefer-assert-methods: error | 52 | 52 | node-core/prefer-common-mustnotcall: error | | 53 | + node-core/prefer-common-mustsucceed: error | 53 | 54 | node-core/crypto-check: error | 54 | 55 | node-core/eslint-check: error | 55 | 56 | node-core/inspector-check: error | |
Collapse file Copy file name to clipboardExpand all lines: test/common/README.md +9Lines changed: 9 additions & 0 deletions - Display the source diff
- Display the rich diff
| Original file line number | Diff line number | Diff line change |
|---|
@@ -313,6 +313,15 @@ If `fn` is not provided, an empty function will be used. | 313 | 313 | Returns a function that triggers an `AssertionError` if it is invoked. `msg` is | 314 | 314 | used as the error message for the `AssertionError`. | 315 | 315 |
| | 316 | +### `mustSucceed([fn])` | | 317 | + | | 318 | +* `fn` [<Function>][] default = () => {} | | 319 | +* return [<Function>][] | | 320 | + | | 321 | +Returns a function that accepts arguments `(err, ...args)`. If `err` is not | | 322 | +`undefined` or `null`, it triggers an `AssertionError`. Otherwise, it calls | | 323 | +`fn(...args)`. | | 324 | + | 316 | 325 | ### `nodeProcessAborted(exitCode, signal)` | 317 | 326 |
| 318 | 327 | * `exitCode` [<number>][] | |
Collapse file Copy file name to clipboardExpand all lines: test/common/index.js +9Lines changed: 9 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -334,6 +334,14 @@ function mustCall(fn, exact) { | 334 | 334 | return _mustCallInner(fn, exact, 'exact'); | 335 | 335 | } | 336 | 336 |
| | 337 | +function mustSucceed(fn, exact) { | | 338 | + return mustCall(function(err, ...args) { | | 339 | + assert.ifError(err); | | 340 | + if (typeof fn === 'function') | | 341 | + return fn.apply(this, args); | | 342 | + }, exact); | | 343 | +} | | 344 | + | 337 | 345 | function mustCallAtLeast(fn, minimum) { | 338 | 346 | return _mustCallInner(fn, minimum, 'minimum'); | 339 | 347 | } | @@ -723,6 +731,7 @@ const common = { | 723 | 731 | mustCall, | 724 | 732 | mustCallAtLeast, | 725 | 733 | mustNotCall, | | 734 | + mustSucceed, | 726 | 735 | nodeProcessAborted, | 727 | 736 | PIPE, | 728 | 737 | platformTimeout, | |
Collapse file Copy file name to clipboardExpand all lines: test/doctool/test-doctool-json.js +2-4Lines changed: 2 additions & 4 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -229,10 +229,8 @@ const testData = [ | 229 | 229 | ]; | 230 | 230 |
| 231 | 231 | testData.forEach((item) => { | 232 | | - fs.readFile(item.file, 'utf8', common.mustCall((err, input) => { | 233 | | - assert.ifError(err); | 234 | | - toJSON(input, 'foo', common.mustCall((err, output) => { | 235 | | - assert.ifError(err); | | 232 | + fs.readFile(item.file, 'utf8', common.mustSucceed((input) => { | | 233 | + toJSON(input, 'foo', common.mustSucceed((output) => { | 236 | 234 | assert.deepStrictEqual(output.json, item.json); | 237 | 235 | })); | 238 | 236 | })); | |
Collapse file Copy file name to clipboardExpand all lines: test/internet/test-dns-any.js +3-6Lines changed: 3 additions & 6 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -127,8 +127,7 @@ TEST(async function test_sip2sip_for_naptr(done) { | 127 | 127 | const req = dns.resolve( | 128 | 128 | 'sip2sip.info', | 129 | 129 | 'ANY', | 130 | | - common.mustCall(function(err, ret) { | 131 | | - assert.ifError(err); | | 130 | + common.mustSucceed((ret) => { | 132 | 131 | validateResult(ret); | 133 | 132 | done(); | 134 | 133 | })); | @@ -147,8 +146,7 @@ TEST(async function test_google_for_cname_and_srv(done) { | 147 | 146 | const req = dns.resolve( | 148 | 147 | '_jabber._tcp.google.com', | 149 | 148 | 'ANY', | 150 | | - common.mustCall(function(err, ret) { | 151 | | - assert.ifError(err); | | 149 | + common.mustSucceed((ret) => { | 152 | 150 | validateResult(ret); | 153 | 151 | done(); | 154 | 152 | })); | @@ -167,8 +165,7 @@ TEST(async function test_ptr(done) { | 167 | 165 | const req = dns.resolve( | 168 | 166 | '8.8.8.8.in-addr.arpa', | 169 | 167 | 'ANY', | 170 | | - common.mustCall(function(err, ret) { | 171 | | - assert.ifError(err); | | 168 | + common.mustSucceed((ret) => { | 172 | 169 | validateResult(ret); | 173 | 170 | done(); | 174 | 171 | })); | |
Collapse file Copy file name to clipboardExpand all lines: test/internet/test-dns-ipv4.js +10-20Lines changed: 10 additions & 20 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -50,8 +50,7 @@ TEST(async function test_resolve4(done) { | 50 | 50 |
| 51 | 51 | const req = dns.resolve4( | 52 | 52 | addresses.INET4_HOST, | 53 | | - common.mustCall((err, ips) => { | 54 | | - assert.ifError(err); | | 53 | + common.mustSucceed((ips) => { | 55 | 54 | validateResult(ips); | 56 | 55 | done(); | 57 | 56 | })); | @@ -73,8 +72,7 @@ TEST(async function test_reverse_ipv4(done) { | 73 | 72 |
| 74 | 73 | const req = dns.reverse( | 75 | 74 | addresses.INET4_IP, | 76 | | - common.mustCall((err, domains) => { | 77 | | - assert.ifError(err); | | 75 | + common.mustSucceed((domains) => { | 78 | 76 | validateResult(domains); | 79 | 77 | done(); | 80 | 78 | })); | @@ -92,8 +90,7 @@ TEST(async function test_lookup_ipv4_explicit(done) { | 92 | 90 |
| 93 | 91 | const req = dns.lookup( | 94 | 92 | addresses.INET4_HOST, 4, | 95 | | - common.mustCall((err, ip, family) => { | 96 | | - assert.ifError(err); | | 93 | + common.mustSucceed((ip, family) => { | 97 | 94 | validateResult({ address: ip, family }); | 98 | 95 | done(); | 99 | 96 | })); | @@ -111,8 +108,7 @@ TEST(async function test_lookup_ipv4_implicit(done) { | 111 | 108 |
| 112 | 109 | const req = dns.lookup( | 113 | 110 | addresses.INET4_HOST, | 114 | | - common.mustCall((err, ip, family) => { | 115 | | - assert.ifError(err); | | 111 | + common.mustSucceed((ip, family) => { | 116 | 112 | validateResult({ address: ip, family }); | 117 | 113 | done(); | 118 | 114 | })); | @@ -130,8 +126,7 @@ TEST(async function test_lookup_ipv4_explicit_object(done) { | 130 | 126 |
| 131 | 127 | const req = dns.lookup(addresses.INET4_HOST, { | 132 | 128 | family: 4 | 133 | | - }, common.mustCall((err, ip, family) => { | 134 | | - assert.ifError(err); | | 129 | + }, common.mustSucceed((ip, family) => { | 135 | 130 | validateResult({ address: ip, family }); | 136 | 131 | done(); | 137 | 132 | })); | @@ -151,8 +146,7 @@ TEST(async function test_lookup_ipv4_hint_addrconfig(done) { | 151 | 146 |
| 152 | 147 | const req = dns.lookup(addresses.INET4_HOST, { | 153 | 148 | hints: dns.ADDRCONFIG | 154 | | - }, common.mustCall((err, ip, family) => { | 155 | | - assert.ifError(err); | | 149 | + }, common.mustSucceed((ip, family) => { | 156 | 150 | validateResult({ address: ip, family }); | 157 | 151 | done(); | 158 | 152 | })); | @@ -169,8 +163,7 @@ TEST(async function test_lookup_ip_ipv4(done) { | 169 | 163 | validateResult(await dnsPromises.lookup('127.0.0.1')); | 170 | 164 |
| 171 | 165 | const req = dns.lookup('127.0.0.1', | 172 | | - common.mustCall((err, ip, family) => { | 173 | | - assert.ifError(err); | | 166 | + common.mustSucceed((ip, family) => { | 174 | 167 | validateResult({ address: ip, family }); | 175 | 168 | done(); | 176 | 169 | })); | @@ -187,8 +180,7 @@ TEST(async function test_lookup_localhost_ipv4(done) { | 187 | 180 | validateResult(await dnsPromises.lookup('localhost', 4)); | 188 | 181 |
| 189 | 182 | const req = dns.lookup('localhost', 4, | 190 | | - common.mustCall((err, ip, family) => { | 191 | | - assert.ifError(err); | | 183 | + common.mustSucceed((ip, family) => { | 192 | 184 | validateResult({ address: ip, family }); | 193 | 185 | done(); | 194 | 186 | })); | @@ -215,8 +207,7 @@ TEST(async function test_lookup_all_ipv4(done) { | 215 | 207 | const req = dns.lookup( | 216 | 208 | addresses.INET4_HOST, | 217 | 209 | { all: true, family: 4 }, | 218 | | - common.mustCall((err, ips) => { | 219 | | - assert.ifError(err); | | 210 | + common.mustSucceed((ips) => { | 220 | 211 | validateResult(ips); | 221 | 212 | done(); | 222 | 213 | }) | @@ -236,8 +227,7 @@ TEST(async function test_lookupservice_ip_ipv4(done) { | 236 | 227 |
| 237 | 228 | const req = dns.lookupService( | 238 | 229 | '127.0.0.1', 80, | 239 | | - common.mustCall((err, hostname, service) => { | 240 | | - assert.ifError(err); | | 230 | + common.mustSucceed((hostname, service) => { | 241 | 231 | validateResult({ hostname, service }); | 242 | 232 | done(); | 243 | 233 | }) | |
Collapse file Copy file name to clipboardExpand all lines: test/internet/test-dns-ipv6.js +6-12Lines changed: 6 additions & 12 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -52,8 +52,7 @@ TEST(async function test_resolve6(done) { | 52 | 52 |
| 53 | 53 | const req = dns.resolve6( | 54 | 54 | addresses.INET6_HOST, | 55 | | - common.mustCall((err, ips) => { | 56 | | - assert.ifError(err); | | 55 | + common.mustSucceed((ips) => { | 57 | 56 | validateResult(ips); | 58 | 57 | done(); | 59 | 58 | })); | @@ -74,8 +73,7 @@ TEST(async function test_reverse_ipv6(done) { | 74 | 73 |
| 75 | 74 | const req = dns.reverse( | 76 | 75 | addresses.INET6_IP, | 77 | | - common.mustCall((err, domains) => { | 78 | | - assert.ifError(err); | | 76 | + common.mustSucceed((domains) => { | 79 | 77 | validateResult(domains); | 80 | 78 | done(); | 81 | 79 | })); | @@ -94,8 +92,7 @@ TEST(async function test_lookup_ipv6_explicit(done) { | 94 | 92 | const req = dns.lookup( | 95 | 93 | addresses.INET6_HOST, | 96 | 94 | 6, | 97 | | - common.mustCall((err, ip, family) => { | 98 | | - assert.ifError(err); | | 95 | + common.mustSucceed((ip, family) => { | 99 | 96 | validateResult({ address: ip, family }); | 100 | 97 | done(); | 101 | 98 | })); | @@ -126,8 +123,7 @@ TEST(async function test_lookup_ipv6_explicit_object(done) { | 126 | 123 |
| 127 | 124 | const req = dns.lookup(addresses.INET6_HOST, { | 128 | 125 | family: 6 | 129 | | - }, common.mustCall((err, ip, family) => { | 130 | | - assert.ifError(err); | | 126 | + }, common.mustSucceed((ip, family) => { | 131 | 127 | validateResult({ address: ip, family }); | 132 | 128 | done(); | 133 | 129 | })); | @@ -173,8 +169,7 @@ TEST(async function test_lookup_ip_ipv6(done) { | 173 | 169 |
| 174 | 170 | const req = dns.lookup( | 175 | 171 | '::1', | 176 | | - common.mustCall((err, ip, family) => { | 177 | | - assert.ifError(err); | | 172 | + common.mustSucceed((ip, family) => { | 178 | 173 | validateResult({ address: ip, family }); | 179 | 174 | done(); | 180 | 175 | })); | @@ -202,8 +197,7 @@ TEST(async function test_lookup_all_ipv6(done) { | 202 | 197 | const req = dns.lookup( | 203 | 198 | addresses.INET6_HOST, | 204 | 199 | { all: true, family: 6 }, | 205 | | - common.mustCall((err, ips) => { | 206 | | - assert.ifError(err); | | 200 | + common.mustSucceed((ips) => { | 207 | 201 | validateResult(ips); | 208 | 202 | done(); | 209 | 203 | }) | |
Collapse file Copy file name to clipboardExpand all lines: test/internet/test-http2-issue-32922.js +3-10Lines changed: 3 additions & 10 deletions | Original file line number | Diff line number | Diff line change |
|---|
| 1 | 1 | 'use strict'; | 2 | 2 | const common = require('../common'); | 3 | | -const assert = require('assert'); | 4 | 3 |
| 5 | 4 | if (!common.hasCrypto) | 6 | 5 | common.skip('missing crypto'); | @@ -29,9 +28,7 @@ function normalSession(cb) { | 29 | 28 | }); | 30 | 29 | }); | 31 | 30 | } | 32 | | -normalSession(common.mustCall(function(err) { | 33 | | - assert.ifError(err); | 34 | | -})); | | 31 | +normalSession(common.mustSucceed()); | 35 | 32 |
| 36 | 33 | // Create a session using a socket that has not yet finished connecting | 37 | 34 | function socketNotFinished(done) { | @@ -52,9 +49,7 @@ function socketNotFinished(done) { | 52 | 49 | }); | 53 | 50 | }); | 54 | 51 | } | 55 | | -socketNotFinished(common.mustCall(function(err) { | 56 | | - assert.ifError(err); | 57 | | -})); | | 52 | +socketNotFinished(common.mustSucceed()); | 58 | 53 |
| 59 | 54 | // Create a session using a socket that has finished connecting | 60 | 55 | function socketFinished(done) { | @@ -75,6 +70,4 @@ function socketFinished(done) { | 75 | 70 | }); | 76 | 71 | }); | 77 | 72 | } | 78 | | -socketFinished(common.mustCall(function(err) { | 79 | | - assert.ifError(err); | 80 | | -})); | | 73 | +socketFinished(common.mustSucceed()); |
Collapse file Copy file name to clipboardExpand all lines: test/parallel/test-c-ares.js +4-8Lines changed: 4 additions & 8 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -43,20 +43,17 @@ const dnsPromises = dns.promises; | 43 | 43 | })(); | 44 | 44 |
| 45 | 45 | // Try resolution without hostname. | 46 | | -dns.lookup(null, common.mustCall((error, result, addressType) => { | 47 | | - assert.ifError(error); | | 46 | +dns.lookup(null, common.mustSucceed((result, addressType) => { | 48 | 47 | assert.strictEqual(result, null); | 49 | 48 | assert.strictEqual(addressType, 4); | 50 | 49 | })); | 51 | 50 |
| 52 | | -dns.lookup('127.0.0.1', common.mustCall((error, result, addressType) => { | 53 | | - assert.ifError(error); | | 51 | +dns.lookup('127.0.0.1', common.mustSucceed((result, addressType) => { | 54 | 52 | assert.strictEqual(result, '127.0.0.1'); | 55 | 53 | assert.strictEqual(addressType, 4); | 56 | 54 | })); | 57 | 55 |
| 58 | | -dns.lookup('::1', common.mustCall((error, result, addressType) => { | 59 | | - assert.ifError(error); | | 56 | +dns.lookup('::1', common.mustSucceed((result, addressType) => { | 60 | 57 | assert.strictEqual(result, '::1'); | 61 | 58 | assert.strictEqual(addressType, 6); | 62 | 59 | })); | @@ -86,8 +83,7 @@ dns.lookup('::1', common.mustCall((error, result, addressType) => { | 86 | 83 | // so we disable this test on Windows. | 87 | 84 | // IBMi reports `ENOTFOUND` when get hostname by address 127.0.0.1 | 88 | 85 | if (!common.isWindows && !common.isIBMi) { | 89 | | - dns.reverse('127.0.0.1', common.mustCall(function(error, domains) { | 90 | | - assert.ifError(error); | | 86 | + dns.reverse('127.0.0.1', common.mustSucceed((domains) => { | 91 | 87 | assert.ok(Array.isArray(domains)); | 92 | 88 | })); | 93 | 89 |
| |
|