@@ -7,7 +7,7 @@ import assert from 'assert'
77import * as vscode from 'vscode'
88import * as sinon from 'sinon'
99import * as crossFile from 'aws-core-vscode/codewhisperer'
10- import { createMockTextEditor } from 'aws-core-vscode/test'
10+ import { aStringWithLineCount , createMockTextEditor } from 'aws-core-vscode/test'
1111import { crossFileContextConfig } from 'aws-core-vscode/codewhisperer'
1212import {
1313 assertTabCount ,
@@ -35,18 +35,18 @@ describe('crossFileContextUtil', function () {
3535 tempFolder = ( await createTestWorkspaceFolder ( ) ) . uri . fsPath
3636 } )
3737
38- it ( 'should fetch 3 chunks and each chunk should contains 10 lines' , async function ( ) {
39- await toTextEditor ( sampleFileOf60Lines , 'CrossFile.java' , tempFolder , { preview : false } )
38+ it ( 'should fetch 3 chunks and each chunk should contains 50 lines' , async function ( ) {
39+ await toTextEditor ( aStringWithLineCount ( 200 ) , 'CrossFile.java' , tempFolder , { preview : false } )
4040 const myCurrentEditor = await toTextEditor ( '' , 'TargetFile.java' , tempFolder , {
4141 preview : false ,
4242 } )
4343 const actual = await crossFile . fetchSupplementalContextForSrc ( myCurrentEditor , fakeCancellationToken )
4444 assert . ok ( actual )
4545 assert . ok ( actual . supplementalContextItems . length === 3 )
4646
47- assert . strictEqual ( actual . supplementalContextItems [ 0 ] . content . split ( '\n' ) . length , 10 )
48- assert . strictEqual ( actual . supplementalContextItems [ 1 ] . content . split ( '\n' ) . length , 10 )
49- assert . strictEqual ( actual . supplementalContextItems [ 2 ] . content . split ( '\n' ) . length , 10 )
47+ assert . strictEqual ( actual . supplementalContextItems [ 0 ] . content . split ( '\n' ) . length , 50 )
48+ assert . strictEqual ( actual . supplementalContextItems [ 1 ] . content . split ( '\n' ) . length , 50 )
49+ assert . strictEqual ( actual . supplementalContextItems [ 2 ] . content . split ( '\n' ) . length , 50 )
5050 } )
5151 } )
5252
@@ -250,73 +250,59 @@ describe('crossFileContextUtil', function () {
250250 assert . strictEqual ( chunks [ 1 ] . content , 'line_6\nline_7' )
251251 } )
252252
253- it ( 'codewhisperer crossfile config should use 10 lines' , async function ( ) {
253+ it ( 'codewhisperer crossfile config should use 50 lines' , async function ( ) {
254254 const filePath = path . join ( tempFolder , 'file.txt' )
255- await toFile ( sampleFileOf60Lines , filePath )
255+ await toFile ( aStringWithLineCount ( 210 ) , filePath )
256256
257257 const chunks = await crossFile . splitFileToChunks ( filePath , crossFileContextConfig . numberOfLinesEachChunk )
258- assert . strictEqual ( chunks . length , 6 )
258+
259+ // (210 / 50) + 1
260+ assert . strictEqual ( chunks . length , 5 )
261+ // line0 -> line49
262+ assert . strictEqual ( chunks [ 0 ] . content , aStringWithLineCount ( 50 , 0 ) )
263+ // line50 -> line99
264+ assert . strictEqual ( chunks [ 1 ] . content , aStringWithLineCount ( 50 , 50 ) )
265+ // line100 -> line149
266+ assert . strictEqual ( chunks [ 2 ] . content , aStringWithLineCount ( 50 , 100 ) )
267+ // line150 -> line199
268+ assert . strictEqual ( chunks [ 3 ] . content , aStringWithLineCount ( 50 , 150 ) )
269+ // line 200 -> line209
270+ assert . strictEqual ( chunks [ 4 ] . content , aStringWithLineCount ( 10 , 200 ) )
271+ } )
272+
273+ it ( 'linkChunks should add another chunk which will link to the first chunk and chunk.nextContent should reflect correct value' , async function ( ) {
274+ const filePath = path . join ( tempFolder , 'file.txt' )
275+ await toFile ( aStringWithLineCount ( 210 ) , filePath )
276+
277+ const chunks = await crossFile . splitFileToChunks ( filePath , crossFileContextConfig . numberOfLinesEachChunk )
278+ const linkedChunks = crossFile . linkChunks ( chunks )
279+
280+ // 210 / 50 + 2
281+ assert . strictEqual ( linkedChunks . length , 6 )
282+
283+ // 0th
284+ assert . strictEqual ( linkedChunks [ 0 ] . content , aStringWithLineCount ( 3 , 0 ) )
285+ assert . strictEqual ( linkedChunks [ 0 ] . nextContent , aStringWithLineCount ( 50 , 0 ) )
286+
287+ // 1st
288+ assert . strictEqual ( linkedChunks [ 1 ] . content , aStringWithLineCount ( 50 , 0 ) )
289+ assert . strictEqual ( linkedChunks [ 1 ] . nextContent , aStringWithLineCount ( 50 , 50 ) )
290+
291+ // 2nd
292+ assert . strictEqual ( linkedChunks [ 2 ] . content , aStringWithLineCount ( 50 , 50 ) )
293+ assert . strictEqual ( linkedChunks [ 2 ] . nextContent , aStringWithLineCount ( 50 , 100 ) )
294+
295+ // 3rd
296+ assert . strictEqual ( linkedChunks [ 3 ] . content , aStringWithLineCount ( 50 , 100 ) )
297+ assert . strictEqual ( linkedChunks [ 3 ] . nextContent , aStringWithLineCount ( 50 , 150 ) )
298+
299+ // 4th
300+ assert . strictEqual ( linkedChunks [ 4 ] . content , aStringWithLineCount ( 50 , 150 ) )
301+ assert . strictEqual ( linkedChunks [ 4 ] . nextContent , aStringWithLineCount ( 10 , 200 ) )
302+
303+ // 5th
304+ assert . strictEqual ( linkedChunks [ 5 ] . content , aStringWithLineCount ( 10 , 200 ) )
305+ assert . strictEqual ( linkedChunks [ 5 ] . nextContent , aStringWithLineCount ( 10 , 200 ) )
259306 } )
260307 } )
261308} )
262-
263- const sampleFileOf60Lines = `import java.util.List;
264- // we need this comment on purpose because chunk will be trimed right, adding this to avoid trimRight and make assertion easier
265- /**
266- *
267- *
268- *
269- *
270- *
271- **/
272- class Main {
273- public static void main(String[] args) {
274- Calculator calculator = new Calculator();
275- calculator.add(1, 2);
276- calculator.subtract(1, 2);
277- calculator.multiply(1, 2);
278- calculator.divide(1, 2);
279- calculator.remainder(1, 2);
280- }
281- }
282- //
283- class Calculator {
284- public Calculator() {
285- System.out.println("constructor");
286- }
287- //
288- public add(int num1, int num2) {
289- System.out.println("add");
290- return num1 + num2;
291- }
292- //
293- public subtract(int num1, int num2) {
294- System.out.println("subtract");
295- return num1 - num2;
296- }
297- //
298- public multiply(int num1, int num2) {
299- System.out.println("multiply");
300- return num1 * num2;
301- }
302- //
303- public divide(int num1, int num2) {
304- System.out.println("divide");
305- return num1 / num2;
306- }
307- //
308- public remainder(int num1, int num2) {
309- System.out.println("remainder");
310- return num1 % num2;
311- }
312- //
313- public power(int num1, int num2) {
314- System.out.println("power");
315- return (int) Math.pow(num1, num2);
316- }
317- //
318- public squareRoot(int num1) {
319- System.out.println("squareRoot");
320- return (int) Math.sqrt(num1);
321- }
322- }`
0 commit comments