Skip to content

Commit b8c14a9

Browse files
committed
added tests
1 parent d6de269 commit b8c14a9

File tree

7 files changed

+94
-62
lines changed

7 files changed

+94
-62
lines changed

Rubberduck.Core/AutoComplete/AutoCompleteHandlerBase.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
using System;
2-
using System.Linq;
3-
using Rubberduck.Parsing.VBA.Extensions;
4-
using Rubberduck.Settings;
1+
using Rubberduck.Settings;
52
using Rubberduck.VBEditor;
63
using Rubberduck.VBEditor.Events;
74
using Rubberduck.VBEditor.SourceCodeHandling;
@@ -17,6 +14,6 @@ protected AutoCompleteHandlerBase(ICodePaneHandler pane)
1714

1815
protected ICodePaneHandler CodePaneHandler { get; }
1916

20-
public abstract CodeString Handle(AutoCompleteEventArgs e, AutoCompleteSettings settings);
17+
public abstract bool Handle(AutoCompleteEventArgs e, AutoCompleteSettings settings, out CodeString result);
2118
}
2219
}

Rubberduck.Core/AutoComplete/Service/AutoCompleteService.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,13 @@ private void HandleKeyDown(object sender, AutoCompleteEventArgs e)
135135

136136
foreach (var handler in _handlers)
137137
{
138-
var result = handler.Handle(e, _settings);
139-
if (result != null && e.Handled)
138+
if (!handler.Handle(e, _settings, out _))
140139
{
141-
return;
140+
continue;
142141
}
142+
143+
e.Handled = true;
144+
return;
143145
}
144146
}
145147

Rubberduck.Core/AutoComplete/Service/SelfClosingPairHandler.cs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,31 +30,32 @@ public SelfClosingPairHandler(ICodePaneHandler pane, SelfClosingPairCompletionSe
3030
_scpService = scpService;
3131
}
3232

33-
public override CodeString Handle(AutoCompleteEventArgs e, AutoCompleteSettings settings)
33+
public override bool Handle(AutoCompleteEventArgs e, AutoCompleteSettings settings, out CodeString result)
3434
{
35+
result = null;
3536
if (!_selfClosingPairs.TryGetValue(e.Character, out var pair) && e.Character != '\b')
3637
{
37-
return null;
38+
return false;
3839
}
3940

4041
var original = CodePaneHandler.GetCurrentLogicalLine(e.Module);
41-
if (!HandleInternal(e, original, pair, out var result))
42+
if (!HandleInternal(e, original, pair, out result))
4243
{
43-
return null;
44+
return false;
4445
}
4546

4647
var snippetPosition = new Selection(result.SnippetPosition.StartLine, 1, result.SnippetPosition.EndLine, 1);
4748
result = new CodeString(result.Code, result.CaretPosition, snippetPosition);
4849

4950
e.Handled = true;
50-
return result;
51+
return true;
5152
}
5253

5354
private bool HandleInternal(AutoCompleteEventArgs e, CodeString original, SelfClosingPair pair, out CodeString result)
5455
{
5556
var isPresent = original.CaretLine.EndsWith($"{pair.OpeningChar}{pair.ClosingChar}");
5657

57-
if (!ExecuteSelfClosingPair(e, original, pair, out result))
58+
if (!_scpService.Execute(pair, original, e.Character, out result))
5859
{
5960
return false;
6061
}
@@ -67,7 +68,7 @@ private bool HandleInternal(AutoCompleteEventArgs e, CodeString original, SelfCl
6768
prettified = original; // pretend this didn't happen. note: probably breaks if original has extra whitespace.
6869
}
6970

70-
if (!ExecuteSelfClosingPair(e, prettified, pair, out result))
71+
if (!_scpService.Execute(pair, prettified, e.Character, out result))
7172
{
7273
return false;
7374
}
@@ -91,10 +92,5 @@ private bool HandleInternal(AutoCompleteEventArgs e, CodeString original, SelfCl
9192

9293
return true;
9394
}
94-
95-
private bool ExecuteSelfClosingPair(AutoCompleteEventArgs e, CodeString original, SelfClosingPair pair, out CodeString result)
96-
{
97-
return _scpService.Execute(pair, original, e.Character, out result);
98-
}
9995
}
10096
}

