1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
5
using System.Collections.Generic;
8
namespace ICSharpCode.AvalonEdit.Document
11
public class LineManagerTests
13
TextDocument document;
18
document = new TextDocument();
22
public void CheckEmptyDocument()
24
Assert.AreEqual("", document.Text);
25
Assert.AreEqual(0, document.TextLength);
26
Assert.AreEqual(1, document.LineCount);
30
public void CheckClearingDocument()
32
document.Text = "Hello,\nWorld!";
33
Assert.AreEqual(2, document.LineCount);
35
Assert.AreEqual("", document.Text);
36
Assert.AreEqual(0, document.TextLength);
37
Assert.AreEqual(1, document.LineCount);
41
public void CheckGetLineInEmptyDocument()
43
Assert.AreEqual(1, document.Lines.Count);
44
List<DocumentLine> lines = new List<DocumentLine>(document.Lines);
45
Assert.AreEqual(1, lines.Count);
46
DocumentLine line = document.Lines[0];
47
Assert.AreSame(line, lines[0]);
48
Assert.AreSame(line, document.GetLineByNumber(1));
49
Assert.AreSame(line, document.GetLineByOffset(0));
53
public void CheckLineSegmentInEmptyDocument()
55
DocumentLine line = document.GetLineByNumber(1);
56
Assert.AreEqual(1, line.LineNumber);
57
Assert.AreEqual(0, line.Offset);
58
Assert.IsFalse(line.IsDeleted);
59
Assert.AreEqual(0, line.Length);
60
Assert.AreEqual(0, line.TotalLength);
61
Assert.AreEqual(0, line.DelimiterLength);
65
public void LineIndexOfTest()
67
DocumentLine line = document.GetLineByNumber(1);
68
Assert.AreEqual(0, document.Lines.IndexOf(line));
69
DocumentLine lineFromOtherDocument = new TextDocument().GetLineByNumber(1);
70
Assert.AreEqual(-1, document.Lines.IndexOf(lineFromOtherDocument));
71
document.Text = "a\nb\nc";
72
DocumentLine middleLine = document.GetLineByNumber(2);
73
Assert.AreEqual(1, document.Lines.IndexOf(middleLine));
74
document.Remove(1, 3);
75
Assert.IsTrue(middleLine.IsDeleted);
76
Assert.AreEqual(-1, document.Lines.IndexOf(middleLine));
80
public void InsertInEmptyDocument()
82
document.Insert(0, "a");
83
Assert.AreEqual(document.LineCount, 1);
84
DocumentLine line = document.GetLineByNumber(1);
85
Assert.AreEqual("a", document.GetText(line));
92
Assert.AreEqual(document.LineCount, 1);
93
DocumentLine line = document.GetLineByNumber(1);
94
Assert.AreEqual("a", document.GetText(line));
98
public void InsertNothing()
100
document.Insert(0, "");
101
Assert.AreEqual(document.LineCount, 1);
102
Assert.AreEqual(document.TextLength, 0);
105
[Test, ExpectedException(typeof(ArgumentNullException))]
106
public void InsertNull()
108
document.Insert(0, null);
111
[Test, ExpectedException(typeof(ArgumentNullException))]
112
public void SetTextNull()
114
document.Text = null;
118
public void RemoveNothing()
120
document.Remove(0, 0);
121
Assert.AreEqual(document.LineCount, 1);
122
Assert.AreEqual(document.TextLength, 0);
125
[Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
126
public void GetCharAt0EmptyDocument()
128
document.GetCharAt(0);
131
[Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
132
public void GetCharAtNegativeOffset()
134
document.Text = "a\nb";
135
document.GetCharAt(-1);
138
[Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
139
public void GetCharAtEndOffset()
141
document.Text = "a\nb";
142
document.GetCharAt(document.TextLength);
145
[Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
146
public void InsertAtNegativeOffset()
148
document.Text = "a\nb";
149
document.Insert(-1, "text");
152
[Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
153
public void InsertAfterEndOffset()
155
document.Text = "a\nb";
156
document.Insert(4, "text");
159
[Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
160
public void RemoveNegativeAmount()
162
document.Text = "abcd";
163
document.Remove(2, -1);
166
[Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
167
public void RemoveTooMuch()
169
document.Text = "abcd";
170
document.Remove(2, 10);
173
[Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
174
public void GetLineByNumberNegative()
176
document.Text = "a\nb";
177
document.GetLineByNumber(-1);
180
[Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
181
public void GetLineByNumberTooHigh()
183
document.Text = "a\nb";
184
document.GetLineByNumber(3);
187
[Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
188
public void GetLineByOffsetNegative()
190
document.Text = "a\nb";
191
document.GetLineByOffset(-1);
195
[Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
196
public void GetLineByOffsetToHigh()
198
document.Text = "a\nb";
199
document.GetLineByOffset(10);
203
public void InsertAtEndOffset()
205
document.Text = "a\nb";
206
CheckDocumentLines("a",
208
document.Insert(3, "text");
209
CheckDocumentLines("a",
214
public void GetCharAt()
216
document.Text = "a\r\nb";
217
Assert.AreEqual('a', document.GetCharAt(0));
218
Assert.AreEqual('\r', document.GetCharAt(1));
219
Assert.AreEqual('\n', document.GetCharAt(2));
220
Assert.AreEqual('b', document.GetCharAt(3));
224
public void CheckMixedNewLineTest()
226
const string mixedNewlineText = "line 1\nline 2\r\nline 3\rline 4";
227
document.Text = mixedNewlineText;
228
Assert.AreEqual(mixedNewlineText, document.Text);
229
Assert.AreEqual(4, document.LineCount);
230
for (int i = 1; i < 4; i++) {
231
DocumentLine line = document.GetLineByNumber(i);
232
Assert.AreEqual(i, line.LineNumber);
233
Assert.AreEqual("line " + i, document.GetText(line));
235
Assert.AreEqual(1, document.GetLineByNumber(1).DelimiterLength);
236
Assert.AreEqual(2, document.GetLineByNumber(2).DelimiterLength);
237
Assert.AreEqual(1, document.GetLineByNumber(3).DelimiterLength);
238
Assert.AreEqual(0, document.GetLineByNumber(4).DelimiterLength);
242
public void LfCrIsTwoNewLinesTest()
244
document.Text = "a\n\rb";
245
Assert.AreEqual("a\n\rb", document.Text);
246
CheckDocumentLines("a",
252
public void RemoveFirstPartOfDelimiter()
254
document.Text = "a\r\nb";
255
document.Remove(1, 1);
256
Assert.AreEqual("a\nb", document.Text);
257
CheckDocumentLines("a",
262
public void RemoveLineContentAndJoinDelimiters()
264
document.Text = "a\rb\nc";
265
document.Remove(2, 1);
266
Assert.AreEqual("a\r\nc", document.Text);
267
CheckDocumentLines("a",
272
public void RemoveLineContentAndJoinDelimiters2()
274
document.Text = "a\rb\nc\nd";
275
document.Remove(2, 3);
276
Assert.AreEqual("a\r\nd", document.Text);
277
CheckDocumentLines("a",
282
public void RemoveLineContentAndJoinDelimiters3()
284
document.Text = "a\rb\r\nc";
285
document.Remove(2, 2);
286
Assert.AreEqual("a\r\nc", document.Text);
287
CheckDocumentLines("a",
292
public void RemoveLineContentAndJoinNonMatchingDelimiters()
294
document.Text = "a\nb\nc";
295
document.Remove(2, 1);
296
Assert.AreEqual("a\n\nc", document.Text);
297
CheckDocumentLines("a",
303
public void RemoveLineContentAndJoinNonMatchingDelimiters2()
305
document.Text = "a\nb\rc";
306
document.Remove(2, 1);
307
Assert.AreEqual("a\n\rc", document.Text);
308
CheckDocumentLines("a",
314
public void RemoveMultilineUpToFirstPartOfDelimiter()
316
document.Text = "0\n1\r\n2";
317
document.Remove(1, 3);
318
Assert.AreEqual("0\n2", document.Text);
319
CheckDocumentLines("0",
324
public void RemoveSecondPartOfDelimiter()
326
document.Text = "a\r\nb";
327
document.Remove(2, 1);
328
Assert.AreEqual("a\rb", document.Text);
329
CheckDocumentLines("a",
334
public void RemoveFromSecondPartOfDelimiter()
336
document.Text = "a\r\nb\nc";
337
document.Remove(2, 3);
338
Assert.AreEqual("a\rc", document.Text);
339
CheckDocumentLines("a",
344
public void RemoveFromSecondPartOfDelimiterToDocumentEnd()
346
document.Text = "a\r\nb";
347
document.Remove(2, 2);
348
Assert.AreEqual("a\r", document.Text);
349
CheckDocumentLines("a",
354
public void RemoveUpToMatchingDelimiter1()
356
document.Text = "a\r\nb\nc";
357
document.Remove(2, 2);
358
Assert.AreEqual("a\r\nc", document.Text);
359
CheckDocumentLines("a",
364
public void RemoveUpToMatchingDelimiter2()
366
document.Text = "a\r\nb\r\nc";
367
document.Remove(2, 3);
368
Assert.AreEqual("a\r\nc", document.Text);
369
CheckDocumentLines("a",
374
public void RemoveUpToNonMatchingDelimiter()
376
document.Text = "a\r\nb\rc";
377
document.Remove(2, 2);
378
Assert.AreEqual("a\r\rc", document.Text);
379
CheckDocumentLines("a",
385
public void RemoveTwoCharDelimiter()
387
document.Text = "a\r\nb";
388
document.Remove(1, 2);
389
Assert.AreEqual("ab", document.Text);
390
CheckDocumentLines("ab");
394
public void RemoveOneCharDelimiter()
396
document.Text = "a\nb";
397
document.Remove(1, 1);
398
Assert.AreEqual("ab", document.Text);
399
CheckDocumentLines("ab");
402
void CheckDocumentLines(params string[] lines)
404
Assert.AreEqual(lines.Length, document.LineCount, "LineCount");
405
for (int i = 0; i < lines.Length; i++) {
406
Assert.AreEqual(lines[i], document.GetText(document.Lines[i]), "Text of line " + (i + 1));
411
public void FixUpFirstPartOfDelimiter()
413
document.Text = "a\n\nb";
414
document.Replace(1, 1, "\r");
415
Assert.AreEqual("a\r\nb", document.Text);
416
CheckDocumentLines("a",
421
public void FixUpSecondPartOfDelimiter()
423
document.Text = "a\r\rb";
424
document.Replace(2, 1, "\n");
425
Assert.AreEqual("a\r\nb", document.Text);
426
CheckDocumentLines("a",
431
public void InsertInsideDelimiter()
433
document.Text = "a\r\nc";
434
document.Insert(2, "b");
435
Assert.AreEqual("a\rb\nc", document.Text);
436
CheckDocumentLines("a",
442
public void InsertInsideDelimiter2()
444
document.Text = "a\r\nd";
445
document.Insert(2, "b\nc");
446
Assert.AreEqual("a\rb\nc\nd", document.Text);
447
CheckDocumentLines("a",
454
public void InsertInsideDelimiter3()
456
document.Text = "a\r\nc";
457
document.Insert(2, "b\r");
458
Assert.AreEqual("a\rb\r\nc", document.Text);
459
CheckDocumentLines("a",
465
public void ExtendDelimiter1()
467
document.Text = "a\nc";
468
document.Insert(1, "b\r");
469
Assert.AreEqual("ab\r\nc", document.Text);
470
CheckDocumentLines("ab",
475
public void ExtendDelimiter2()
477
document.Text = "a\rc";
478
document.Insert(2, "\nb");
479
Assert.AreEqual("a\r\nbc", document.Text);
480
CheckDocumentLines("a",
485
public void ReplaceLineContentBetweenMatchingDelimiters()
487
document.Text = "a\rb\nc";
488
document.Replace(2, 1, "x");
489
Assert.AreEqual("a\rx\nc", document.Text);
490
CheckDocumentLines("a",
496
public void GetOffset()
498
document.Text = "Hello,\nWorld!";
499
Assert.AreEqual(0, document.GetOffset(1, 1));
500
Assert.AreEqual(1, document.GetOffset(1, 2));
501
Assert.AreEqual(5, document.GetOffset(1, 6));
502
Assert.AreEqual(6, document.GetOffset(1, 7));
503
Assert.AreEqual(7, document.GetOffset(2, 1));
504
Assert.AreEqual(8, document.GetOffset(2, 2));
505
Assert.AreEqual(12, document.GetOffset(2, 6));
506
Assert.AreEqual(13, document.GetOffset(2, 7));
510
public void GetOffsetIgnoreNegativeColumns()
512
document.Text = "Hello,\nWorld!";
513
Assert.AreEqual(0, document.GetOffset(1, -1));
514
Assert.AreEqual(0, document.GetOffset(1, -100));
515
Assert.AreEqual(0, document.GetOffset(1, 0));
516
Assert.AreEqual(7, document.GetOffset(2, -1));
517
Assert.AreEqual(7, document.GetOffset(2, -100));
518
Assert.AreEqual(7, document.GetOffset(2, 0));
522
public void GetOffsetIgnoreTooHighColumns()
524
document.Text = "Hello,\nWorld!";
525
Assert.AreEqual(6, document.GetOffset(1, 8));
526
Assert.AreEqual(6, document.GetOffset(1, 100));
527
Assert.AreEqual(13, document.GetOffset(2, 8));
528
Assert.AreEqual(13, document.GetOffset(2, 100));