@@ -14,11 +14,17 @@ describe('FsRead Tool', () => {
1414 testFolder = await TestFolder . create ( )
1515 } )
1616
17+ it ( 'throws if path is empty' , async ( ) => {
18+ const fsRead = new FsRead ( { path : '' } )
19+ await assert . rejects ( fsRead . validate ( ) , / P a t h c a n n o t b e e m p t y / i, 'Expected an error about empty path' )
20+ } )
21+
1722 it ( 'reads entire file' , async ( ) => {
1823 const fileContent = 'Line 1\nLine 2\nLine 3'
1924 const filePath = await testFolder . write ( 'fullFile.txt' , fileContent )
2025
2126 const fsRead = new FsRead ( { path : filePath } )
27+ await fsRead . validate ( )
2228 const result = await fsRead . invoke ( )
2329
2430 assert . strictEqual ( result . output . kind , 'text' , 'Output kind should be "text"' )
@@ -30,6 +36,7 @@ describe('FsRead Tool', () => {
3036 const filePath = await testFolder . write ( 'partialFile.txt' , fileContent )
3137
3238 const fsRead = new FsRead ( { path : filePath , readRange : [ 2 , 4 ] } )
39+ await fsRead . validate ( )
3340 const result = await fsRead . invoke ( )
3441
3542 assert . strictEqual ( result . output . kind , 'text' )
@@ -42,6 +49,7 @@ describe('FsRead Tool', () => {
4249 await testFolder . write ( path . join ( 'subfolder' , 'fileB.md' ) , '# fileB' )
4350
4451 const fsRead = new FsRead ( { path : testFolder . path , readRange : [ 1 ] } )
52+ await fsRead . validate ( )
4553 const result = await fsRead . invoke ( )
4654
4755 const lines = result . output . content . split ( '\n' )
@@ -57,7 +65,7 @@ describe('FsRead Tool', () => {
5765 const fsRead = new FsRead ( { path : missingPath } )
5866
5967 await assert . rejects (
60- fsRead . invoke ( ) ,
68+ fsRead . validate ( ) ,
6169 / d o e s n o t e x i s t o r c a n n o t b e a c c e s s e d / i,
6270 'Expected an error indicating the path does not exist'
6371 )
@@ -68,6 +76,7 @@ describe('FsRead Tool', () => {
6876 const bigFilePath = await testFolder . write ( 'bigFile.txt' , bigContent )
6977
7078 const fsRead = new FsRead ( { path : bigFilePath } )
79+ await fsRead . validate ( )
7180
7281 await assert . rejects (
7382 fsRead . invoke ( ) ,
@@ -80,8 +89,34 @@ describe('FsRead Tool', () => {
8089 const filePath = await testFolder . write ( 'rangeTest.txt' , '1\n2\n3' )
8190 const fsRead = new FsRead ( { path : filePath , readRange : [ 3 , 2 ] } )
8291
92+ await fsRead . validate ( )
8393 const result = await fsRead . invoke ( )
8494 assert . strictEqual ( result . output . kind , 'text' )
8595 assert . strictEqual ( result . output . content , '' )
8696 } )
97+
98+ it ( 'expands ~ path' , async ( ) => {
99+ const fsRead = new FsRead ( { path : '~' } )
100+ await fsRead . validate ( )
101+ const result = await fsRead . invoke ( )
102+
103+ assert . strictEqual ( result . output . kind , 'text' )
104+ assert . ok ( result . output . content . length > 0 )
105+ } )
106+
107+ it ( 'resolves relative path' , async ( ) => {
108+ await testFolder . mkdir ( 'relTest' )
109+ const filePath = path . join ( 'relTest' , 'relFile.txt' )
110+ const content = 'Hello from a relative file!'
111+ await testFolder . write ( filePath , content )
112+
113+ const relativePath = path . relative ( process . cwd ( ) , path . join ( testFolder . path , filePath ) )
114+
115+ const fsRead = new FsRead ( { path : relativePath } )
116+ await fsRead . validate ( )
117+ const result = await fsRead . invoke ( )
118+
119+ assert . strictEqual ( result . output . kind , 'text' )
120+ assert . strictEqual ( result . output . content , content )
121+ } )
87122} )
0 commit comments