Files
bun.sh/test/js/node/readline/readline_promises.node.test.ts
Jarred Sumner 1bd5b245b8 Align process.nextTick execution order with Node (#4409)
* Align `process.nextTick` execution order with Node

* some tests

* formatting

* fixups

* fix the test failures

* simplify the logic here

* push it up

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Co-authored-by: dave caruso <me@paperdave.net>
2023-09-05 17:52:57 -07:00

50 lines
1.4 KiB
TypeScript

import readlinePromises from "node:readline/promises";
import { EventEmitter } from "node:events";
import { createTest } from "node-harness";
const { describe, it, expect, createDoneDotAll, createCallCheckCtx, assert } = createTest(import.meta.path);
// ----------------------------------------------------------------------------
// Helpers
// ----------------------------------------------------------------------------
class FakeInput extends EventEmitter {
output = "";
resume() {}
pause() {}
write(data: any) {
this.output += data;
}
end() {}
reset() {
this.output = "";
}
}
// ----------------------------------------------------------------------------
// Tests
// ----------------------------------------------------------------------------
describe("readline/promises.createInterface()", () => {
it("should throw an error when failed completion", done => {
const createDone = createDoneDotAll(done);
const { mustCall, mustNotCall } = createCallCheckCtx(createDone());
const fi = new FakeInput();
// @ts-ignore
const rli = new readlinePromises.Interface({
input: fi,
output: fi,
terminal: true,
completer: mustCall(() => Promise.reject(new Error("message"))),
});
rli.on("line", mustNotCall());
fi.emit("data", "\t");
queueMicrotask(() => {
expect(fi.output).toMatch(/^Tab completion error/);
rli.close();
done();
});
});
});