import { callbackify } from "util"; import { createTest } from "node-harness"; const { describe, expect, it, createCallCheckCtx } = createTest(import.meta.path); const values = [ "hello world", null, undefined, false, 0, {}, { key: "value" }, Symbol("I am a symbol"), function ok() {}, ["array", "with", 4, "values"], new Error("boo"), ]; describe("util.callbackify", () => { describe("rejection reason", () => { for (const value of values) { it(`callback is async function, value is ${String(value)}`, done => { const { mustCall } = createCallCheckCtx(done); async function asyncFn() { return Promise.reject(value); } const cbAsyncFn = callbackify(asyncFn); cbAsyncFn( mustCall((err, ret) => { try { expect(ret).toBeUndefined(); if (err instanceof Error) { if ("reason" in err) { expect(!value).toBeTrue(); expect(err.code).toStrictEqual("ERR_FALSY_VALUE_REJECTION"); expect(err.reason).toStrictEqual(value); } else { expect(String(value)).toEndWith(err.message); } } else { expect(err).toStrictEqual(value); } done(); } catch (error) { done(error); } }), ); }); it(`callback is promise, value is ${String(value)}`, done => { const { mustCall } = createCallCheckCtx(done); function promiseFn() { return Promise.reject(value); } const obj = {}; Object.defineProperty(promiseFn, "name", { value: obj, writable: false, enumerable: false, configurable: true, }); const cbPromiseFn = callbackify(promiseFn); try { expect(promiseFn.name).toStrictEqual(obj); } catch (error) { done(error); } cbPromiseFn( mustCall((err, ret) => { try { expect(ret).toBeUndefined(); if (err instanceof Error) { if ("reason" in err) { expect(!value).toBeTrue(); expect(err.code).toStrictEqual("ERR_FALSY_VALUE_REJECTION"); expect(err.reason).toStrictEqual(value); } else { expect(String(value)).toEndWith(err.message); } } else { expect(err).toStrictEqual(value); } done(); } catch (error) { done(error); } }), ); }); it(`callback is thenable, value is ${String(value)}`, done => { const { mustCall } = createCallCheckCtx(done); function thenableFn() { return { then(onRes, onRej) { onRej(value); }, }; } const cbThenableFn = callbackify(thenableFn); cbThenableFn( mustCall((err, ret) => { try { expect(ret).toBeUndefined(); if (err instanceof Error) { if ("reason" in err) { expect(!value).toBeTrue(); expect(err.code).toStrictEqual("ERR_FALSY_VALUE_REJECTION"); expect(err.reason).toStrictEqual(value); } else { expect(String(value)).toEndWith(err.message); } } else { expect(err).toStrictEqual(value); } done(); } catch (error) { done(error); } }), ); }); } }); describe("return value", () => { for (const value of values) { it(`callback is async function, value is ${String(value)}`, done => { const { mustSucceed } = createCallCheckCtx(done); async function asyncFn() { return value; } const cbAsyncFn = callbackify(asyncFn); cbAsyncFn( mustSucceed(ret => { try { expect(ret).toStrictEqual(value); expect(ret).toStrictEqual(value); done(); } catch (error) { done(error); } }), ); }); it(`callback is promise, value is ${String(value)}`, done => { const { mustSucceed } = createCallCheckCtx(done); function promiseFn() { return Promise.resolve(value); } const cbPromiseFn = callbackify(promiseFn); cbPromiseFn( mustSucceed(ret => { try { expect(ret).toStrictEqual(value); done(); } catch (error) { done(error); } }), ); }); it(`callback is thenable, value is ${String(value)}`, done => { const { mustSucceed } = createCallCheckCtx(done); function thenableFn() { return { then(onRes, onRej) { onRes(value); }, }; } const cbThenableFn = callbackify(thenableFn); cbThenableFn( mustSucceed(ret => { try { expect(ret).toStrictEqual(value); done(); } catch (error) { done(error); } }), ); }); } }); describe("arguments", () => { for (const value of values) { it(`callback is async function, value is ${String(value)}`, done => { const { mustSucceed } = createCallCheckCtx(done); async function asyncFn(arg) { try { expect(arg).toStrictEqual(value); } catch (error) { done(error); } return arg; } const cbAsyncFn = callbackify(asyncFn); cbAsyncFn( value, mustSucceed(ret => { try { expect(ret).toStrictEqual(value); done(); } catch (error) { done(error); } }), ); }); it(`callback is promise, value is ${String(value)}`, done => { const { mustSucceed } = createCallCheckCtx(done); function promiseFn(arg) { try { expect(arg).toStrictEqual(value); } catch (error) { done(error); } return Promise.resolve(arg); } const obj = {}; Object.defineProperty(promiseFn, "length", { value: obj, writable: false, enumerable: false, configurable: true, }); const cbPromiseFn = callbackify(promiseFn); try { expect(promiseFn.length).toStrictEqual(obj); } catch (error) { done(error); } cbPromiseFn( value, mustSucceed(ret => { try { expect(ret).toStrictEqual(value); done(); } catch (error) { done(error); } }), ); }); } }); describe("this binding", () => { const value = "hello world"; it("callback is sync function", done => { // TODO: // const { mustSucceed } = createCallCheckCtx(done); const iAmThis = { fn(arg) { try { expect(this).toStrictEqual(iAmThis); } catch (error) { done(error); } return Promise.resolve(arg); }, }; iAmThis.cbFn = callbackify(iAmThis.fn); iAmThis.cbFn(value, function (rej, ret) { try { expect(ret).toStrictEqual(value); expect(this).toStrictEqual(iAmThis); done(); } catch (error) { done(error); } }); }); it("callback is async function", done => { const iAmThis = { async fn(arg) { try { expect(this).toStrictEqual(iAmThis); } catch (error) { done(error); } return Promise.resolve(arg); }, }; iAmThis.cbFn = callbackify(iAmThis.fn); iAmThis.cbFn(value, function (rej, ret) { try { expect(ret).toStrictEqual(value); expect(this).toStrictEqual(iAmThis); done(); } catch (error) { done(error); } }); }); }); }); tter Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/docs/guides/install (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2023-10-18Adds macOS Keychain certs to default CA storeGravatar Anshul Gupta 2-2/+175
2023-10-18fix(node:buffer): fix the behavior of `totalLength` in `Buffer.concat` (#6574)Gravatar Ai Hoshino 2-3/+23
2023-10-18fix: change `--no-scripts` to `--ignore-scripts` (#6587)Gravatar Dawid Sowa 1-2/+2
2023-10-18fix: online docs moved (#6579)Gravatar Mountain/\Ash 1-1/+1
2023-10-18Fix minimum kernel version in docs (#6153)Gravatar Kevin Latka 1-1/+1
2023-10-18build-id++Gravatar Dylan Conway 1-1/+1
2023-10-18fix(web): stub `performance.getEntriesByName` (#6542)Gravatar Liz 1-0/+18
2023-10-17update root package variableGravatar Dylan Conway 1-8/+3
2023-10-17Fix missing `{port: 0}` causing flaky testGravatar Ashcon Partovi 1-0/+2
2023-10-17test changes in usockets in ciGravatar Dylan Conway 5-0/+9
2023-10-17fix #4766 (#6563)Gravatar Pierre CM 1-4/+4
2023-10-17Update ZigGeneratedClasses.cppGravatar Dylan Conway 1-2/+0
2023-10-17use npm alias in dependencies (#6545)Gravatar Dylan Conway 7-29/+271
2023-10-17fix(node:http): fix `server.address()` (#6442)Gravatar Ai Hoshino 12-12/+453
2023-10-17docs: fix ws.publish (#6558)Gravatar Aral Roca Gomez 1-1/+1
2023-10-17perf(bun-types): remove needless some call (#6550)Gravatar Mikhail 1-1/+1
2023-10-16fix(runtime): make some things more stable (partial jsc debug build) (#5881)Gravatar dave caruso 116-1446/+1830
2023-10-16fix(runtime): improve IPC reliability + organization pass on that code (#6475)Gravatar dave caruso 15-98/+266
2023-10-16Simplify getting Set of extentions (#4975)Gravatar Mikhail 1-3/+3
2023-10-16Fix formattingGravatar Ashcon Partovi 1-3/+1
2023-10-16fix(test): when tests run with --only the nested describe blocks `.on… (#5616)Gravatar Igor Shapiro 2-13/+45
2023-10-16perf(node:events): optimize `emit(...)` function (#5485)Gravatar Yannik Schröder 3-11/+132
2023-10-16fix: don't remove content-encoding header from header table (#5743)Gravatar Liz 2-2/+25
2023-10-16fix(sqlite) Insert .all() does not return an array #5872 (#5946)Gravatar Hugo Galan 2-7/+11
2023-10-16Fix formattingGravatar Ashcon Partovi 2-5/+4
2023-10-16Fix `Response.statusText` (#6151)Gravatar Chris Toshok 10-238/+269
2023-10-16fix-subprocess-argument-missing (#6407)Gravatar Nicolae-Rares Ailincai 4-2/+40
2023-10-16Add type parameter to `expect` (#6128)Gravatar Voldemat 1-3/+3
2023-10-16fix(node:worker_threads): ensure threadId property is exposed on worker_threa...Gravatar Jérôme Benoit 6-15/+75
2023-10-16Fix use before define bug in sqliteGravatar Ashcon Partovi 2-5/+5
2023-10-16fix(jest): fix toStrictEqual on same URLs (#6528)Gravatar João Alisson 2-13/+16
2023-10-16Fix `toHaveBeenCalled` having wrong error signatureGravatar Ashcon Partovi 1-2/+2
2023-10-16Fix formattingGravatar Ashcon Partovi 1-2/+1
2023-10-16Add `reusePort` to `Bun.serve` typesGravatar Ashcon Partovi 1-0/+9
2023-10-16Fix `request.url` having incorrect portGravatar Ashcon Partovi 4-1/+92
2023-10-16Remove uWebSockets header from Bun.serve responsesGravatar Ashcon Partovi 1-6/+6
2023-10-16Rename some testsGravatar Ashcon Partovi 3-0/+0
2023-10-16Fix #6467Gravatar Ashcon Partovi 2-3/+10
2023-10-16Update InternalModuleRegistryConstants.hGravatar Dylan Conway 1-3/+3
2023-10-16Development -> Contributing (#6538)Gravatar Colin McDonnell 2-1/+1
2023-10-14fix(net/tls) fix pg hang on end + hanging on query (#6487)Gravatar Ciro Spaciari 3-8/+36
2023-10-13fix installing dependencies that match workspace versions (#6494)Gravatar Dylan Conway 4-2/+64
2023-10-13fix lockfile struct padding (#6495)Gravatar Dylan Conway 3-3/+18