@@ -16,7 +16,12 @@ import {
1616} from './hoverifier'
1717import { findPositionsFromEvents , SupportedMouseEvent } from './positions'
1818import { CodeViewProps , DOM } from './testutils/dom'
19- import { createHoverAttachment , createStubActionsProvider , createStubHoverProvider } from './testutils/fixtures'
19+ import {
20+ createHoverAttachment ,
21+ createStubActionsProvider ,
22+ createStubHoverProvider ,
23+ createStubDocumentHighlightProvider ,
24+ } from './testutils/fixtures'
2025import { dispatchMouseEventAtPositionImpure } from './testutils/mouse'
2126import { HoverAttachment } from './types'
2227import { LOADING } from './loading'
@@ -53,6 +58,7 @@ describe('Hoverifier', () => {
5358 hoverOverlayElements : of ( null ) ,
5459 hoverOverlayRerenders : EMPTY ,
5560 getHover : createStubHoverProvider ( { range : hoverRange } , LOADER_DELAY + delayTime ) ,
61+ getDocumentHighlights : createStubDocumentHighlightProvider ( ) ,
5662 getActions : ( ) => of ( null ) ,
5763 pinningEnabled : true ,
5864 } )
@@ -115,6 +121,7 @@ describe('Hoverifier', () => {
115121 hoverOverlayElements : of ( null ) ,
116122 hoverOverlayRerenders : EMPTY ,
117123 getHover : createStubHoverProvider ( hover , delayTime ) ,
124+ getDocumentHighlights : createStubDocumentHighlightProvider ( ) ,
118125 getActions : createStubActionsProvider ( [ 'foo' , 'bar' ] , delayTime ) ,
119126 pinningEnabled : true ,
120127 } )
@@ -204,6 +211,7 @@ describe('Hoverifier', () => {
204211 hoverOverlayElements : of ( null ) ,
205212 hoverOverlayRerenders : EMPTY ,
206213 getHover : createStubHoverProvider ( hover , delayTime ) ,
214+ getDocumentHighlights : createStubDocumentHighlightProvider ( ) ,
207215 getActions : createStubActionsProvider ( [ 'foo' , 'bar' ] , delayTime ) ,
208216 pinningEnabled : false ,
209217 } )
@@ -284,6 +292,7 @@ describe('Hoverifier', () => {
284292 hoverOverlayElements : of ( null ) ,
285293 hoverOverlayRerenders : EMPTY ,
286294 getHover : createStubHoverProvider ( hover , delayTime ) ,
295+ getDocumentHighlights : createStubDocumentHighlightProvider ( ) ,
287296 getActions : createStubActionsProvider ( [ 'foo' , 'bar' ] , delayTime ) ,
288297 pinningEnabled : false ,
289298 } )
@@ -330,6 +339,56 @@ describe('Hoverifier', () => {
330339 }
331340 } )
332341
342+ it ( 'highlights document highlights' , async ( ) => {
343+ for ( const codeViewProps of testcases ) {
344+ const hoverifier = createHoverifier ( {
345+ closeButtonClicks : NEVER ,
346+ hoverOverlayElements : of ( null ) ,
347+ hoverOverlayRerenders : EMPTY ,
348+ getHover : createStubHoverProvider ( ) ,
349+ getDocumentHighlights : createStubDocumentHighlightProvider ( [
350+ { range : { start : { line : 24 , character : 9 } , end : { line : 4 , character : 15 } } } ,
351+ { range : { start : { line : 45 , character : 5 } , end : { line : 45 , character : 11 } } } ,
352+ { range : { start : { line : 120 , character : 9 } , end : { line : 120 , character : 15 } } } ,
353+ ] ) ,
354+ getActions : ( ) => of ( null ) ,
355+ pinningEnabled : true ,
356+ documentHighlightClassName : 'test-highlight' ,
357+ } )
358+ const positionJumps = new Subject < PositionJump > ( )
359+ const positionEvents = of ( codeViewProps . codeView ) . pipe (
360+ findPositionsFromEvents ( { domFunctions : codeViewProps } )
361+ )
362+
363+ hoverifier . hoverify ( {
364+ dom : codeViewProps ,
365+ positionEvents,
366+ positionJumps,
367+ resolveContext : ( ) => codeViewProps . revSpec ,
368+ } )
369+
370+ dispatchMouseEventAtPositionImpure ( 'mouseover' , codeViewProps , {
371+ line : 24 ,
372+ character : 6 ,
373+ } )
374+
375+ await hoverifier . hoverStateUpdates
376+ . pipe (
377+ filter ( state => ! ! state . hoverOverlayProps ) ,
378+ first ( )
379+ )
380+ . toPromise ( )
381+
382+ await of ( null ) . pipe ( delay ( 200 ) ) . toPromise ( )
383+
384+ const selected = codeViewProps . codeView . querySelectorAll ( '.test-highlight' )
385+ assert . equal ( selected . length , 3 )
386+ for ( const e of selected ) {
387+ assert . equal ( e . textContent , 'Router' )
388+ }
389+ }
390+ } )
391+
333392 it ( 'hides the hover overlay when the hovered token intersects with a scrollBoundary' , async ( ) => {
334393 const gitHubCodeView = testcases [ 1 ]
335394 const hoverifier = createHoverifier ( {
@@ -342,6 +401,7 @@ describe('Hoverifier', () => {
342401 end : { line : 4 , character : 9 } ,
343402 } ,
344403 } ) ,
404+ getDocumentHighlights : createStubDocumentHighlightProvider ( ) ,
345405 getActions : createStubActionsProvider ( [ 'foo' , 'bar' ] ) ,
346406 pinningEnabled : true ,
347407 } )
@@ -396,6 +456,7 @@ describe('Hoverifier', () => {
396456 position . line === 24
397457 ? createStubHoverProvider ( { } , delayTime ) ( position )
398458 : of ( { isLoading : false , result : null } ) ,
459+ getDocumentHighlights : createStubDocumentHighlightProvider ( ) ,
399460 getActions : position =>
400461 position . line === 24
401462 ? createStubActionsProvider ( [ 'foo' , 'bar' ] , delayTime ) ( position )
@@ -473,6 +534,7 @@ describe('Hoverifier', () => {
473534 position . line === 24
474535 ? createStubHoverProvider ( { } ) ( position )
475536 : of ( { isLoading : false , result : null } ) ,
537+ getDocumentHighlights : createStubDocumentHighlightProvider ( ) ,
476538 getActions : position =>
477539 position . line === 24 ? createStubActionsProvider ( [ 'foo' , 'bar' ] ) ( position ) : of ( null ) ,
478540 pinningEnabled : true ,
@@ -555,6 +617,7 @@ describe('Hoverifier', () => {
555617 hoverOverlayElements : of ( null ) ,
556618 hoverOverlayRerenders : EMPTY ,
557619 getHover : createStubHoverProvider ( hover , LOADER_DELAY + hoverDelayTime ) ,
620+ getDocumentHighlights : createStubDocumentHighlightProvider ( ) ,
558621 getActions : createStubActionsProvider ( actions , LOADER_DELAY + actionsDelayTime ) ,
559622 pinningEnabled : true ,
560623 } )
@@ -627,6 +690,7 @@ describe('Hoverifier', () => {
627690 hoverOverlayElements : of ( null ) ,
628691 hoverOverlayRerenders : EMPTY ,
629692 getHover : createStubHoverProvider ( hover ) ,
693+ getDocumentHighlights : createStubDocumentHighlightProvider ( ) ,
630694 getActions : ( ) => of ( null ) ,
631695 pinningEnabled : true ,
632696 } )
@@ -689,6 +753,7 @@ describe('Hoverifier', () => {
689753 hoverOverlayElements : of ( null ) ,
690754 hoverOverlayRerenders : EMPTY ,
691755 getHover : createStubHoverProvider ( hover ) ,
756+ getDocumentHighlights : createStubDocumentHighlightProvider ( ) ,
692757 getActions : ( ) => of ( null ) ,
693758 pinningEnabled : true ,
694759 } )
@@ -762,6 +827,7 @@ describe('Hoverifier', () => {
762827 const adjustmentDirections = new Subject < AdjustmentDirection > ( )
763828
764829 const getHover = createStubHoverProvider ( { } )
830+ const getDocumentHighlights = createStubDocumentHighlightProvider ( )
765831 const getActions = createStubActionsProvider ( [ 'foo' , 'bar' ] )
766832
767833 const adjustPosition : PositionAdjuster < { } > = ( { direction, position } ) => {
@@ -775,6 +841,7 @@ describe('Hoverifier', () => {
775841 hoverOverlayElements : of ( null ) ,
776842 hoverOverlayRerenders : EMPTY ,
777843 getHover,
844+ getDocumentHighlights,
778845 getActions,
779846 pinningEnabled : true ,
780847 } )
@@ -831,6 +898,7 @@ describe('Hoverifier', () => {
831898 hoverOverlayRerenders : EMPTY ,
832899 // It's important that getHover() and getActions() emit something
833900 getHover : createStubHoverProvider ( { } ) ,
901+ getDocumentHighlights : createStubDocumentHighlightProvider ( ) ,
834902 getActions : ( ) => of ( [ { } ] ) . pipe ( delay ( 50 ) ) ,
835903 pinningEnabled : true ,
836904 } )
@@ -870,6 +938,7 @@ describe('Hoverifier', () => {
870938 hoverOverlayElements : of ( null ) ,
871939 hoverOverlayRerenders : EMPTY ,
872940 getHover : createStubHoverProvider ( ) ,
941+ getDocumentHighlights : createStubDocumentHighlightProvider ( ) ,
873942 getActions : ( ) => of ( null ) ,
874943 pinningEnabled : true ,
875944 } )
0 commit comments