Skip to content

Commit aeb0a9f

Browse files
committed
tst
1 parent 7694cf5 commit aeb0a9f

File tree

3 files changed

+66
-71
lines changed

3 files changed

+66
-71
lines changed

packages/amazonq/test/unit/codewhisperer/util/crossFileContextUtil.test.ts

Lines changed: 56 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import assert from 'assert'
77
import * as vscode from 'vscode'
88
import * as sinon from 'sinon'
99
import * as crossFile from 'aws-core-vscode/codewhisperer'
10-
import { createMockTextEditor } from 'aws-core-vscode/test'
10+
import { aStringWithLineCount, createMockTextEditor } from 'aws-core-vscode/test'
1111
import { CodeWhispererUserGroupSettings, UserGroup, crossFileContextConfig } from 'aws-core-vscode/codewhisperer'
1212
import {
1313
assertTabCount,
@@ -36,19 +36,19 @@ describe('crossFileContextUtil', function () {
3636
tempFolder = (await createTestWorkspaceFolder()).uri.fsPath
3737
})
3838

39-
describe('should fetch 3 chunks and each chunk should contains 10 lines', function () {
39+
describe('should fetch 3 chunks and each chunk should contains 50 lines', function () {
4040
async function assertCorrectCodeChunk() {
41-
await toTextEditor(sampleFileOf60Lines, 'CrossFile.java', tempFolder, { preview: false })
41+
await toTextEditor(aStringWithLineCount(200), 'CrossFile.java', tempFolder, { preview: false })
4242
const myCurrentEditor = await toTextEditor('', 'TargetFile.java', tempFolder, {
4343
preview: false,
4444
})
4545
const actual = await crossFile.fetchSupplementalContextForSrc(myCurrentEditor, fakeCancellationToken)
4646
assert.ok(actual)
4747
assert.ok(actual.supplementalContextItems.length === 3)
4848

49-
assert.strictEqual(actual.supplementalContextItems[0].content.split('\n').length, 10)
50-
assert.strictEqual(actual.supplementalContextItems[1].content.split('\n').length, 10)
51-
assert.strictEqual(actual.supplementalContextItems[2].content.split('\n').length, 10)
49+
assert.strictEqual(actual.supplementalContextItems[0].content.split('\n').length, 50)
50+
assert.strictEqual(actual.supplementalContextItems[1].content.split('\n').length, 50)
51+
assert.strictEqual(actual.supplementalContextItems[2].content.split('\n').length, 50)
5252
}
5353

5454
it('control group', async function () {
@@ -265,73 +265,59 @@ describe('crossFileContextUtil', function () {
265265
assert.strictEqual(chunks[1].content, 'line_6\nline_7')
266266
})
267267

268-
it('codewhisperer crossfile config should use 10 lines', async function () {
268+
it('codewhisperer crossfile config should use 50 lines', async function () {
269269
const filePath = path.join(tempFolder, 'file.txt')
270-
await toFile(sampleFileOf60Lines, filePath)
270+
await toFile(aStringWithLineCount(210), filePath)
271271

272272
const chunks = await crossFile.splitFileToChunks(filePath, crossFileContextConfig.numberOfLinesEachChunk)
273-
assert.strictEqual(chunks.length, 6)
273+
274+
// (210 / 50) + 1
275+
assert.strictEqual(chunks.length, 5)
276+
// line0 -> line49
277+
assert.strictEqual(chunks[0].content, aStringWithLineCount(50, 0))
278+
// line50 -> line99
279+
assert.strictEqual(chunks[1].content, aStringWithLineCount(50, 50))
280+
// line100 -> line149
281+
assert.strictEqual(chunks[2].content, aStringWithLineCount(50, 100))
282+
// line150 -> line199
283+
assert.strictEqual(chunks[3].content, aStringWithLineCount(50, 150))
284+
// line 200 -> line209
285+
assert.strictEqual(chunks[4].content, aStringWithLineCount(10, 200))
286+
})
287+
288+
it('link', async function () {
289+
const filePath = path.join(tempFolder, 'file.txt')
290+
await toFile(aStringWithLineCount(210), filePath)
291+
292+
const chunks = await crossFile.splitFileToChunks(filePath, crossFileContextConfig.numberOfLinesEachChunk)
293+
const linkedChunks = await crossFile.linkChunks(chunks)
294+
295+
// 210 / 50 + 2
296+
assert.strictEqual(linkedChunks.length, 6)
297+
298+
// 0th
299+
assert.strictEqual(linkedChunks[0].content, aStringWithLineCount(3, 0))
300+
assert.strictEqual(linkedChunks[0].nextContent, aStringWithLineCount(50, 0))
301+
302+
// 1st
303+
assert.strictEqual(linkedChunks[1].content, aStringWithLineCount(50, 0))
304+
assert.strictEqual(linkedChunks[1].nextContent, aStringWithLineCount(50, 50))
305+
306+
// 2nd
307+
assert.strictEqual(linkedChunks[2].content, aStringWithLineCount(50, 50))
308+
assert.strictEqual(linkedChunks[2].nextContent, aStringWithLineCount(50, 100))
309+
310+
// 3rd
311+
assert.strictEqual(linkedChunks[3].content, aStringWithLineCount(50, 100))
312+
assert.strictEqual(linkedChunks[3].nextContent, aStringWithLineCount(50, 150))
313+
314+
// 4th
315+
assert.strictEqual(linkedChunks[4].content, aStringWithLineCount(50, 150))
316+
assert.strictEqual(linkedChunks[4].nextContent, aStringWithLineCount(10, 200))
317+
318+
// 5th
319+
assert.strictEqual(linkedChunks[5].content, aStringWithLineCount(10, 200))
320+
assert.strictEqual(linkedChunks[5].nextContent, aStringWithLineCount(10, 200))
274321
})
275322
})
276323
})
277-
278-
const sampleFileOf60Lines = `import java.util.List;
279-
// we need this comment on purpose because chunk will be trimed right, adding this to avoid trimRight and make assertion easier
280-
/**
281-
*
282-
*
283-
*
284-
*
285-
*
286-
**/
287-
class Main {
288-
public static void main(String[] args) {
289-
Calculator calculator = new Calculator();
290-
calculator.add(1, 2);
291-
calculator.subtract(1, 2);
292-
calculator.multiply(1, 2);
293-
calculator.divide(1, 2);
294-
calculator.remainder(1, 2);
295-
}
296-
}
297-
//
298-
class Calculator {
299-
public Calculator() {
300-
System.out.println("constructor");
301-
}
302-
//
303-
public add(int num1, int num2) {
304-
System.out.println("add");
305-
return num1 + num2;
306-
}
307-
//
308-
public subtract(int num1, int num2) {
309-
System.out.println("subtract");
310-
return num1 - num2;
311-
}
312-
//
313-
public multiply(int num1, int num2) {
314-
System.out.println("multiply");
315-
return num1 * num2;
316-
}
317-
//
318-
public divide(int num1, int num2) {
319-
System.out.println("divide");
320-
return num1 / num2;
321-
}
322-
//
323-
public remainder(int num1, int num2) {
324-
System.out.println("remainder");
325-
return num1 % num2;
326-
}
327-
//
328-
public power(int num1, int num2) {
329-
System.out.println("power");
330-
return (int) Math.pow(num1, num2);
331-
}
332-
//
333-
public squareRoot(int num1) {
334-
System.out.println("squareRoot");
335-
return (int) Math.sqrt(num1);
336-
}
337-
}`

packages/core/src/codewhisperer/util/supplementalContext/crossFileContextUtil.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ function shouldFetchCrossFileContext(
171171
* when a given chunk context passes the match in BM25.
172172
* Special handling is needed for last(its next points to its own) and first chunk
173173
*/
174-
function linkChunks(chunks: Chunk[]) {
174+
export function linkChunks(chunks: Chunk[]) {
175175
const updatedChunks: Chunk[] = []
176176

177177
// This additional chunk is needed to create a next pointer to chunk 0.

packages/core/src/test/codewhisperer/testUtil.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,3 +207,12 @@ export function createMockDirentFile(fileName: string): fs.Dirent {
207207
dirent.name = fileName
208208
return dirent
209209
}
210+
211+
export function aStringWithLineCount(lineCount: number, start: number = 0): string {
212+
let s = ''
213+
for (let i = start; i < start + lineCount; i++) {
214+
s += `line${i}\n`
215+
}
216+
217+
return s.trimEnd()
218+
}

0 commit comments

Comments
 (0)