@@ -9,7 +9,7 @@ import { URI } from '../../../../../../base/common/uri.js';
99import { assertSnapshot } from '../../../../../../base/test/common/snapshot.js' ;
1010import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../../base/test/common/utils.js' ;
1111import { IChatMarkdownContent , IChatResponseCodeblockUriPart } from '../../../common/chatService/chatService.js' ;
12- import { annotateSpecialMarkdownContent , extractCodeblockUrisFromText , extractSubAgentInvocationIdFromText , extractVulnerabilitiesFromText , isInsideCodeContext } from '../../../common/widget/annotations.js' ;
12+ import { annotateSpecialMarkdownContent , extractCodeblockUrisFromText , extractSubAgentInvocationIdFromText , extractVulnerabilitiesFromText , hasEditCodeblockUriTag , hasCodeblockUriTag , isInsideCodeContext } from '../../../common/widget/annotations.js' ;
1313
1414function content ( str : string ) : IChatMarkdownContent {
1515 return { kind : 'markdownContent' , content : new MarkdownString ( str ) } ;
@@ -240,4 +240,54 @@ suite('Annotations', function () {
240240 assert . ok ( md . content . value . endsWith ( 'index.ts' ) ) ;
241241 } ) ;
242242 } ) ;
243+
244+ suite ( 'hasEditCodeblockUriTag' , ( ) => {
245+ test ( 'returns true for edit codeblock URI tags' , ( ) => {
246+ const editTag = '<vscode_codeblock_uri isEdit>file:///test.ts</vscode_codeblock_uri>' ;
247+ assert . strictEqual ( hasEditCodeblockUriTag ( editTag ) , true ) ;
248+ } ) ;
249+
250+ test ( 'returns false for non-edit codeblock URI tags' , ( ) => {
251+ const nonEditTag = '<vscode_codeblock_uri>file:///test.ts</vscode_codeblock_uri>' ;
252+ assert . strictEqual ( hasEditCodeblockUriTag ( nonEditTag ) , false ) ;
253+ } ) ;
254+
255+ test ( 'returns true for edit codeblock URI tags with subAgentInvocationId' , ( ) => {
256+ const editTagWithSubAgent = '<vscode_codeblock_uri isEdit subAgentInvocationId="agent-123">file:///test.ts</vscode_codeblock_uri>' ;
257+ assert . strictEqual ( hasEditCodeblockUriTag ( editTagWithSubAgent ) , true ) ;
258+ } ) ;
259+
260+ test ( 'returns false for non-edit codeblock URI tags with subAgentInvocationId' , ( ) => {
261+ const nonEditTagWithSubAgent = '<vscode_codeblock_uri subAgentInvocationId="agent-123">file:///test.ts</vscode_codeblock_uri>' ;
262+ assert . strictEqual ( hasEditCodeblockUriTag ( nonEditTagWithSubAgent ) , false ) ;
263+ } ) ;
264+
265+ test ( 'returns false for text without codeblock URI tags' , ( ) => {
266+ assert . strictEqual ( hasEditCodeblockUriTag ( 'some plain text' ) , false ) ;
267+ } ) ;
268+
269+ test ( 'returns false for text with only partial tag prefix' , ( ) => {
270+ assert . strictEqual ( hasEditCodeblockUriTag ( '<vscode_codebloc' ) , false ) ;
271+ } ) ;
272+
273+ test ( 'returns true for text containing multiple edit codeblock URI tags' , ( ) => {
274+ const multipleEditTags = 'some text <vscode_codeblock_uri isEdit>file:///test.ts</vscode_codeblock_uri> more <vscode_codeblock_uri isEdit>file:///other.ts</vscode_codeblock_uri>' ;
275+ assert . strictEqual ( hasEditCodeblockUriTag ( multipleEditTags ) , true ) ;
276+ } ) ;
277+
278+ test ( 'returns false for text containing only non-edit codeblock URI tags' , ( ) => {
279+ const multipleNonEditTags = 'some text <vscode_codeblock_uri>file:///test.ts</vscode_codeblock_uri> more <vscode_codeblock_uri>file:///other.ts</vscode_codeblock_uri>' ;
280+ assert . strictEqual ( hasEditCodeblockUriTag ( multipleNonEditTags ) , false ) ;
281+ } ) ;
282+
283+ test ( 'matches hasCodeblockUriTag for edit tags' , ( ) => {
284+ const editTag = '<vscode_codeblock_uri isEdit>file:///test.ts</vscode_codeblock_uri>' ;
285+ assert . strictEqual ( hasEditCodeblockUriTag ( editTag ) , hasCodeblockUriTag ( editTag ) ) ;
286+ } ) ;
287+
288+ test ( 'differs from hasCodeblockUriTag for non-edit tags' , ( ) => {
289+ const nonEditTag = '<vscode_codeblock_uri>file:///test.ts</vscode_codeblock_uri>' ;
290+ assert . notStrictEqual ( hasEditCodeblockUriTag ( nonEditTag ) , hasCodeblockUriTag ( nonEditTag ) ) ;
291+ } ) ;
292+ } ) ;
243293} ) ;
0 commit comments