1+ namespace = "annotatescrollbar_" ;
2+
3+ ( function ( ) {
4+ function test ( name , run , content , query , expected ) {
5+ return testCM ( name , function ( cm ) {
6+ var annotation = cm . annotateScrollbar ( {
7+ listenForChanges : false ,
8+ className : "CodeMirror-search-match"
9+ } ) ;
10+ var matches = [ ] ;
11+ var cursor = cm . getSearchCursor ( query , CodeMirror . Pos ( 0 , 0 ) ) ;
12+ while ( cursor . findNext ( ) ) {
13+ var match = {
14+ from : cursor . from ( ) ,
15+ to : cursor . to ( )
16+ } ;
17+ matches . push ( match )
18+ }
19+
20+ if ( run ) run ( cm ) ;
21+
22+ cm . display . barWidth = 5 ;
23+ annotation . update ( matches ) ;
24+
25+ var annotations = cm . getWrapperElement ( ) . getElementsByClassName ( annotation . options . className ) ;
26+ eq ( annotations . length , expected , "Expected " + expected + " annotations on the scrollbar." )
27+ } , {
28+ value : content ,
29+ mode : "javascript" ,
30+ foldOptions : {
31+ rangeFinder : CodeMirror . fold . brace
32+ }
33+ } ) ;
34+ }
35+
36+ function doFold ( cm ) {
37+ cm . foldCode ( cm . getCursor ( ) ) ;
38+ }
39+ var simpleProg = "function foo() {\n\n return \"foo\";\n\n}\n\nfoo();\n" ;
40+ var consecutiveLineMatches = "function foo() {\n return \"foo\";\n}\nfoo();\n" ;
41+ var singleLineMatches = "function foo() { return \"foo\"; }foo();\n" ;
42+
43+ // Base case - expect 3 matches and 3 annotations
44+ test ( "simple" , null , simpleProg , "foo" , 3 ) ;
45+ // Consecutive line matches are combines into a single annotation - expect 3 matches and 2 annotations
46+ test ( "combineConsecutiveLine" , null , consecutiveLineMatches , "foo" , 2 ) ;
47+ // Matches on a single line get a single annotation - expect 3 matches and 1 annotation
48+ test ( "combineSingleLine" , null , singleLineMatches , "foo" , 1 ) ;
49+ // Matches within a fold are annotated on the folded line - expect 3 matches and 2 annotations
50+ test ( "simpleFold" , doFold , simpleProg , "foo" , 2 ) ;
51+ // Combination of combineConsecutiveLine and simpleFold cases - expect 3 matches and 1 annotation
52+ test ( "foldedMatch" , doFold , consecutiveLineMatches , "foo" , 1 ) ;
53+ // Hidden matches within a fold are annotated on the folded line - expect 1 match and 1 annotation
54+ test ( "hiddenMatch" , doFold , simpleProg , "return" , 1 ) ;
55+ } ) ( ) ;
0 commit comments