|
2 | 2 | using Microsoft.VisualStudio.TestTools.UnitTesting;
|
3 | 3 | using Rubberduck.Parsing;
|
4 | 4 | using Rubberduck.Parsing.Grammar;
|
| 5 | +using Rubberduck.Parsing.Symbols; |
5 | 6 | using static Rubberduck.Parsing.Grammar.VBAParser;
|
6 | 7 | using Rubberduck.VBEditor;
|
7 | 8 | using RubberduckTests.Mocks;
|
@@ -637,5 +638,103 @@ End If
|
637 | 638 | Assert.IsFalse(selection.Contains(contexts.ElementAt(1))); // first outer if block
|
638 | 639 | Assert.IsTrue(selection.Contains(contexts.ElementAt(2))); // second outer If block
|
639 | 640 | }
|
| 641 | + |
| 642 | + [TestMethod] |
| 643 | + [TestCategory("Grammar")] |
| 644 | + [TestCategory("Selection")] |
| 645 | + public void GivenOnlyBlankLines_EndColumn_Works() |
| 646 | + { |
| 647 | + const string inputCode = @" |
| 648 | +
|
| 649 | +
|
| 650 | +
|
| 651 | +"; |
| 652 | + |
| 653 | + var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component); |
| 654 | + var pane = component.CodeModule.CodePane; |
| 655 | + var state = MockParser.CreateAndParse(vbe.Object); |
| 656 | + |
| 657 | + |
| 658 | + var tree = (Antlr4.Runtime.ParserRuleContext)state.GetParseTree(new QualifiedModuleName(component)); |
| 659 | + var startToken = tree.Start; |
| 660 | + var endToken = tree.Stop; |
| 661 | + |
| 662 | + // Reminder: token columns are zero-based but lines are one-based |
| 663 | + Assert.IsTrue(startToken.EndColumn() == 0); |
| 664 | + Assert.IsTrue(endToken.EndColumn() == 0); |
| 665 | + } |
| 666 | + |
| 667 | + [TestMethod] |
| 668 | + [TestCategory("Grammar")] |
| 669 | + [TestCategory("Selection")] |
| 670 | + public void GivenOnlyBlankLines_EndLine_Works() |
| 671 | + { |
| 672 | + const string inputCode = @" |
| 673 | +
|
| 674 | +
|
| 675 | +
|
| 676 | +"; |
| 677 | + |
| 678 | + var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component); |
| 679 | + var pane = component.CodeModule.CodePane; |
| 680 | + var state = MockParser.CreateAndParse(vbe.Object); |
| 681 | + |
| 682 | + |
| 683 | + var tree = (Antlr4.Runtime.ParserRuleContext)state.GetParseTree(new QualifiedModuleName(component)); |
| 684 | + var startToken = tree.Start; |
| 685 | + var endToken = tree.Stop; |
| 686 | + |
| 687 | + // Reminder: token columns are zero-based but lines are one-based |
| 688 | + Assert.IsTrue(startToken.EndLine() == 1); |
| 689 | + Assert.IsTrue(endToken.EndLine() == 4); |
| 690 | + } |
| 691 | + |
| 692 | + [TestMethod] |
| 693 | + [TestCategory("Grammar")] |
| 694 | + [TestCategory("Selection")] |
| 695 | + public void GivenBlankLinesWithLeadingSpaces_EndColumn_Works() |
| 696 | + { |
| 697 | + const string inputCode = @" |
| 698 | +
|
| 699 | + |
| 700 | +"; |
| 701 | + |
| 702 | + var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component); |
| 703 | + var pane = component.CodeModule.CodePane; |
| 704 | + var state = MockParser.CreateAndParse(vbe.Object); |
| 705 | + |
| 706 | + |
| 707 | + var tree = (Antlr4.Runtime.ParserRuleContext)state.GetParseTree(new QualifiedModuleName(component)); |
| 708 | + var startToken = tree.Start; |
| 709 | + var endToken = tree.Stop; |
| 710 | + |
| 711 | + // Reminder: token columns are zero-based but lines are one-based |
| 712 | + Assert.IsTrue(startToken.EndColumn() == 0); |
| 713 | + Assert.IsTrue(endToken.EndColumn() == 3); |
| 714 | + } |
| 715 | + |
| 716 | + [TestMethod] |
| 717 | + [TestCategory("Grammar")] |
| 718 | + [TestCategory("Selection")] |
| 719 | + public void GivenBlankLinesWithLeadingSpaces_EndLine_Works() |
| 720 | + { |
| 721 | + const string inputCode = @" |
| 722 | +
|
| 723 | + |
| 724 | +"; |
| 725 | + |
| 726 | + var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component); |
| 727 | + var pane = component.CodeModule.CodePane; |
| 728 | + var state = MockParser.CreateAndParse(vbe.Object); |
| 729 | + |
| 730 | + |
| 731 | + var tree = (Antlr4.Runtime.ParserRuleContext)state.GetParseTree(new QualifiedModuleName(component)); |
| 732 | + var startToken = tree.Start; |
| 733 | + var endToken = tree.Stop; |
| 734 | + |
| 735 | + // Reminder: token columns are zero-based but lines are one-based |
| 736 | + Assert.IsTrue(startToken.EndLine() == 1); |
| 737 | + Assert.IsTrue(endToken.EndLine() == 3); |
| 738 | + } |
640 | 739 | }
|
641 | 740 | }
|
0 commit comments