mirror of
https://github.com/oven-sh/bun
synced 2026-02-11 11:29:02 +00:00
* feat(readline): WIP: add readline
* test(helpers): add deepStrictEqual helper
* feat(readline): add readline & readline/promises to loader
* fix(node:events): emit newListener on new listener added
* feat(readline): finish readline cb interface, add tests
* fix(stream): fix Transform.end()
* fix(node-test-helpers): correct throws behavior, improve how all asserts work
* feat(readline/promises): add readline/promises
* feat(assert): add assert.match
* test(readline): uncomment more tests
* fix(readline): MaxCeil -> MathCeil 🤦
* fix(readline): export promises from node:readline
* fix(readline): temp fix for circular dependency
* cleanup(readline): remove console.log
* fix(readline): change true -> 0 for CommonJS export
* perf(readline): micro-optimizations with some getters
* perf(readline): lazy load isWritable
* cleanup(readline): rename debug flag env var to BUN_JS_DEBUG
56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import { describe, it } from "bun:test";
|
|
import readlinePromises from "node:readline/promises";
|
|
import { EventEmitter } from "node:events";
|
|
import {
|
|
createDoneDotAll,
|
|
createCallCheckCtx,
|
|
assert,
|
|
} from "./node-test-helpers";
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Helpers
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class FakeInput extends EventEmitter {
|
|
output = "";
|
|
resume() {}
|
|
pause() {}
|
|
write(data) {
|
|
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();
|
|
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");
|
|
const outCheckDone = createDone();
|
|
process.nextTick(() => {
|
|
console.log("output", fi.output);
|
|
assert.match(fi.output, /^Tab completion error/);
|
|
fi.reset();
|
|
outCheckDone();
|
|
});
|
|
rli.close();
|
|
});
|
|
});
|