1- import {
2- parse_multiple_files ,
3- parse_file_content_only ,
4- parse_response
5- } from './clipboard-parser'
1+ import { parse_response , FileItem } from './clipboard-parser'
62import * as fs from 'fs'
73import * as path from 'path'
4+ import { parse_file_content_only , parse_multiple_files } from './parsers'
85
96describe ( 'clipboard-parser' , ( ) => {
107 const load_test_case_file = ( test_case : string , filename : string ) : string => {
@@ -24,11 +21,11 @@ describe('clipboard-parser', () => {
2421 } )
2522
2623 expect ( result ) . toHaveLength ( 2 )
27- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.ts' )
24+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.ts' )
2825 expect ( result [ 0 ] . content ) . toBe (
2926 load_test_case_file ( test_case , '1-file.txt' )
3027 )
31- expect ( result [ 1 ] . file_path ) . toBe ( 'src/utils.py' )
28+ expect ( ( result [ 1 ] as FileItem ) . file_path ) . toBe ( 'src/utils.py' )
3229 expect ( result [ 1 ] . content ) . toBe (
3330 load_test_case_file ( test_case , '2-file.txt' )
3431 )
@@ -43,7 +40,7 @@ describe('clipboard-parser', () => {
4340 } )
4441
4542 expect ( result ) . toHaveLength ( 1 )
46- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.ts' )
43+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.ts' )
4744 expect ( result [ 0 ] . content ) . toBe (
4845 load_test_case_file ( test_case , '1-file.txt' )
4946 )
@@ -58,7 +55,7 @@ describe('clipboard-parser', () => {
5855 } )
5956
6057 expect ( result ) . toHaveLength ( 1 )
61- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.ts' )
58+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.ts' )
6259 expect ( result [ 0 ] . content ) . toBe (
6360 load_test_case_file ( test_case , '1-file.txt' )
6461 )
@@ -73,7 +70,7 @@ describe('clipboard-parser', () => {
7370 } )
7471
7572 expect ( result ) . toHaveLength ( 1 )
76- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.ts' )
73+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.ts' )
7774 expect ( result [ 0 ] . content ) . toBe (
7875 load_test_case_file ( test_case , '1-file.txt' )
7976 )
@@ -88,7 +85,7 @@ describe('clipboard-parser', () => {
8885 } )
8986
9087 expect ( result ) . toHaveLength ( 1 )
91- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.ts' )
88+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.ts' )
9289 expect ( result [ 0 ] . content ) . toBe (
9390 load_test_case_file ( test_case , '1-file.txt' )
9491 )
@@ -103,7 +100,7 @@ describe('clipboard-parser', () => {
103100 } )
104101
105102 expect ( result ) . toHaveLength ( 1 )
106- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.ts' )
103+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.ts' )
107104 expect ( result [ 0 ] . content ) . toBe (
108105 load_test_case_file ( test_case , '1-file.txt' )
109106 )
@@ -118,7 +115,7 @@ describe('clipboard-parser', () => {
118115 } )
119116
120117 expect ( result ) . toHaveLength ( 1 )
121- expect ( result [ 0 ] . file_path ) . toBe ( 'README.md' )
118+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'README.md' )
122119 expect ( result [ 0 ] . content ) . toBe (
123120 load_test_case_file ( test_case , '1-file.txt' )
124121 )
@@ -133,11 +130,11 @@ describe('clipboard-parser', () => {
133130 } )
134131
135132 expect ( result ) . toHaveLength ( 2 )
136- expect ( result [ 0 ] . file_path ) . toBe ( 'src/hello-world.html' )
133+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/hello-world.html' )
137134 expect ( result [ 0 ] . content ) . toBe (
138135 load_test_case_file ( test_case , '1-file.txt' )
139136 )
140- expect ( result [ 1 ] . file_path ) . toBe ( 'src/lorem.css' )
137+ expect ( ( result [ 1 ] as FileItem ) . file_path ) . toBe ( 'src/lorem.css' )
141138 expect ( result [ 1 ] . content ) . toBe (
142139 load_test_case_file ( test_case , '2-file.txt' )
143140 )
@@ -152,8 +149,8 @@ describe('clipboard-parser', () => {
152149 } )
153150
154151 expect ( result ) . toHaveLength ( 1 )
155- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.ts' )
156- expect ( result [ 0 ] . workspace_name ) . toBe ( 'frontend' )
152+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.ts' )
153+ expect ( ( result [ 0 ] as FileItem ) . workspace_name ) . toBe ( 'frontend' )
157154 expect ( result [ 0 ] . content ) . toBe (
158155 load_test_case_file ( test_case , '1-file.txt' )
159156 )
@@ -168,8 +165,8 @@ describe('clipboard-parser', () => {
168165 } )
169166
170167 expect ( result ) . toHaveLength ( 1 )
171- expect ( result [ 0 ] . file_path ) . toBe ( 'frontend/src/index.ts' )
172- expect ( result [ 0 ] . workspace_name ) . toBeUndefined ( )
168+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'frontend/src/index.ts' )
169+ expect ( ( result [ 0 ] as FileItem ) . workspace_name ) . toBeUndefined ( )
173170 } )
174171
175172 it ( 'merges content when the same file path appears in multiple code blocks' , ( ) => {
@@ -181,7 +178,7 @@ describe('clipboard-parser', () => {
181178 } )
182179
183180 expect ( result ) . toHaveLength ( 1 )
184- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.ts' )
181+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.ts' )
185182 expect ( result [ 0 ] . content ) . toBe (
186183 load_test_case_file ( test_case , '1-file.txt' )
187184 )
@@ -196,11 +193,11 @@ describe('clipboard-parser', () => {
196193 } )
197194
198195 expect ( result ) . toHaveLength ( 2 )
199- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.ts' )
196+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.ts' )
200197 expect ( result [ 0 ] . content ) . toBe (
201198 load_test_case_file ( test_case , '1-file.txt' )
202199 )
203- expect ( result [ 1 ] . file_path ) . toBe ( 'src/utils.py' )
200+ expect ( ( result [ 1 ] as FileItem ) . file_path ) . toBe ( 'src/utils.py' )
204201 expect ( result [ 1 ] . content ) . toBe (
205202 load_test_case_file ( test_case , '2-file.txt' )
206203 )
@@ -215,11 +212,11 @@ describe('clipboard-parser', () => {
215212 } )
216213
217214 expect ( result ) . toHaveLength ( 2 )
218- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.ts' )
215+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.ts' )
219216 expect ( result [ 0 ] . content ) . toBe (
220217 load_test_case_file ( test_case , '1-file.txt' )
221218 )
222- expect ( result [ 1 ] . file_path ) . toBe ( 'src/utils.py' )
219+ expect ( ( result [ 1 ] as FileItem ) . file_path ) . toBe ( 'src/utils.py' )
223220 expect ( result [ 1 ] . content ) . toBe (
224221 load_test_case_file ( test_case , '2-file.txt' )
225222 )
@@ -234,7 +231,7 @@ describe('clipboard-parser', () => {
234231 } )
235232
236233 expect ( result ) . toHaveLength ( 1 )
237- expect ( result [ 0 ] . file_path ) . toBe ( 'src/utils.py' )
234+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/utils.py' )
238235 expect ( result [ 0 ] . content ) . toBe (
239236 load_test_case_file ( test_case , '1-file.txt' )
240237 )
@@ -249,7 +246,7 @@ describe('clipboard-parser', () => {
249246 } )
250247
251248 expect ( result ) . toHaveLength ( 1 )
252- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.js' )
249+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.js' )
253250 expect ( result [ 0 ] . content ) . toBe (
254251 load_test_case_file ( test_case , '1-file.txt' )
255252 )
@@ -264,7 +261,7 @@ describe('clipboard-parser', () => {
264261 } )
265262
266263 expect ( result ) . toHaveLength ( 1 )
267- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.js' )
264+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.js' )
268265 expect ( result [ 0 ] . content ) . toBe (
269266 load_test_case_file ( test_case , '1-file.txt' )
270267 )
@@ -279,7 +276,7 @@ describe('clipboard-parser', () => {
279276 } )
280277
281278 expect ( result ) . toHaveLength ( 1 )
282- expect ( result [ 0 ] . file_path ) . toBe ( 'src/test.md' )
279+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/test.md' )
283280 expect ( result [ 0 ] . content ) . toBe (
284281 load_test_case_file ( test_case , '1-file.txt' )
285282 )
@@ -294,7 +291,7 @@ describe('clipboard-parser', () => {
294291 } )
295292
296293 expect ( result ) . toHaveLength ( 1 )
297- expect ( result [ 0 ] . file_path ) . toBe ( 'src/lorem.ts' )
294+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/lorem.ts' )
298295 expect ( result [ 0 ] . content ) . toBe (
299296 load_test_case_file ( test_case , '1-file.txt' )
300297 )
@@ -309,7 +306,7 @@ describe('clipboard-parser', () => {
309306 } )
310307
311308 expect ( result ) . toHaveLength ( 1 )
312- expect ( result [ 0 ] . file_path ) . toBe ( 'src/main.js' )
309+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/main.js' )
313310 expect ( result [ 0 ] . content ) . toBe (
314311 load_test_case_file ( test_case , '1-file.txt' )
315312 )
@@ -324,11 +321,11 @@ describe('clipboard-parser', () => {
324321 } )
325322
326323 expect ( result ) . toHaveLength ( 2 )
327- expect ( result [ 0 ] . file_path ) . toBe ( 'src/lorem.ts' )
324+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/lorem.ts' )
328325 expect ( result [ 0 ] . content ) . toBe (
329326 load_test_case_file ( test_case , '1-file.txt' )
330327 )
331- expect ( result [ 1 ] . file_path ) . toBe ( 'src/ipsum.ts' )
328+ expect ( ( result [ 1 ] as FileItem ) . file_path ) . toBe ( 'src/ipsum.ts' )
332329 expect ( result [ 1 ] . content ) . toBe (
333330 load_test_case_file ( test_case , '2-file.txt' )
334331 )
@@ -343,11 +340,11 @@ describe('clipboard-parser', () => {
343340 } )
344341
345342 expect ( result ) . toHaveLength ( 2 )
346- expect ( result [ 0 ] . file_path ) . toBe ( 'src/lorem.ts' )
343+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/lorem.ts' )
347344 expect ( result [ 0 ] . content ) . toBe (
348345 load_test_case_file ( test_case , '1-file.txt' )
349346 )
350- expect ( result [ 1 ] . file_path ) . toBe ( 'src/ipsum.ts' )
347+ expect ( ( result [ 1 ] as FileItem ) . file_path ) . toBe ( 'src/ipsum.ts' )
351348 expect ( result [ 1 ] . content ) . toBe (
352349 load_test_case_file ( test_case , '2-file.txt' )
353350 )
@@ -362,7 +359,7 @@ describe('clipboard-parser', () => {
362359 } )
363360
364361 expect ( result ) . toHaveLength ( 1 )
365- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.php' )
362+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.php' )
366363 expect ( result [ 0 ] . content ) . toBe (
367364 load_test_case_file ( test_case , '1-file.txt' )
368365 )
@@ -377,7 +374,7 @@ describe('clipboard-parser', () => {
377374 } )
378375
379376 expect ( result ) . toHaveLength ( 1 )
380- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.ts' )
377+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.ts' )
381378 expect ( result [ 0 ] . content ) . toBe (
382379 load_test_case_file ( test_case , '1-file.txt' )
383380 )
@@ -392,7 +389,7 @@ describe('clipboard-parser', () => {
392389 } )
393390
394391 expect ( result ) . toHaveLength ( 1 )
395- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.js' )
392+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.js' )
396393 expect ( result [ 0 ] . content ) . toBe (
397394 load_test_case_file ( test_case , '1-file.txt' )
398395 )
@@ -407,7 +404,7 @@ describe('clipboard-parser', () => {
407404 } )
408405
409406 expect ( result ) . toHaveLength ( 1 )
410- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.js' )
407+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.js' )
411408 expect ( result [ 0 ] . content ) . toBe (
412409 load_test_case_file ( test_case , '1-file.txt' )
413410 )
@@ -422,7 +419,7 @@ describe('clipboard-parser', () => {
422419 } )
423420
424421 expect ( result ) . toHaveLength ( 1 )
425- expect ( result [ 0 ] . file_path ) . toBe ( 'src/hello-world.ts' )
422+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/hello-world.ts' )
426423 expect ( result [ 0 ] . content ) . toBe (
427424 load_test_case_file ( test_case , '1-file.txt' )
428425 )
@@ -437,7 +434,7 @@ describe('clipboard-parser', () => {
437434 } )
438435
439436 expect ( result ) . toHaveLength ( 1 )
440- expect ( result [ 0 ] . file_path ) . toBe ( 'src/index.js' )
437+ expect ( ( result [ 0 ] as FileItem ) . file_path ) . toBe ( 'src/index.js' )
441438 expect ( result [ 0 ] . content ) . toBe (
442439 load_test_case_file ( test_case , '1-file.txt' )
443440 )
@@ -972,17 +969,90 @@ describe('clipboard-parser', () => {
972969 is_single_root_folder_workspace : true
973970 } )
974971
975- expect ( result ) . toHaveLength ( 2 )
972+ expect ( result ) . toHaveLength ( 3 )
976973 expect ( result [ 0 ] ) . toMatchObject ( {
974+ type : 'text' ,
975+ content : load_test_case_file ( test_case , '1-text.txt' )
976+ } )
977+ expect ( result [ 1 ] ) . toMatchObject ( {
977978 type : 'diff' ,
978979 file_path : 'src/lorem.html' ,
979- content : load_test_case_file ( test_case , '1-file.txt' )
980+ content : load_test_case_file ( test_case , '2-file.txt' )
981+ } )
982+ expect ( result [ 2 ] ) . toMatchObject ( {
983+ type : 'diff' ,
984+ file_path : 'src/ipsum.ts' ,
985+ content : load_test_case_file ( test_case , '3-file.txt' )
986+ } )
987+ } )
988+
989+ it ( 'parses multiple files with text between the markdown code blocks' , ( ) => {
990+ const test_case = 'text-between'
991+ const text = load_test_case_file ( test_case , `${ test_case } .txt` )
992+ const result = parse_response ( {
993+ response : text ,
994+ is_single_root_folder_workspace : true
995+ } )
996+
997+ expect ( result ) . toHaveLength ( 5 )
998+ expect ( result [ 0 ] ) . toMatchObject ( {
999+ type : 'text' ,
1000+ content : load_test_case_file ( test_case , '1-text.txt' )
9801001 } )
9811002 expect ( result [ 1 ] ) . toMatchObject ( {
1003+ type : 'diff' ,
1004+ file_path : 'src/lorem.ts' ,
1005+ content : load_test_case_file ( test_case , '2-file.txt' )
1006+ } )
1007+ expect ( result [ 2 ] ) . toMatchObject ( {
1008+ type : 'text' ,
1009+ content : load_test_case_file ( test_case , '3-text.txt' )
1010+ } )
1011+ expect ( result [ 3 ] ) . toMatchObject ( {
9821012 type : 'diff' ,
9831013 file_path : 'src/ipsum.ts' ,
1014+ content : load_test_case_file ( test_case , '4-file.txt' )
1015+ } )
1016+ expect ( result [ 4 ] ) . toMatchObject ( {
1017+ type : 'text' ,
1018+ content : load_test_case_file ( test_case , '5-text.txt' )
1019+ } )
1020+ } )
1021+
1022+ it ( 'parses multiple diffs with text between the markdown code blocks' , ( ) => {
1023+ const test_case = 'diff-multiple-files-text-between'
1024+ const text = load_test_case_file (
1025+ test_case ,
1026+ 'diff-multiple-files-text-between.txt'
1027+ )
1028+ const result = parse_response ( {
1029+ response : text ,
1030+ is_single_root_folder_workspace : true
1031+ } )
1032+
1033+ expect ( result ) . toHaveLength ( 5 )
1034+ expect ( result [ 0 ] ) . toMatchObject ( {
1035+ type : 'text' ,
1036+ content : load_test_case_file ( test_case , '1-text.txt' )
1037+ } )
1038+ expect ( result [ 1 ] ) . toMatchObject ( {
1039+ type : 'diff' ,
1040+ file_path : 'src/lorem.ts' ,
9841041 content : load_test_case_file ( test_case , '2-file.txt' )
9851042 } )
1043+ expect ( result [ 2 ] ) . toMatchObject ( {
1044+ type : 'text' ,
1045+ content : load_test_case_file ( test_case , '3-text.txt' )
1046+ } )
1047+ expect ( result [ 3 ] ) . toMatchObject ( {
1048+ type : 'diff' ,
1049+ file_path : 'src/ipsum.ts' ,
1050+ content : load_test_case_file ( test_case , '4-file.txt' )
1051+ } )
1052+ expect ( result [ 4 ] ) . toMatchObject ( {
1053+ type : 'text' ,
1054+ content : load_test_case_file ( test_case , '5-text.txt' )
1055+ } )
9861056 } )
9871057
9881058 it ( 'merges a new file and a diff for the same file path into one patch' , ( ) => {
0 commit comments