annotate .cms/lib/codemirror/test/annotatescrollbar.js @ 1:1d486627aa1e draft default tip

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