@@ -257,6 +257,58 @@ describe('files-to-prompt.ts', () => {
257
257
expect ( filePathsFromStdin ) . toEqual ( [ 'file1.txt' , 'file2.txt' ] ) ;
258
258
} ) ;
259
259
260
+ test ( 'should parse file paths with one file path per line' , ( ) => {
261
+ const stdinData = `file1.txt\nfile2.txt\nfile3.txt` ;
262
+ const filePathsFromStdin = parseFilePathsFromStdin ( stdinData ) ;
263
+ expect ( filePathsFromStdin ) . toEqual ( [ 'file1.txt' , 'file2.txt' , 'file3.txt' ] ) ;
264
+ } ) ;
265
+
266
+ test ( 'should handle mixed input formats' , ( ) => {
267
+ const stdinData = `file1.txt:File 1 contents.\nfile2.txt\nfile3.txt:File 3 contents.` ;
268
+ const filePathsFromStdin = parseFilePathsFromStdin ( stdinData ) ;
269
+ expect ( filePathsFromStdin ) . toEqual ( [ 'file1.txt' , 'file2.txt' , 'file3.txt' ] ) ;
270
+ } ) ;
271
+
272
+ test ( 'should handle empty lines in stdin data' , ( ) => {
273
+ const stdinData = `file1.txt:File 1 contents.\n\nfile2.txt:File 2 contents.\n` ;
274
+ const filePathsFromStdin = parseFilePathsFromStdin ( stdinData ) ;
275
+ expect ( filePathsFromStdin ) . toEqual ( [ 'file1.txt' , 'file2.txt' ] ) ;
276
+ } ) ;
277
+
278
+ test ( 'should handle binary data in stdin' , ( ) => {
279
+ const binaryData = Buffer . from ( [ 0x80 , 0x81 , 0x82 , 0x83 , 0x84 , 0x85 ] ) ;
280
+ const stdinData = `file1.txt:File 1 contents.\n${ binaryData . toString ( 'utf8' ) } \nfile2.txt:File 2 contents.` ;
281
+ const filePathsFromStdin = parseFilePathsFromStdin ( stdinData ) ;
282
+ expect ( filePathsFromStdin ) . toEqual ( [ 'file1.txt' , 'file2.txt' ] ) ;
283
+ } ) ;
284
+
285
+ test ( 'should handle common text/code files in stdin' , ( ) => {
286
+ const textData = `console.log('Hello, world\!');` ;
287
+ const stdinData = `file1.txt:File 1 contents.\n${ textData } \nfile2.txt:File 2 contents.` ;
288
+ const filePathsFromStdin = parseFilePathsFromStdin ( stdinData ) ;
289
+ expect ( filePathsFromStdin ) . toEqual ( [ 'file1.txt' , textData , 'file2.txt' ] ) ;
290
+ } ) ;
291
+
292
+ test ( 'should handle long file paths in stdin' , ( ) => {
293
+ const longFilePath = 'a' . repeat ( 1025 ) ;
294
+ const stdinData = `file1.txt:File 1 contents.\n${ longFilePath } \nfile2.txt:File 2 contents.` ;
295
+ const filePathsFromStdin = parseFilePathsFromStdin ( stdinData ) ;
296
+ expect ( filePathsFromStdin ) . toEqual ( [ 'file1.txt' , 'file2.txt' ] ) ;
297
+ } ) ;
298
+
299
+ test ( 'should ignore file paths with the null character' , ( ) => {
300
+ const invalidFilePath = 'invalid_file\0.txt' ;
301
+ const stdinData = `file1.txt:File 1 contents.\n${ invalidFilePath } \nfile2.txt:File 2 contents.` ;
302
+ const filePathsFromStdin = parseFilePathsFromStdin ( stdinData ) ;
303
+ expect ( filePathsFromStdin ) . toEqual ( [ 'file1.txt' , 'file2.txt' ] ) ;
304
+ } ) ;
305
+
306
+ test ( 'should ignore file paths with control characters' , ( ) => {
307
+ const stdinData = `file1.txt:File 1 contents.\nfile2.txt\x07.txt:File 2 contents.\nfile3.txt:File 3 contents.` ;
308
+ const filePathsFromStdin = parseFilePathsFromStdin ( stdinData ) ;
309
+ expect ( filePathsFromStdin ) . toEqual ( [ 'file1.txt' , 'file3.txt' ] ) ;
310
+ } ) ;
311
+
260
312
test ( 'should output version string when --version is passed' , async ( ) => {
261
313
await main ( [ '--version' ] ) ;
262
314
expect ( stdoutOutput ) . toContain ( `files-to-prompt.ts version` ) ;
0 commit comments