private void StoreCurrentNode(object sender, CaretPositionChangedEventArgs e)
 {
     if(e?.TextView == null)
     {
         return;
     }
     var textView = e.TextView;
     var caretPosition = new CaretPositionLineInfo(textView, textView.Caret.Position.BufferPosition);
     StoreCurrentNode(textView.TextSnapshot.GetText(), caretPosition.LineNumber, caretPosition.LinePosition);
 }
        public void LineNumberIsAdjusted(int lineNumber)
        {
            // Arrange
            const int expectedAdjustment = 1;
            var textSnapshot = Substitute.For<ITextSnapshot>();
            textSnapshot.GetLineNumberFromPosition(Arg.Any<int>()).Returns(lineNumber);

            var textView = Substitute.For<ITextView>();
            textView.TextSnapshot.Returns(textSnapshot);

            // Act
            var caretPositionLineInfo = new CaretPositionLineInfo(textView, 0);

            // Assert
            Assert.That(caretPositionLineInfo.LineNumber, Is.EqualTo(lineNumber + expectedAdjustment));
        }
        public void LinePositionIsAdjusted(int caretPosition)
        {
            // Arrange
            const int expectedAdjustment = 1;
            var textSnapshot = Substitute.For<ITextSnapshot>();
            textSnapshot.GetLineNumberFromPosition(Arg.Is(caretPosition)).Returns(0);
            textSnapshot.Length.Returns(caretPosition);

            var textView = Substitute.For<ITextView>();
            textView.TextSnapshot.Returns(textSnapshot);

            // Act
            var caretPositionLineInfo = new CaretPositionLineInfo(textView, caretPosition);

            // Assert
            Assert.That(caretPositionLineInfo.LinePosition, Is.EqualTo(caretPosition + expectedAdjustment));
        }