@@ -51,6 +51,31 @@ describe('parse module', () => {
5151 expect ( mockQuery . captures ) . toHaveBeenCalledWith ( mockTree . rootNode )
5252 } )
5353
54+ it ( 'should skip parsing source larger than the byte limit' , ( ) => {
55+ const mockParser = createMockTreeSitterParser ( )
56+ const mockLanguageConfig : LanguageConfig = {
57+ extensions : [ '.ts' ] ,
58+ wasmFile : 'tree-sitter-typescript.wasm' ,
59+ queryText : 'mock query' ,
60+ parser : mockParser ,
61+ query : createMockTreeSitterQuery ( ) ,
62+ }
63+
64+ const result = parseTokens (
65+ 'test.ts' ,
66+ mockLanguageConfig ,
67+ ( ) => 'x' . repeat ( 20 ) ,
68+ { maxBytes : 10 } ,
69+ )
70+
71+ expect ( result ) . toEqual ( {
72+ numLines : 0 ,
73+ identifiers : [ ] ,
74+ calls : [ ] ,
75+ } )
76+ expect ( mockParser . parse ) . not . toHaveBeenCalled ( )
77+ } )
78+
5479 it ( 'should handle null file content gracefully' , ( ) => {
5580 const mockLanguageConfig : LanguageConfig = {
5681 extensions : [ '.ts' ] ,
@@ -594,5 +619,22 @@ console.log('Total:', formatCurrency(total));
594619 expect ( typeof result . tokenScores ) . toBe ( 'object' )
595620 expect ( typeof result . tokenCallers ) . toBe ( 'object' )
596621 } )
622+
623+ it ( 'should continue scoring when a provided reader rejects for one file' , async ( ) => {
624+ const result = await getFileTokenScores (
625+ '/tmp/test-project' ,
626+ [ 'src/unreadable.ts' , 'src/readable.ts' ] ,
627+ async ( filePath : string ) => {
628+ if ( filePath === 'src/unreadable.ts' ) {
629+ throw new Error ( 'permission denied' )
630+ }
631+
632+ return 'export function readable() { return helper() }\nfunction helper() { return 1 }\n'
633+ } ,
634+ )
635+
636+ expect ( result . tokenScores ) . toBeDefined ( )
637+ expect ( result . tokenCallers ) . toBeDefined ( )
638+ } )
597639 } )
598640} )
0 commit comments