Rubberduck.Core/AutoComplete/Service/SmartConcatenationHandler.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,18 @@ public SmartConcatenationHandler(ICodePaneHandler pane)
1616
{
1717
}
1818

19-
public override CodeString Handle(AutoCompleteEventArgs e, AutoCompleteSettings settings)
19+
public override bool Handle(AutoCompleteEventArgs e, AutoCompleteSettings settings, out CodeString result)
2020
{
21+
result = null;
2122
if (e.Character != '\r' || (!settings?.SmartConcat.IsEnabled ?? true))
2223
{
23-
return null;
24+
return false;
2425
}
2526

2627
var currentContent = CodePaneHandler.GetCurrentLogicalLine(e.Module);
2728
if (!currentContent.IsInsideStringLiteral)
2829
{
29-
return null;
30+
return false;
3031
}
3132

3233
var lastIndexLeftOfCaret = currentContent.CaretLine.Length > 2 ? currentContent.CaretLine.Substring(0, currentContent.CaretPosition.StartColumn).LastIndexOf('"') : 0;
@@ -51,16 +52,16 @@ public override CodeString Handle(AutoCompleteEventArgs e, AutoCompleteSettings
5152
var newPosition = new Selection(newContent.CaretPosition.StartLine + 1, indent + 1);
5253

5354
e.Handled = true;
54-
var result = new CodeString(newContent.Code, newPosition,
55+
result = new CodeString(newContent.Code, newPosition,
5556
new Selection(newContent.SnippetPosition.StartLine, 1, newContent.SnippetPosition.EndLine, 1));
5657

5758
CodePaneHandler.SubstituteCode(e.Module, result);
5859
var finalSelection = new Selection(result.SnippetPosition.StartLine, 1).Offset(result.CaretPosition);
5960
CodePaneHandler.SetSelection(e.Module, finalSelection);
60-
return result;
61+
return true;
6162
}
6263

63-
return null;
64+
return false;
6465
}
6566
}
6667
}

RubberduckTests/AutoComplete/SelfClosingPairCompletionTests.cs

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,10 @@
11
using NUnit.Framework;
22
using System.Windows.Forms;
3-
using Moq;
43
using Rubberduck.AutoComplete.Service;
5-
using Rubberduck.Settings;
64
using Rubberduck.VBEditor;
7-
using Rubberduck.VBEditor.SourceCodeHandling;
8-
using Rubberduck.VBEditor.Events;
9-
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
105

