PageRenderTime 47ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Document/LineManagerTests.cs

https://github.com/josephcooney/ILSpy
C# | 531 lines | 472 code | 57 blank | 2 comment | 2 complexity | 4dabca3c5b6e5d70b2716a8c7798bb9d MD5 | raw file
  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)
  3. using System;
  4. using System.Collections.Generic;
  5. using NUnit.Framework;
  6. namespace ICSharpCode.AvalonEdit.Document
  7. {
  8. [TestFixture]
  9. public class LineManagerTests
  10. {
  11. TextDocument document;
  12. [SetUp]
  13. public void SetUp()
  14. {
  15. document = new TextDocument();
  16. }
  17. [Test]
  18. public void CheckEmptyDocument()
  19. {
  20. Assert.AreEqual("", document.Text);
  21. Assert.AreEqual(0, document.TextLength);
  22. Assert.AreEqual(1, document.LineCount);
  23. }
  24. [Test]
  25. public void CheckClearingDocument()
  26. {
  27. document.Text = "Hello,\nWorld!";
  28. Assert.AreEqual(2, document.LineCount);
  29. document.Text = "";
  30. Assert.AreEqual("", document.Text);
  31. Assert.AreEqual(0, document.TextLength);
  32. Assert.AreEqual(1, document.LineCount);
  33. }
  34. [Test]
  35. public void CheckGetLineInEmptyDocument()
  36. {
  37. Assert.AreEqual(1, document.Lines.Count);
  38. List<DocumentLine> lines = new List<DocumentLine>(document.Lines);
  39. Assert.AreEqual(1, lines.Count);
  40. DocumentLine line = document.Lines[0];
  41. Assert.AreSame(line, lines[0]);
  42. Assert.AreSame(line, document.GetLineByNumber(1));
  43. Assert.AreSame(line, document.GetLineByOffset(0));
  44. }
  45. [Test]
  46. public void CheckLineSegmentInEmptyDocument()
  47. {
  48. DocumentLine line = document.GetLineByNumber(1);
  49. Assert.AreEqual(1, line.LineNumber);
  50. Assert.AreEqual(0, line.Offset);
  51. Assert.IsFalse(line.IsDeleted);
  52. Assert.AreEqual(0, line.Length);
  53. Assert.AreEqual(0, line.TotalLength);
  54. Assert.AreEqual(0, line.DelimiterLength);
  55. }
  56. [Test]
  57. public void LineIndexOfTest()
  58. {
  59. DocumentLine line = document.GetLineByNumber(1);
  60. Assert.AreEqual(0, document.Lines.IndexOf(line));
  61. DocumentLine lineFromOtherDocument = new TextDocument().GetLineByNumber(1);
  62. Assert.AreEqual(-1, document.Lines.IndexOf(lineFromOtherDocument));
  63. document.Text = "a\nb\nc";
  64. DocumentLine middleLine = document.GetLineByNumber(2);
  65. Assert.AreEqual(1, document.Lines.IndexOf(middleLine));
  66. document.Remove(1, 3);
  67. Assert.IsTrue(middleLine.IsDeleted);
  68. Assert.AreEqual(-1, document.Lines.IndexOf(middleLine));
  69. }
  70. [Test]
  71. public void InsertInEmptyDocument()
  72. {
  73. document.Insert(0, "a");
  74. Assert.AreEqual(document.LineCount, 1);
  75. DocumentLine line = document.GetLineByNumber(1);
  76. Assert.AreEqual("a", document.GetText(line));
  77. }
  78. [Test]
  79. public void SetText()
  80. {
  81. document.Text = "a";
  82. Assert.AreEqual(document.LineCount, 1);
  83. DocumentLine line = document.GetLineByNumber(1);
  84. Assert.AreEqual("a", document.GetText(line));
  85. }
  86. [Test]
  87. public void InsertNothing()
  88. {
  89. document.Insert(0, "");
  90. Assert.AreEqual(document.LineCount, 1);
  91. Assert.AreEqual(document.TextLength, 0);
  92. }
  93. [Test, ExpectedException(typeof(ArgumentNullException))]
  94. public void InsertNull()
  95. {
  96. document.Insert(0, null);
  97. }
  98. [Test, ExpectedException(typeof(ArgumentNullException))]
  99. public void SetTextNull()
  100. {
  101. document.Text = null;
  102. }
  103. [Test]
  104. public void RemoveNothing()
  105. {
  106. document.Remove(0, 0);
  107. Assert.AreEqual(document.LineCount, 1);
  108. Assert.AreEqual(document.TextLength, 0);
  109. }
  110. [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
  111. public void GetCharAt0EmptyDocument()
  112. {
  113. document.GetCharAt(0);
  114. }
  115. [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
  116. public void GetCharAtNegativeOffset()
  117. {
  118. document.Text = "a\nb";
  119. document.GetCharAt(-1);
  120. }
  121. [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
  122. public void GetCharAtEndOffset()
  123. {
  124. document.Text = "a\nb";
  125. document.GetCharAt(document.TextLength);
  126. }
  127. [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
  128. public void InsertAtNegativeOffset()
  129. {
  130. document.Text = "a\nb";
  131. document.Insert(-1, "text");
  132. }
  133. [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
  134. public void InsertAfterEndOffset()
  135. {
  136. document.Text = "a\nb";
  137. document.Insert(4, "text");
  138. }
  139. [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
  140. public void RemoveNegativeAmount()
  141. {
  142. document.Text = "abcd";
  143. document.Remove(2, -1);
  144. }
  145. [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
  146. public void RemoveTooMuch()
  147. {
  148. document.Text = "abcd";
  149. document.Remove(2, 10);
  150. }
  151. [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
  152. public void GetLineByNumberNegative()
  153. {
  154. document.Text = "a\nb";
  155. document.GetLineByNumber(-1);
  156. }
  157. [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
  158. public void GetLineByNumberTooHigh()
  159. {
  160. document.Text = "a\nb";
  161. document.GetLineByNumber(3);
  162. }
  163. [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
  164. public void GetLineByOffsetNegative()
  165. {
  166. document.Text = "a\nb";
  167. document.GetLineByOffset(-1);
  168. }
  169. [Test, ExpectedException(typeof(ArgumentOutOfRangeException))]
  170. public void GetLineByOffsetToHigh()
  171. {
  172. document.Text = "a\nb";
  173. document.GetLineByOffset(10);
  174. }
  175. [Test]
  176. public void InsertAtEndOffset()
  177. {
  178. document.Text = "a\nb";
  179. CheckDocumentLines("a",
  180. "b");
  181. document.Insert(3, "text");
  182. CheckDocumentLines("a",
  183. "btext");
  184. }
  185. [Test]
  186. public void GetCharAt()
  187. {
  188. document.Text = "a\r\nb";
  189. Assert.AreEqual('a', document.GetCharAt(0));
  190. Assert.AreEqual('\r', document.GetCharAt(1));
  191. Assert.AreEqual('\n', document.GetCharAt(2));
  192. Assert.AreEqual('b', document.GetCharAt(3));
  193. }
  194. [Test]
  195. public void CheckMixedNewLineTest()
  196. {
  197. const string mixedNewlineText = "line 1\nline 2\r\nline 3\rline 4";
  198. document.Text = mixedNewlineText;
  199. Assert.AreEqual(mixedNewlineText, document.Text);
  200. Assert.AreEqual(4, document.LineCount);
  201. for (int i = 1; i < 4; i++) {
  202. DocumentLine line = document.GetLineByNumber(i);
  203. Assert.AreEqual(i, line.LineNumber);
  204. Assert.AreEqual("line " + i, document.GetText(line));
  205. }
  206. Assert.AreEqual(1, document.GetLineByNumber(1).DelimiterLength);
  207. Assert.AreEqual(2, document.GetLineByNumber(2).DelimiterLength);
  208. Assert.AreEqual(1, document.GetLineByNumber(3).DelimiterLength);
  209. Assert.AreEqual(0, document.GetLineByNumber(4).DelimiterLength);
  210. }
  211. [Test]
  212. public void LfCrIsTwoNewLinesTest()
  213. {
  214. document.Text = "a\n\rb";
  215. Assert.AreEqual("a\n\rb", document.Text);
  216. CheckDocumentLines("a",
  217. "",
  218. "b");
  219. }
  220. [Test]
  221. public void RemoveFirstPartOfDelimiter()
  222. {
  223. document.Text = "a\r\nb";
  224. document.Remove(1, 1);
  225. Assert.AreEqual("a\nb", document.Text);
  226. CheckDocumentLines("a",
  227. "b");
  228. }
  229. [Test]
  230. public void RemoveLineContentAndJoinDelimiters()
  231. {
  232. document.Text = "a\rb\nc";
  233. document.Remove(2, 1);
  234. Assert.AreEqual("a\r\nc", document.Text);
  235. CheckDocumentLines("a",
  236. "c");
  237. }
  238. [Test]
  239. public void RemoveLineContentAndJoinDelimiters2()
  240. {
  241. document.Text = "a\rb\nc\nd";
  242. document.Remove(2, 3);
  243. Assert.AreEqual("a\r\nd", document.Text);
  244. CheckDocumentLines("a",
  245. "d");
  246. }
  247. [Test]
  248. public void RemoveLineContentAndJoinDelimiters3()
  249. {
  250. document.Text = "a\rb\r\nc";
  251. document.Remove(2, 2);
  252. Assert.AreEqual("a\r\nc", document.Text);
  253. CheckDocumentLines("a",
  254. "c");
  255. }
  256. [Test]
  257. public void RemoveLineContentAndJoinNonMatchingDelimiters()
  258. {
  259. document.Text = "a\nb\nc";
  260. document.Remove(2, 1);
  261. Assert.AreEqual("a\n\nc", document.Text);
  262. CheckDocumentLines("a",
  263. "",
  264. "c");
  265. }
  266. [Test]
  267. public void RemoveLineContentAndJoinNonMatchingDelimiters2()
  268. {
  269. document.Text = "a\nb\rc";
  270. document.Remove(2, 1);
  271. Assert.AreEqual("a\n\rc", document.Text);
  272. CheckDocumentLines("a",
  273. "",
  274. "c");
  275. }
  276. [Test]
  277. public void RemoveMultilineUpToFirstPartOfDelimiter()
  278. {
  279. document.Text = "0\n1\r\n2";
  280. document.Remove(1, 3);
  281. Assert.AreEqual("0\n2", document.Text);
  282. CheckDocumentLines("0",
  283. "2");
  284. }
  285. [Test]
  286. public void RemoveSecondPartOfDelimiter()
  287. {
  288. document.Text = "a\r\nb";
  289. document.Remove(2, 1);
  290. Assert.AreEqual("a\rb", document.Text);
  291. CheckDocumentLines("a",
  292. "b");
  293. }
  294. [Test]
  295. public void RemoveFromSecondPartOfDelimiter()
  296. {
  297. document.Text = "a\r\nb\nc";
  298. document.Remove(2, 3);
  299. Assert.AreEqual("a\rc", document.Text);
  300. CheckDocumentLines("a",
  301. "c");
  302. }
  303. [Test]
  304. public void RemoveFromSecondPartOfDelimiterToDocumentEnd()
  305. {
  306. document.Text = "a\r\nb";
  307. document.Remove(2, 2);
  308. Assert.AreEqual("a\r", document.Text);
  309. CheckDocumentLines("a",
  310. "");
  311. }
  312. [Test]
  313. public void RemoveUpToMatchingDelimiter1()
  314. {
  315. document.Text = "a\r\nb\nc";
  316. document.Remove(2, 2);
  317. Assert.AreEqual("a\r\nc", document.Text);
  318. CheckDocumentLines("a",
  319. "c");
  320. }
  321. [Test]
  322. public void RemoveUpToMatchingDelimiter2()
  323. {
  324. document.Text = "a\r\nb\r\nc";
  325. document.Remove(2, 3);
  326. Assert.AreEqual("a\r\nc", document.Text);
  327. CheckDocumentLines("a",
  328. "c");
  329. }
  330. [Test]
  331. public void RemoveUpToNonMatchingDelimiter()
  332. {
  333. document.Text = "a\r\nb\rc";
  334. document.Remove(2, 2);
  335. Assert.AreEqual("a\r\rc", document.Text);
  336. CheckDocumentLines("a",
  337. "",
  338. "c");
  339. }
  340. [Test]
  341. public void RemoveTwoCharDelimiter()
  342. {
  343. document.Text = "a\r\nb";
  344. document.Remove(1, 2);
  345. Assert.AreEqual("ab", document.Text);
  346. CheckDocumentLines("ab");
  347. }
  348. [Test]
  349. public void RemoveOneCharDelimiter()
  350. {
  351. document.Text = "a\nb";
  352. document.Remove(1, 1);
  353. Assert.AreEqual("ab", document.Text);
  354. CheckDocumentLines("ab");
  355. }
  356. void CheckDocumentLines(params string[] lines)
  357. {
  358. Assert.AreEqual(lines.Length, document.LineCount, "LineCount");
  359. for (int i = 0; i < lines.Length; i++) {
  360. Assert.AreEqual(lines[i], document.GetText(document.Lines[i]), "Text of line " + (i + 1));
  361. }
  362. }
  363. [Test]
  364. public void FixUpFirstPartOfDelimiter()
  365. {
  366. document.Text = "a\n\nb";
  367. document.Replace(1, 1, "\r");
  368. Assert.AreEqual("a\r\nb", document.Text);
  369. CheckDocumentLines("a",
  370. "b");
  371. }
  372. [Test]
  373. public void FixUpSecondPartOfDelimiter()
  374. {
  375. document.Text = "a\r\rb";
  376. document.Replace(2, 1, "\n");
  377. Assert.AreEqual("a\r\nb", document.Text);
  378. CheckDocumentLines("a",
  379. "b");
  380. }
  381. [Test]
  382. public void InsertInsideDelimiter()
  383. {
  384. document.Text = "a\r\nc";
  385. document.Insert(2, "b");
  386. Assert.AreEqual("a\rb\nc", document.Text);
  387. CheckDocumentLines("a",
  388. "b",
  389. "c");
  390. }
  391. [Test]
  392. public void InsertInsideDelimiter2()
  393. {
  394. document.Text = "a\r\nd";
  395. document.Insert(2, "b\nc");
  396. Assert.AreEqual("a\rb\nc\nd", document.Text);
  397. CheckDocumentLines("a",
  398. "b",
  399. "c",
  400. "d");
  401. }
  402. [Test]
  403. public void InsertInsideDelimiter3()
  404. {
  405. document.Text = "a\r\nc";
  406. document.Insert(2, "b\r");
  407. Assert.AreEqual("a\rb\r\nc", document.Text);
  408. CheckDocumentLines("a",
  409. "b",
  410. "c");
  411. }
  412. [Test]
  413. public void ExtendDelimiter1()
  414. {
  415. document.Text = "a\nc";
  416. document.Insert(1, "b\r");
  417. Assert.AreEqual("ab\r\nc", document.Text);
  418. CheckDocumentLines("ab",
  419. "c");
  420. }
  421. [Test]
  422. public void ExtendDelimiter2()
  423. {
  424. document.Text = "a\rc";
  425. document.Insert(2, "\nb");
  426. Assert.AreEqual("a\r\nbc", document.Text);
  427. CheckDocumentLines("a",
  428. "bc");
  429. }
  430. [Test]
  431. public void ReplaceLineContentBetweenMatchingDelimiters()
  432. {
  433. document.Text = "a\rb\nc";
  434. document.Replace(2, 1, "x");
  435. Assert.AreEqual("a\rx\nc", document.Text);
  436. CheckDocumentLines("a",
  437. "x",
  438. "c");
  439. }
  440. [Test]
  441. public void GetOffset()
  442. {
  443. document.Text = "Hello,\nWorld!";
  444. Assert.AreEqual(0, document.GetOffset(1, 1));
  445. Assert.AreEqual(1, document.GetOffset(1, 2));
  446. Assert.AreEqual(5, document.GetOffset(1, 6));
  447. Assert.AreEqual(6, document.GetOffset(1, 7));
  448. Assert.AreEqual(7, document.GetOffset(2, 1));
  449. Assert.AreEqual(8, document.GetOffset(2, 2));
  450. Assert.AreEqual(12, document.GetOffset(2, 6));
  451. Assert.AreEqual(13, document.GetOffset(2, 7));
  452. }
  453. [Test]
  454. public void GetOffsetIgnoreNegativeColumns()
  455. {
  456. document.Text = "Hello,\nWorld!";
  457. Assert.AreEqual(0, document.GetOffset(1, -1));
  458. Assert.AreEqual(0, document.GetOffset(1, -100));
  459. Assert.AreEqual(0, document.GetOffset(1, 0));
  460. Assert.AreEqual(7, document.GetOffset(2, -1));
  461. Assert.AreEqual(7, document.GetOffset(2, -100));
  462. Assert.AreEqual(7, document.GetOffset(2, 0));
  463. }
  464. [Test]
  465. public void GetOffsetIgnoreTooHighColumns()
  466. {
  467. document.Text = "Hello,\nWorld!";
  468. Assert.AreEqual(6, document.GetOffset(1, 8));
  469. Assert.AreEqual(6, document.GetOffset(1, 100));
  470. Assert.AreEqual(13, document.GetOffset(2, 8));
  471. Assert.AreEqual(13, document.GetOffset(2, 100));
  472. }
  473. }
  474. }