@@ -137,6 +137,7 @@ describeWithMockConnection('DrJonesFileAgent', () => {
137137 mimeType ?: string ,
138138 url ?: Platform . DevToolsPath . UrlString ,
139139 resourceType ?: Common . ResourceType . ResourceType ,
140+ requestContentData ?: boolean ,
140141 } ) : Promise < Workspace . UISourceCode . UISourceCode > {
141142 const url = options ?. url ?? 'http://example.test/script.js' as Platform . DevToolsPath . UrlString ;
142143 const { project} = createContentProviderUISourceCodes ( {
@@ -152,98 +153,118 @@ describeWithMockConnection('DrJonesFileAgent', () => {
152153 } ) ;
153154
154155 const uiSourceCode = project . uiSourceCodeForURL ( url ) ;
155-
156156 if ( ! uiSourceCode ) {
157157 throw new Error ( 'Failed to create a test uiSourceCode' ) ;
158158 }
159- await uiSourceCode . requestContentData ( ) ;
159+ if ( ! uiSourceCode . contentType ( ) . isTextType ( ) ) {
160+ uiSourceCode ?. setContent ( 'binary' , true ) ;
161+ }
162+ if ( options ?. requestContentData ) {
163+ await uiSourceCode . requestContentData ( ) ;
164+ }
160165 return uiSourceCode ;
161166 }
162167
163168 describe ( 'run' , ( ) => {
164- it ( 'generates an answer' , async ( ) => {
165- async function * generateAnswer ( ) {
166- yield {
167- explanation : 'This is the answer' ,
168- metadata : {
169- rpcGlobalId : 123 ,
170- } ,
171- completed : true ,
172- } ;
173- }
169+ const testArguments = [
170+ {
171+ name : 'content loaded' ,
172+ requestContentData : true ,
173+ } ,
174+ {
175+ name : 'content not loaded' ,
176+ requestContentData : false ,
177+ } ,
178+ ] ;
174179
175- const agent = new DrJonesFileAgent ( {
176- aidaClient : mockAidaClient ( generateAnswer ) ,
177- } ) ;
180+ testArguments . forEach ( args => {
181+ it ( 'generates an answer ' + args . name , async ( ) => {
182+ async function * generateAnswer ( ) {
183+ yield {
184+ explanation : 'This is the answer' ,
185+ metadata : {
186+ rpcGlobalId : 123 ,
187+ } ,
188+ completed : true ,
189+ } ;
190+ }
178191
179- const uiSourceCode = await createUISourceCode ( ) ;
180- const responses =
181- await Array . fromAsync ( agent . run ( 'test' , { selected : uiSourceCode ? new FileContext ( uiSourceCode ) : null } ) ) ;
192+ const agent = new DrJonesFileAgent ( {
193+ aidaClient : mockAidaClient ( generateAnswer ) ,
194+ } ) ;
182195
183- assert . deepStrictEqual ( responses , [
184- {
185- type : ResponseType . USER_QUERY ,
186- query : 'test' ,
187- } ,
188- {
189- type : ResponseType . CONTEXT ,
190- title : 'Analyzing file' ,
191- details : [
192- {
193- title : 'Selected file' ,
194- text : `File name: script.js
196+ const uiSourceCode = await createUISourceCode ( {
197+ requestContentData : args . requestContentData ,
198+ content : 'content' ,
199+ } ) ;
200+ const responses =
201+ await Array . fromAsync ( agent . run ( 'test' , { selected : uiSourceCode ? new FileContext ( uiSourceCode ) : null } ) ) ;
202+
203+ assert . deepStrictEqual ( responses , [
204+ {
205+ type : ResponseType . USER_QUERY ,
206+ query : 'test' ,
207+ } ,
208+ {
209+ type : ResponseType . CONTEXT ,
210+ title : 'Analyzing file' ,
211+ details : [
212+ {
213+ title : 'Selected file' ,
214+ text : `File name: script.js
195215URL: http://example.test/script.js
196216File content:
197217\`\`\`
198-
218+ content
199219\`\`\`` ,
200- } ,
201- ] ,
202- } ,
203- {
204- type : ResponseType . QUERYING ,
205- query : `# Selected file
220+ } ,
221+ ] ,
222+ } ,
223+ {
224+ type : ResponseType . QUERYING ,
225+ query : `# Selected file
206226File name: script.js
207227URL: http://example.test/script.js
208228File content:
209229\`\`\`
210-
230+ content
211231\`\`\`
212232
213233# User request
214234
215235test` ,
216- } ,
217- {
218- type : ResponseType . ANSWER ,
219- text : 'This is the answer' ,
220- suggestions : undefined ,
221- rpcId : 123 ,
222- } ,
223- ] ) ;
236+ } ,
237+ {
238+ type : ResponseType . ANSWER ,
239+ text : 'This is the answer' ,
240+ suggestions : undefined ,
241+ rpcId : 123 ,
242+ } ,
243+ ] ) ;
224244
225- assert . deepStrictEqual ( agent . chatHistoryForTesting , [
226- {
227- role : 1 ,
228- parts : [ {
229- text : `# Selected file
245+ assert . deepStrictEqual ( agent . chatHistoryForTesting , [
246+ {
247+ role : 1 ,
248+ parts : [ {
249+ text : `# Selected file
230250File name: script.js
231251URL: http://example.test/script.js
232252File content:
233253\`\`\`
234-
254+ content
235255\`\`\`
236256
237257# User request
238258
239259test` ,
240- } ] ,
241- } ,
242- {
243- role : 2 ,
244- parts : [ { text : 'This is the answer' } ] ,
245- } ,
246- ] ) ;
260+ } ] ,
261+ } ,
262+ {
263+ role : 2 ,
264+ parts : [ { text : 'This is the answer' } ] ,
265+ } ,
266+ ] ) ;
267+ } ) ;
247268 } ) ;
248269 } ) ;
249270
@@ -267,6 +288,7 @@ test`,
267288 it ( 'formats file content' , async ( ) => {
268289 const uiSourceCode = await createUISourceCode ( {
269290 content : 'lorem ipsum' ,
291+ requestContentData : true ,
270292 } ) ;
271293 assert . strictEqual ( formatFile ( uiSourceCode ) , `File name: script.js
272294URL: http://example.test/script.js
@@ -281,6 +303,7 @@ lorem ipsum
281303 resourceType : Common . ResourceType . resourceTypes . Image ,
282304 mimeType : 'application/png' ,
283305 url : 'http://example.test/test.png' as Platform . DevToolsPath . UrlString ,
306+ requestContentData : true ,
284307 } ) ;
285308 assert . strictEqual ( formatFile ( uiSourceCode ) , `File name: test.png
286309URL: http://example.test/test.png
@@ -293,6 +316,7 @@ File content:
293316 it ( 'truncates long file content' , async ( ) => {
294317 const uiSourceCode = await createUISourceCode ( {
295318 content : 'lorem ipsum' . repeat ( 10_000 ) ,
319+ requestContentData : true ,
296320 } ) ;
297321 assert . strictEqual ( formatFile ( uiSourceCode ) , `File name: script.js
298322URL: http://example.test/script.js
0 commit comments