116
namespace RubberduckTests.AutoComplete
127
{
13-
[TestFixture]
14-
public class SelfClosingPairHandlerTests
15-
{
16-
private bool Run(CodeString original, CodeString prettified, CodeString rePrettified, out CodeString testResult, char input, bool isControlKeyDown = false, bool isDeleteKey = false)
17-
{
18-
var module = new Mock<ICodeModule>();
19-
var handler = new Mock<ICodePaneHandler>();
20-
handler.Setup(e => e.GetCurrentLogicalLine(module.Object)).Returns(original);
21-
handler.SetupSequence(e => e.Prettify(module.Object, original))
22-
.Returns(prettified)
23-
.Returns(rePrettified);
24-
25-
var service = new Mock<SelfClosingPairCompletionService>(new Mock<IShowIntelliSenseCommand>().Object);
26-
var settings = AutoCompleteSettings.AllEnabled;
27-
28-
var args = new AutoCompleteEventArgs(module.Object, input, isControlKeyDown, isDeleteKey);
29-
var sut = new SelfClosingPairHandler(handler.Object, service.Object);
30-
31-
var result = sut.Handle(args, settings);
32-
if (result != null)
33-
{
34-
testResult = new TestCodeString(result);
35-
return true;
36-
}
37-
38-
testResult = null;
39-
return false;
40-
}
41-
}
428

439
[TestFixture]
4410
public class SelfClosingPairCompletionTests
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
using NUnit.Framework;
2+
using Moq;
3+
using Rubberduck.AutoComplete.Service;
4+
using Rubberduck.Settings;
5+
using Rubberduck.VBEditor;
6+
using Rubberduck.VBEditor.SourceCodeHandling;
7+
using Rubberduck.VBEditor.Events;
8+
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
9+
10+
namespace RubberduckTests.AutoComplete
11+
{
12+
[TestFixture]
13+
public class SelfClosingPairHandlerTests
14+
{
15+
private bool Run(CodeString original, CodeString prettified, char input, CodeString rePrettified, out TestCodeString testResult, bool isControlKeyDown = false, bool isDeleteKey = false)
16+
{
17+
var service = new Mock<SelfClosingPairCompletionService>();
18+
return Run(service, original, prettified, input, rePrettified, out testResult, isControlKeyDown, isDeleteKey);
19+
}
20+
21+
private bool Run(Mock<SelfClosingPairCompletionService> service, CodeString original, CodeString prettified, char input, CodeString rePrettified, out TestCodeString testResult, bool isControlKeyDown = false, bool isDeleteKey = false)
22+
{
23+
var module = new Mock<ICodeModule>();
24+
var handler = new Mock<ICodePaneHandler>();
25+
handler.Setup(e => e.GetCurrentLogicalLine(module.Object)).Returns(original);
26+
handler.SetupSequence(e => e.Prettify(module.Object, It.IsAny<CodeString>()))
27+
.Returns(prettified)
28+
.Returns(rePrettified);
29+
30+
var settings = AutoCompleteSettings.AllEnabled;
31+
32+
var args = new AutoCompleteEventArgs(module.Object, input, isControlKeyDown, isDeleteKey);
33+
var sut = new SelfClosingPairHandler(handler.Object, service.Object);
34+
35+
if (sut.Handle(args, settings, out var result))
36+
{
37+
testResult = new TestCodeString(result);
38+
return true;
39+
}
40+
41+
testResult = null;
42+
return false;
43+
}
44+
45+
[Test]
46+
public void GivenInvalidInput_ResultIsNull()
47+
{
48+
var input = 'A'; // note: not a self-closing pair opening or closing character, not a handled key (e.g. '\b').
49+
var original = "DoSomething |".ToCodeString();
50+
51+
Assert.IsFalse(Run(original, original, input, original, out var result));
52+
Assert.IsNull(result);
53+
}
54+
55+
[Test]
56+
public void GivenValidInput_InvokesSCP()
57+
{
58+
var input = '"'; // note: not a self-closing pair opening or closing character, not a handled key (e.g. '\b').
59+
var original = "DoSomething |".ToCodeString();
60+
var rePrettified = @"DoSomething ""|""".ToCodeString();
61+
62+
Assert.IsTrue(Run(original, original, input, rePrettified, out var result));
63+
Assert.IsNotNull(result);
64+
}
65+
}
66+
}

RubberduckTests/AutoComplete/SmartConcatCompletionTests.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,12 @@ private static TestCodeString Run(TestCodeString original, char input, bool isCt
7979
var sut = InitializeSut(original, out var module, out var settings);
8080
var args = new AutoCompleteEventArgs(module.Object, input, isCtrlDown, isDeleteKey);
8181

82-
var result = sut.Handle(args, settings);
83-
return result == null ? null : new TestCodeString(result);
82+
if (sut.Handle(args, settings, out var result))
83+
{
84+
return new TestCodeString(result);
85+
}
86+
87+
return null;
8488
}
8589

8690
private static SmartConcatenationHandler InitializeSut(TestCodeString code, out Mock<ICodeModule> module, out AutoCompleteSettings settings)

0 commit comments

Comments
 (0)