Merge pull request #297 from AtkinsSJ/test-minimum-version

Make tests work in Node 16.x
This commit is contained in:
Eric Dubé 2024-04-18 14:41:20 -04:00 committed by GitHub
commit 4931ad3960
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 3 deletions

View File

@ -16,7 +16,7 @@ jobs:
strategy: strategy:
matrix: matrix:
node-version: [20.x, 21.x] node-version: [16.x, 18.x, 20.x, 21.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/ # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps: steps:

View File

@ -19,8 +19,9 @@
import { Context } from "contextlink"; import { Context } from "contextlink";
import { SyncLinesReader } from '../../src/ansi-shell/ioutil/SyncLinesReader.js'; import { SyncLinesReader } from '../../src/ansi-shell/ioutil/SyncLinesReader.js';
import { CommandStdinDecorator } from '../../src/ansi-shell/pipeline/iowrappers.js'; import { CommandStdinDecorator } from '../../src/ansi-shell/pipeline/iowrappers.js';
import { ReadableStream, WritableStream } from 'stream/web'
export class WritableStringStream extends WritableStream { class WritableStringStream extends WritableStream {
constructor() { constructor() {
super({ super({
write: (chunk) => { write: (chunk) => {
@ -42,8 +43,23 @@ export class WritableStringStream extends WritableStream {
// TODO: Flesh this out as needed. // TODO: Flesh this out as needed.
export const MakeTestContext = (command, { positionals = [], values = {}, stdinInputs = [], env = {} }) => { export const MakeTestContext = (command, { positionals = [], values = {}, stdinInputs = [], env = {} }) => {
// This is a replacement to ReadableStream.from() in earlier Node versions
// Sourece: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream#convert_an_iterator_or_async_iterator_to_a_stream
function iteratorToStream(iterator) {
return new ReadableStream({
async pull(controller) {
const { value, done } = await iterator.next();
let in_ = ReadableStream.from(stdinInputs).getReader(); if (done) {
controller.close();
} else {
controller.enqueue(value);
}
},
});
}
let in_ = iteratorToStream(stdinInputs.values()).getReader();
if (command.input?.syncLines) { if (command.input?.syncLines) {
in_ = new SyncLinesReader({ delegate: in_ }); in_ = new SyncLinesReader({ delegate: in_ });
} }