search_test.js (3321B)
1 (function() { 2 "use strict"; 3 4 function run(doc, query, options) { 5 var cursor = doc.getSearchCursor(query, null, options); 6 for (var i = 3; i < arguments.length; i += 4) { 7 var found = cursor.findNext(); 8 is(found, "not enough results (forward)"); 9 eqCharPos(Pos(arguments[i], arguments[i + 1]), cursor.from(), "from, forward, " + (i - 3) / 4); 10 eqCharPos(Pos(arguments[i + 2], arguments[i + 3]), cursor.to(), "to, forward, " + (i - 3) / 4); 11 } 12 is(!cursor.findNext(), "too many matches (forward)"); 13 for (var i = arguments.length - 4; i >= 3; i -= 4) { 14 var found = cursor.findPrevious(); 15 is(found, "not enough results (backwards)"); 16 eqCharPos(Pos(arguments[i], arguments[i + 1]), cursor.from(), "from, backwards, " + (i - 3) / 4); 17 eqCharPos(Pos(arguments[i + 2], arguments[i + 3]), cursor.to(), "to, backwards, " + (i - 3) / 4); 18 } 19 is(!cursor.findPrevious(), "too many matches (backwards)"); 20 } 21 22 function test(name, f) { window.test("search_" + name, f) } 23 24 test("simple", function() { 25 var doc = new CodeMirror.Doc("abcdefg\nabcdefg") 26 run(doc, "cde", false, 0, 2, 0, 5, 1, 2, 1, 5); 27 }); 28 29 test("multiline", function() { 30 var doc = new CodeMirror.Doc("hallo\na\nb\ngoodbye") 31 run(doc, "llo\na\nb\ngoo", false, 0, 2, 3, 3); 32 run(doc, "blah\na\nb\nhall", false); 33 run(doc, "bye\nx\neye", false); 34 }); 35 36 test("regexp", function() { 37 var doc = new CodeMirror.Doc("abcde\nabcde") 38 run(doc, /bcd/, false, 0, 1, 0, 4, 1, 1, 1, 4); 39 run(doc, /BCD/, false); 40 run(doc, /BCD/i, false, 0, 1, 0, 4, 1, 1, 1, 4); 41 }); 42 43 test("regexpMultiline", function() { 44 var doc = new CodeMirror.Doc("foo foo\nbar\nbaz") 45 run(doc, /fo[^]*az/, {multiline: true}, 0, 0, 2, 3) 46 run(doc, /[oa][^u]/, {multiline: true}, 0, 1, 0, 3, 0, 5, 0, 7, 1, 1, 1, 3, 2, 1, 2, 3) 47 run(doc, /[a][^u]{2}/, {multiline: true}, 1, 1, 2, 0) 48 }) 49 50 test("insensitive", function() { 51 var doc = new CodeMirror.Doc("hallo\nHALLO\noink\nhAllO") 52 run(doc, "All", false, 3, 1, 3, 4); 53 run(doc, "All", true, 0, 1, 0, 4, 1, 1, 1, 4, 3, 1, 3, 4); 54 }); 55 56 test("multilineInsensitive", function() { 57 var doc = new CodeMirror.Doc("zie ginds komT\nDe Stoomboot\nuit Spanje weer aan") 58 run(doc, "komt\nde stoomboot\nuit", false); 59 run(doc, "komt\nde stoomboot\nuit", {caseFold: true}, 0, 10, 2, 3); 60 run(doc, "kOMt\ndE stOOmboot\nuiT", {caseFold: true}, 0, 10, 2, 3); 61 }); 62 63 test("multilineInsensitiveSlow", function() { 64 var text = "" 65 for (var i = 0; i < 1000; i++) text += "foo\nbar\n" 66 var doc = new CodeMirror.Doc("find\nme\n" + text + "find\nme\n") 67 var t0 = +new Date 68 run(doc, /find\nme/, {multiline: true}, 0, 0, 1, 2, 2002, 0, 2003, 2) 69 is(+new Date - t0 < 100) 70 }) 71 72 test("expandingCaseFold", function() { 73 var doc = new CodeMirror.Doc("<b>İİ İİ</b>\n<b>uu uu</b>") 74 run(doc, "</b>", true, 0, 8, 0, 12, 1, 8, 1, 12); 75 run(doc, "İİ", true, 0, 3, 0, 5, 0, 6, 0, 8); 76 }); 77 78 test("normalize", function() { 79 if (!String.prototype.normalize) return 80 var doc = new CodeMirror.Doc("yılbaşı\n수 있을까\nLe taux d'humidité à London") 81 run(doc, "s", false, 0, 5, 0, 6) 82 run(doc, "이", false, 1, 2, 1, 3) 83 run(doc, "a", false, 0, 4, 0, 5, 2, 4, 2, 5, 2, 19, 2, 20) 84 }) 85 })();