@@ -638,4 +638,93 @@ describe('The Network Request view', () => {
638638
639639 await devToolsPage . waitFor ( SEARCH_RESULT ) ;
640640 } ) ;
641+
642+ describe ( 'preview' , ( ) => {
643+ async function searchInPreview ( devToolsPage : DevToolsPage , query : string , totalMatches : number ) {
644+ const SEARCH_QUERY = '.search-replace.search' ;
645+
646+ await devToolsPage . summonSearchBox ( ) ;
647+ const inputElement = await devToolsPage . waitFor ( SEARCH_QUERY ) ;
648+ assert . isOk ( inputElement , 'Unable to find search input field' ) ;
649+
650+ await inputElement . focus ( ) ;
651+ await inputElement . click ( { clickCount : 3 } ) ; // Select all text.
652+ await inputElement . type ( query ) ;
653+
654+ await devToolsPage . waitForFunction ( async ( ) => {
655+ const searchStatusText = await devToolsPage . getTextContent ( '.search-results-matches' ) ;
656+ if ( totalMatches > 0 ) {
657+ return searchStatusText . endsWith ( `of ${ totalMatches } ` ) ;
658+ }
659+ return ! searchStatusText ;
660+ } ) ;
661+ }
662+
663+ async function setupPreviewTest (
664+ devToolsPage : DevToolsPage , inspectedPage : InspectedPage , url : string , resourceName ?: string ) {
665+ await navigateToNetworkTab ( 'hello.html' , devToolsPage , inspectedPage ) ;
666+ await inspectedPage . evaluate ( url => fetch ( url ) , url ) ;
667+ await waitForSomeRequestsToAppear ( 3 , devToolsPage ) ;
668+
669+ if ( ! resourceName ) {
670+ resourceName = url . length > 20 ? url . substring ( 0 , 19 ) + '…' : url ;
671+ }
672+
673+ await selectRequestByName ( resourceName , { devToolsPage} ) ;
674+
675+ const networkView = await devToolsPage . waitFor ( '.network-item-view' ) ;
676+ await devToolsPage . click ( '[aria-label=Preview][role="tab"]' , {
677+ root : networkView ,
678+ } ) ;
679+ await devToolsPage . waitFor ( '[aria-label=Preview][role=tab][aria-selected=true]' , networkView ) ;
680+ // Wait for the preview to load.
681+ await devToolsPage . click (
682+ '.json-view, .shadow-xml-view, devtools-text-editor, .html-preview-frame' ,
683+ { clickOptions : { offset : { x : 10 , y : 10 } } } ) ;
684+ }
685+
686+ it ( 'can be searched for JSON content' , async ( { devToolsPage, inspectedPage} ) => {
687+ const url = 'data:application/json,%5B533%2C3223%5D' ;
688+ await setupPreviewTest ( devToolsPage , inspectedPage , url ) ;
689+
690+ await searchInPreview ( devToolsPage , '533' , 1 ) ;
691+ await searchInPreview ( devToolsPage , '322' , 1 ) ;
692+ } ) ;
693+
694+ it ( 'can be searched for JSON content with special mime type' , async ( { devToolsPage, inspectedPage} ) => {
695+ const url = 'data:application/vnd.document+json,%7B%22foo0foo%22%3A%20123%7D' ;
696+ await setupPreviewTest ( devToolsPage , inspectedPage , url ) ;
697+ await searchInPreview ( devToolsPage , 'foo' , 1 ) ;
698+ } ) ;
699+
700+ it ( 'can be searched for XML content' , async ( { devToolsPage, inspectedPage} ) => {
701+ const url = 'data:text/xml,%3Cbar%3E%3Cfoo%2F%3Etest%3C%2Fbar%3E' ;
702+ await setupPreviewTest ( devToolsPage , inspectedPage , url ) ;
703+ await searchInPreview ( devToolsPage , 'bar' , 2 ) ;
704+ await searchInPreview ( devToolsPage , 'foo' , 1 ) ;
705+ await searchInPreview ( devToolsPage , 'test' , 1 ) ;
706+ } ) ;
707+
708+ it ( 'can be searched for XML content with comments' , async ( { devToolsPage, inspectedPage} ) => {
709+ const url = 'data:text/xml,%3Cbar%3E%3C!--%20FOO%20--%3E%3C%2Fbar%3E' ;
710+ await setupPreviewTest ( devToolsPage , inspectedPage , url ) ;
711+ await searchInPreview ( devToolsPage , 'FOO' , 1 ) ;
712+ await searchInPreview ( devToolsPage , 'bar' , 2 ) ;
713+ } ) ;
714+
715+ it ( 'can be searched for XML content with CDATA' , async ( { devToolsPage, inspectedPage} ) => {
716+ const url = 'data:text/xml,%3Ca%3E%3C!%5BCDATA%5BGGG%5D%5D%3E%3Cg%20tee%3D%22gee%22%3Etee%3C%2Fg%3E%3C%2Fa%3E' ;
717+ await setupPreviewTest ( devToolsPage , inspectedPage , url ) ;
718+ await searchInPreview ( devToolsPage , 'GGG' , 1 ) ;
719+ await searchInPreview ( devToolsPage , 'tee' , 2 ) ;
720+ await searchInPreview ( devToolsPage , 'CDATA' , 1 ) ;
721+ } ) ;
722+
723+ it ( 'can be searched for JSON content with XML mime type' , async ( { devToolsPage, inspectedPage} ) => {
724+ const url = 'data:text/xml,%7B%22foo0%22%3A%20%22barr%22%2C%20%22barr%22%3A%20%22fooo%22%7D' ;
725+ await setupPreviewTest ( devToolsPage , inspectedPage , url ) ;
726+ await searchInPreview ( devToolsPage , 'fooo' , 1 ) ;
727+ await searchInPreview ( devToolsPage , 'bar' , 2 ) ;
728+ } ) ;
729+ } ) ;
641730} ) ;
0 commit comments