Skip to content

Commit 94fa38f

Browse files
committed
Make unit tests dealing with multiple matched contexts be more stringent by testing all contexts, not just the one in the selection.
1 parent a412513 commit 94fa38f

File tree

1 file changed

+34
-20
lines changed

1 file changed

+34
-20
lines changed

RubberduckTests/Grammar/SelectionExtensionsTests.cs

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -339,10 +339,11 @@ End If
339339
var state = MockParser.CreateAndParse(vbe.Object);
340340
var tree = state.GetParseTree(new QualifiedModuleName(component));
341341
var visitor = new IfStmtContextElementCollectorVisitor();
342-
var context = visitor.Visit(tree).First();
342+
var contexts = visitor.Visit(tree);
343343
var selection = new Selection(6, 1, 10, 7);
344344

345-
Assert.IsTrue(context.Contains(selection));
345+
Assert.IsTrue(contexts.ElementAt(0).Contains(selection)); // first If block
346+
Assert.IsFalse(contexts.ElementAt(1).Contains(selection)); // second If block
346347
}
347348

348349
[TestMethod]
@@ -375,10 +376,11 @@ End If
375376
var state = MockParser.CreateAndParse(vbe.Object);
376377
var tree = state.GetParseTree(new QualifiedModuleName(component));
377378
var visitor = new IfStmtContextElementCollectorVisitor();
378-
var context = visitor.Visit(tree).Last();
379+
var contexts = visitor.Visit(tree);
379380
var selection = new Selection(6, 1, 10, 7);
380381

381-
Assert.IsFalse(context.Contains(selection));
382+
Assert.IsTrue(contexts.ElementAt(0).Contains(selection)); // first If block
383+
Assert.IsFalse(contexts.ElementAt(1).Contains(selection)); // second If block
382384
}
383385

384386
[TestMethod]
@@ -411,10 +413,11 @@ End If
411413
var state = MockParser.CreateAndParse(vbe.Object);
412414
var tree = state.GetParseTree(new QualifiedModuleName(component));
413415
var visitor = new IfStmtContextElementCollectorVisitor();
414-
var context = visitor.Visit(tree).Last();
416+
var contexts = visitor.Visit(tree);
415417
var selection = new Selection(12, 1, 16, 7);
416418

417-
Assert.IsTrue(context.Contains(selection));
419+
Assert.IsFalse(contexts.ElementAt(0).Contains(selection)); // first If block
420+
Assert.IsTrue(contexts.ElementAt(1).Contains(selection)); // second If block
418421
}
419422

420423
[TestMethod]
@@ -447,11 +450,13 @@ End If
447450
var state = MockParser.CreateAndParse(vbe.Object);
448451
var tree = state.GetParseTree(new QualifiedModuleName(component));
449452
var visitor = new IfStmtContextElementCollectorVisitor();
450-
var context = visitor.Visit(tree).Last();
451-
var token = context.Stop;
453+
var contexts = visitor.Visit(tree);
454+
var token = contexts.ElementAt(1).Stop;
452455
var selection = new Selection(12, 1, 16, 7);
453456

454-
Assert.IsTrue(selection.Contains(token));
457+
Assert.IsTrue(selection.Contains(token)); // last token in second If block
458+
Assert.IsFalse(contexts.ElementAt(0).Contains(selection)); // first If block
459+
Assert.IsTrue(contexts.ElementAt(1).Contains(selection)); // second If block
455460
}
456461

457462
[TestMethod]
@@ -494,7 +499,7 @@ End If
494499
[TestMethod]
495500
[TestCategory("Grammar")]
496501
[TestCategory("Selection")]
497-
public void Selection__Contains_Only_Innermost_Nested_Context()
502+
public void Selection_Contains_Only_Innermost_Nested_Context()
498503
{
499504
const string inputCode = @"
500505
Option Explicit
@@ -524,17 +529,20 @@ End If
524529
var state = MockParser.CreateAndParse(vbe.Object);
525530
var tree = state.GetParseTree(new QualifiedModuleName(component));
526531
var visitor = new IfStmtContextElementCollectorVisitor();
527-
var context = visitor.Visit(tree).First(); //returns innermost statement first then topmost consecutively
528-
var token = context.Stop;
532+
var contexts = visitor.Visit(tree);
533+
var token = contexts.ElementAt(0).Stop;
529534
var selection = new Selection(8, 1, 10, 9);
530535

531-
Assert.IsTrue(selection.Contains(token));
536+
Assert.IsTrue(selection.Contains(token)); // last token in innermost If block
537+
Assert.IsTrue(contexts.ElementAt(0).Contains(selection)); // innermost If block
538+
Assert.IsFalse(contexts.ElementAt(1).Contains(selection)); // first outer If block
539+
Assert.IsFalse(contexts.ElementAt(2).Contains(selection)); // second outer If block
532540
}
533541

534542
[TestMethod]
535543
[TestCategory("Grammar")]
536544
[TestCategory("Selection")]
537-
public void Selection__Contains_Both_Nested_Context()
545+
public void Selection_Contains_Both_Nested_Context()
538546
{
539547
const string inputCode = @"
540548
Option Explicit
@@ -564,11 +572,14 @@ End If
564572
var state = MockParser.CreateAndParse(vbe.Object);
565573
var tree = state.GetParseTree(new QualifiedModuleName(component));
566574
var visitor = new IfStmtContextElementCollectorVisitor();
567-
var context = visitor.Visit(tree).First(); //returns innermost statement first then topmost consecutively
568-
var token = context.Stop;
575+
var contexts = visitor.Visit(tree); //returns innermost statement first then topmost consecutively
576+
var token = contexts.ElementAt(0).Stop;
569577
var selection = new Selection(6, 1, 13, 7);
570578

571-
Assert.IsTrue(selection.Contains(token));
579+
Assert.IsTrue(selection.Contains(token)); // last token in innermost If block
580+
Assert.IsTrue(contexts.ElementAt(0).Contains(selection)); // innermost If block
581+
Assert.IsTrue(contexts.ElementAt(1).Contains(selection)); // first outer If block
582+
Assert.IsFalse(contexts.ElementAt(2).Contains(selection)); // second outer If block
572583
}
573584

574585
[TestMethod]
@@ -604,11 +615,14 @@ End If
604615
var state = MockParser.CreateAndParse(vbe.Object);
605616
var tree = state.GetParseTree(new QualifiedModuleName(component));
606617
var visitor = new IfStmtContextElementCollectorVisitor();
607-
var context = visitor.Visit(tree).First(); //returns innermost statement first then topmost consecutively
608-
var token = context.Stop;
618+
var contexts = visitor.Visit(tree); //returns innermost statement first then topmost consecutively
619+
var token = contexts.ElementAt(0).Stop;
609620
var selection = new Selection(15, 1, 19, 7);
610621

611-
Assert.IsFalse(selection.Contains(token));
622+
Assert.IsFalse(selection.Contains(token)); // last token in innermost If block
623+
Assert.IsFalse(contexts.ElementAt(0).Contains(selection)); // innermost If block
624+
Assert.IsFalse(contexts.ElementAt(1).Contains(selection)); // first outer if block
625+
Assert.IsTrue(contexts.ElementAt(2).Contains(selection)); // second outer If block
612626
}
613627
}
614628
}

0 commit comments

Comments
 (0)