Path: blob/main/extensions/copilot/src/extension/prompt/node/test/streamingEdits.spec.ts
13405 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { assert, suite, test } from 'vitest';6import { AsyncIterableObject, AsyncIterableSource } from '../../../../util/vs/base/common/async';7import { LineFilters, streamLines } from '../streamingEdits';89suite('streamLinesInCodeBlock', function () {10test('no code', async function () {1112const source = new AsyncIterableSource<string>();13source.emitOne('Hello');14source.emitOne('World');15source.resolve();16const stream = streamLinesInCodeBlock(source.asyncIterable);17const actual = await AsyncIterableObject.toPromise(stream);18assert.deepStrictEqual(actual, []);19});2021test('emits no lines outside code block', async function () {2223const source = new AsyncIterableSource<string>();24const input = [25'Hello World',26'```py',27'# Hello World',28'foo',29'```',30'END',31];32source.emitOne(input.join('\n'));33source.resolve();3435const stream = streamLinesInCodeBlock(source.asyncIterable);36const actual = await AsyncIterableObject.toPromise(stream);37assert.deepStrictEqual(actual, input.slice(2, 4));38});3940test.skip('emits no lines outside code block, N blocks', async function () {4142const source = new AsyncIterableSource<string>();43const input = [44'Hello World',45'```py',46'# Hello World',47'foo',48'```',49'MID',50'```ts',51'type Foo = number',52'console.log()',53'```',54];55source.emitOne(input.join('\n'));56source.resolve();5758const stream = streamLinesInCodeBlock(source.asyncIterable);59const actual = await AsyncIterableObject.toPromise(stream);60assert.deepStrictEqual(actual, [input[2], input[3], input[7], input[8]]);61});62});6364/**65* Extract just the lines that are inside a code block.66*/67function streamLinesInCodeBlock(source: AsyncIterable<string>): AsyncIterableObject<string> {68return (69streamLines(source)70.filter(LineFilters.createCodeBlockFilter())71.map(line => line.value)72);73}747576