2 * Copyright (C) 2013 FooProject
3 * * This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
6 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
7 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
9 You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
13 using System.Text.RegularExpressions;
14 using System.Collections.Generic;
15 using Microsoft.VisualStudio.TestTools.UnitTesting;
21 public class DocumentTest
24 public void InsertSingleLineTest()
26 DummyRender render = new DummyRender();
27 Document doc = new Document();
28 doc.LayoutLines.Render = render;
29 DummyView view = new DummyView(doc, render);
31 doc.Append("a\nb\nc\nd");
32 Assert.IsTrue(view.LayoutLines[0] == "a\n" &&
33 view.LayoutLines[1] == "b\n" &&
34 view.LayoutLines[2] == "c\n" &&
35 view.LayoutLines[3] == "d");
38 Assert.IsTrue(view.LayoutLines[0] == "a\n" &&
39 view.LayoutLines[1] == "xb\n" &&
40 view.LayoutLines[2] == "c\n" &&
41 view.LayoutLines[3] == "d");
44 Assert.IsTrue(view.LayoutLines[0] == "a\n" &&
45 view.LayoutLines[1] == "xxb\n" &&
46 view.LayoutLines[2] == "c\n" &&
47 view.LayoutLines[3] == "d");
50 Assert.IsTrue(view.LayoutLines[0] == "a\n" &&
51 view.LayoutLines[1] == "xxb\n" &&
52 view.LayoutLines[2] == "xc\n" &&
53 view.LayoutLines[3] == "d");
56 Assert.IsTrue(view.LayoutLines[0] == "xa\n" &&
57 view.LayoutLines[1] == "xxb\n" &&
58 view.LayoutLines[2] == "xc\n" &&
59 view.LayoutLines[3] == "d");
64 public void InsertMultiLineTest()
66 DummyRender render = new DummyRender();
67 Document doc = new Document();
68 doc.LayoutLines.Render = render;
69 DummyView view = new DummyView(doc, render);
72 doc.Append("a\nb\nc\nd");
74 doc.Insert(2, "f\ne");
76 view.LayoutLines[0] == "a\n" &&
77 view.LayoutLines[1] == "f\n" &&
78 view.LayoutLines[2] == "eb\n" &&
79 view.LayoutLines[3] == "c\n" &&
80 view.LayoutLines[4] == "d");
82 doc.Insert(3, "g\nh");
84 view.LayoutLines[0] == "a\n" &&
85 view.LayoutLines[1] == "fg\n" &&
86 view.LayoutLines[2] == "h\n" &&
87 view.LayoutLines[3] == "eb\n" &&
88 view.LayoutLines[4] == "c\n" &&
89 view.LayoutLines[5] == "d");
91 doc.Insert(0, "x\ny");
93 view.LayoutLines[0] == "x\n" &&
94 view.LayoutLines[1] == "ya\n" &&
95 view.LayoutLines[2] == "fg\n" &&
96 view.LayoutLines[3] == "h\n" &&
97 view.LayoutLines[4] == "eb\n" &&
98 view.LayoutLines[5] == "c\n" &&
99 view.LayoutLines[6] == "d");
103 public void RemoveSingleLineTest()
105 DummyRender render = new DummyRender();
106 Document doc = new Document();
107 doc.LayoutLines.Render = render;
108 DummyView view = new DummyView(doc, render);
110 doc.Append("aa\nbb\ncc\ndd");
114 view.LayoutLines[0] == "aa\n" &&
115 view.LayoutLines[1] == "bb\n" &&
116 view.LayoutLines[2] == "cc\n" &&
117 view.LayoutLines[3] == "d"
122 view.LayoutLines[0] == "aa\n" &&
123 view.LayoutLines[1] == "bb\n" &&
124 view.LayoutLines[2] == "cc\n" &&
125 view.LayoutLines[3] == ""
130 view.LayoutLines[0] == "a\n" &&
131 view.LayoutLines[1] == "bb\n" &&
132 view.LayoutLines[2] == "cc\n" &&
133 view.LayoutLines[3] == ""
138 public void RemoveMultiLineTest()
140 DummyRender render = new DummyRender();
141 Document doc = new Document();
142 doc.LayoutLines.Render = render;
143 DummyView view = new DummyView(doc, render);
155 view.LayoutLines[0] == "a\n" &&
156 view.LayoutLines[1] == "d\n" &&
157 view.LayoutLines[2] == "e\n" &&
158 view.LayoutLines[3] == "f\n");
162 view.LayoutLines[0] == "a\n" &&
163 view.LayoutLines[1] == "d\n");
172 Assert.IsTrue(view.LayoutLines[0] == "a\n");
184 view.LayoutLines[0] == "a\n" &&
185 view.LayoutLines[1] == "d\n" &&
186 view.LayoutLines[2] == "e\n" &&
187 view.LayoutLines[3] == "f\n");
191 public void QueryTest()
193 DummyRender render = new DummyRender();
194 Document doc = new Document();
195 doc.LayoutLines.Render = render;
196 DummyView view = new DummyView(doc, render);
198 doc.Append("a\nb\nc");
200 Assert.IsTrue(view.LayoutLines.GetIndexFromLineNumber(1) == 2);
201 Assert.IsTrue(view.LayoutLines.GetLengthFromLineNumber(1) == 2);
202 Assert.IsTrue(view.LayoutLines.GetLineNumberFromIndex(2) == 1);
203 TextPoint tp = view.LayoutLines.GetTextPointFromIndex(2);
204 Assert.IsTrue(tp.row == 1 && tp.col == 0);
205 Assert.IsTrue(view.LayoutLines.GetIndexFromTextPoint(tp) == 2);
209 Assert.IsTrue(view.LayoutLines.GetIndexFromLineNumber(2) == 5);
210 Assert.IsTrue(view.LayoutLines.GetLineNumberFromIndex(5) == 2);
211 tp = view.LayoutLines.GetTextPointFromIndex(5);
212 Assert.IsTrue(tp.row == 2 && tp.col == 0);
213 Assert.IsTrue(view.LayoutLines.GetIndexFromTextPoint(tp) == 5);
217 Assert.IsTrue(view.LayoutLines.GetIndexFromLineNumber(2) == 6);
218 Assert.IsTrue(view.LayoutLines.GetLineNumberFromIndex(6) == 2);
219 tp = view.LayoutLines.GetTextPointFromIndex(6);
220 Assert.IsTrue(tp.row == 2 && tp.col == 0);
221 Assert.IsTrue(view.LayoutLines.GetIndexFromTextPoint(tp) == 6);
225 public void FindTest1()
227 DummyRender render = new DummyRender();
228 Document doc = new Document();
229 doc.LayoutLines.Render = render;
230 doc.Append("is this a pen");
231 doc.SetFindParam("is", false, RegexOptions.None);
232 IEnumerator<SearchResult> it = doc.Find();
234 SearchResult sr = it.Current;
235 Assert.IsTrue(sr.Start == 0 && sr.End == 1);
238 Assert.IsTrue(sr.Start == 5 && sr.End == 6);
242 public void FindTest2()
244 DummyRender render = new DummyRender();
245 Document doc = new Document();
246 doc.LayoutLines.Render = render;
247 doc.Append("is this a pen");
248 doc.SetFindParam("is", false, RegexOptions.None);
249 IEnumerator<SearchResult> it = doc.Find(3,4);
251 SearchResult sr = it.Current;
252 Assert.IsTrue(sr.Start == 5 && sr.End == 6);
256 public void FindTest3()
258 DummyRender render = new DummyRender();
259 Document doc = new Document();
260 doc.LayoutLines.Render = render;
261 doc.Append("is this a pen");
262 doc.SetFindParam("is", false, RegexOptions.None);
263 IEnumerator<SearchResult> it = doc.Find(0, 8);
265 SearchResult sr = it.Current;
266 doc.Replace(sr.Start, sr.End - sr.Start + 1, "aaa");
269 Assert.IsTrue(sr.Start == 6 && sr.End == 7);
273 public void ReaderTest1()
275 DummyRender render = new DummyRender();
276 Document doc = new Document();
277 doc.LayoutLines.Render = render;
279 DocumentReader reader = doc.CreateReader();
280 Assert.IsTrue(reader.Read() == 'a');
281 Assert.IsTrue(reader.Peek() == -1);
285 public void ReaderTest2()
287 DummyRender render = new DummyRender();
288 Document doc = new Document();
289 doc.LayoutLines.Render = render;
291 DocumentReader reader = doc.CreateReader();
292 char[] buf = new char[2];
293 int count = reader.Read(buf,1,2);
294 Assert.IsTrue(buf[0] == 'b' && buf[1] == 'c');
295 Assert.IsTrue(count == 2);
296 Assert.IsTrue(reader.Peek() == -1);
300 public void GetLinesText()
302 DummyRender render = new DummyRender();
303 Document doc = new Document();
304 doc.LayoutLines.Render = render;
305 doc.Append("a\nb\nc");
306 var result = doc.GetLines(0, doc.Length - 1).ToArray();
307 Assert.AreEqual("a\n", result[0]);
308 Assert.AreEqual("b\n", result[1]);
309 Assert.AreEqual("c", result[2]);
313 public void IndexOfText()
315 StringBuffer buf = new StringBuffer();
316 string str = "this is a pen";
317 buf.Replace(0, 0, str, str.Length);
319 int index = buf.IndexOf("is", 0);
320 Assert.IsTrue(index == 2);
322 index = buf.IndexOf("is", 4);
323 Assert.IsTrue(index == 5);
325 index = buf.IndexOf("xy", 0);
326 Assert.IsTrue(index == -1);
328 index = buf.IndexOf("Is", 0,true);
329 Assert.IsTrue(index == 2);
333 buf.Replace(0, 0, str, str.Length);
334 index = buf.IndexOf("ABC", 0);
335 Assert.IsTrue(index == 1);
337 index = buf.IndexOf("abc", 0,true);
338 Assert.IsTrue(index == 1);
340 index = buf.IndexOf("abc", 0);
341 Assert.IsTrue(index == -1);
345 public void ReplaceNonRegexAllTest()
347 DummyRender render = new DummyRender();
348 Document doc = new Document();
349 doc.LayoutLines.Render = render;
350 doc.Append("this is a pen\n");
351 doc.Append("this is a pen\n");
352 doc.SetFindParam("is", false, RegexOptions.None);
353 doc.ReplaceAll("aaa", false);
354 Assert.IsTrue(doc.ToString(0) == "thaaa aaa a pen\nthaaa aaa a pen\n");
358 public void ReplaceRegexAllTest()
360 DummyRender render = new DummyRender();
361 Document doc = new Document();
362 doc.LayoutLines.Render = render;
363 doc.Append("this is a pen\n");
364 doc.Append("this is a pen\n");
365 doc.SetFindParam("[a-z]+", true, RegexOptions.None);
366 doc.ReplaceAll("aaa", false);
367 Assert.IsTrue(doc.ToString(0) == "aaa aaa aaa aaa\naaa aaa aaa aaa\n");
371 public void ReplaceAllTest()
373 DummyRender render = new DummyRender();
374 Document doc = new Document();
375 doc.LayoutLines.Render = render;
376 doc.Append("this is a pen");
377 doc.ReplaceAll2("is", "aaa");
378 Assert.IsTrue(doc.ToString(0) == "thaaa aaa a pen");
382 public void MarkerTest()
384 DummyRender render = new DummyRender();
385 Document doc = new Document();
386 doc.LayoutLines.Render = render;
387 doc.Append("this is a pen");
388 doc.SetMarker(MarkerIDs.Defalut, Marker.Create(0, 4, HilightType.Sold));
390 var markers = doc.Markers.Get(MarkerIDs.Defalut);
391 foreach(var m in markers)
392 Assert.IsTrue(m.start == 0 && m.length == 4);
394 doc.SetMarker(MarkerIDs.Defalut, Marker.Create(5, 2, HilightType.Sold));
395 doc.RemoveMarker(MarkerIDs.Defalut, 0, 4);
396 markers = doc.Markers.Get(MarkerIDs.Defalut);
397 foreach (var m in markers)
398 Assert.IsTrue(m.start == 5 && m.length == 2);
401 markers = doc.Markers.Get(MarkerIDs.Defalut, 0);
402 foreach (var m in markers)
403 Assert.IsTrue(m.start == 6 && m.length == 2);
406 markers = doc.Markers.Get(MarkerIDs.Defalut, 0);
407 foreach (var m in markers)
408 Assert.IsTrue(m.start == 6 && m.length == 2);
410 doc.SetMarker(MarkerIDs.URL, Marker.Create(0, 4, HilightType.Sold));
411 doc.Markers.Clear(MarkerIDs.Defalut);
412 foreach (int id in doc.Markers.IDs)
414 markers = doc.Markers.Get(id, 0);
415 foreach (var m in markers)
416 Assert.IsTrue(m.start == 0 && m.length == 4);
421 public void WatchDogTest()
423 RegexMarkerPattern dog = new RegexMarkerPattern(new Regex("h[a-z]+"), HilightType.Url,new Color(0,0,0,255));
424 IEnumerable<Marker> result = new List<Marker>(){
425 Marker.Create(0,4,HilightType.Url,new Color(0,0,0,255)),
426 Marker.Create(5,4,HilightType.Url,new Color(0,0,0,255))
428 string str = "html haml";
430 DummyRender render = new DummyRender();
431 Document doc = new Document();
432 doc.LayoutLines.Render = render;
433 DummyView view = new DummyView(doc, render);
434 doc.MarkerPatternSet.Add(MarkerIDs.Defalut, dog);
437 IEnumerable<Marker> actual = doc.MarkerPatternSet.GetMarkers(new CreateLayoutEventArgs(0, str.Length, str));
438 this.AreEqual(result, actual);
442 public void CallAutoIndentHookWhenEnter()
445 Document doc = new Document();
446 doc.AutoIndentHook += (s, e) => { called = true; };
447 doc.Replace(0, 0, Document.NewLine.ToString(), true);
448 Assert.AreEqual(true, called);
451 doc.Replace(0, 0, "aaa", true);
452 Assert.AreEqual(false, called);
456 public void SaveAndLoadFile()
458 const string content = "aaaa";
459 Document doc = new Document();
462 System.IO.StreamWriter sw = new System.IO.StreamWriter("test.txt");
463 System.Threading.Tasks.Task t = doc.SaveAsync(sw);
469 System.IO.StreamReader sr = new System.IO.StreamReader("test.txt");
470 t = doc.LoadAsync(sr);
474 Assert.AreEqual(content, doc.ToString(0));
477 void AreEqual<T>(IEnumerable<T> t1, IEnumerable<T> t2)
479 Assert.AreEqual(t1.Count(), t2.Count());
481 IEnumerator<T> e1 = t1.GetEnumerator();
482 IEnumerator<T> e2 = t2.GetEnumerator();
484 while (e1.MoveNext() && e2.MoveNext())
486 Assert.AreEqual(e1.Current, e2.Current);