Skip to content

Commit ec350ec

Browse files
committed
Make everything happy again.
1 parent 3c72bc9 commit ec350ec

File tree

5 files changed

+61
-17
lines changed

5 files changed

+61
-17
lines changed

RetailCoder.VBE/Refactorings/ImplementInterface/ImplementInterfaceRefactoring.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ private void AddItems(List<Declaration> members)
9191

9292
var missingMembersText = members.Aggregate(string.Empty, (current, member) => current + Environment.NewLine + GetInterfaceMember(member));
9393

94-
module.InsertLines(module.CountOfDeclarationLines + 2, missingMembersText);
94+
module.InsertLines(module.CountOfDeclarationLines + 1, missingMembersText);
9595
}
9696

9797
private string GetInterfaceMember(Declaration member)

Rubberduck.Parsing/Symbols/IdentifierReferenceResolver.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Rubberduck.Parsing.Binding;
55
using Rubberduck.Parsing.Grammar;
66
using Rubberduck.VBEditor;
7+
using Rubberduck.VBEditor.Extensions;
78
using System.Collections.Generic;
89
using System.Linq;
910
using System.Threading;

RubberduckTests/Mocks/MockProjectBuilder.cs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -270,17 +270,7 @@ private Mock<CodeModule> CreateCodeModuleMock(string content)
270270
var codeModule = new Mock<CodeModule>();
271271
codeModule.SetupGet(c => c.CountOfLines).Returns(() => lines.Count);
272272
codeModule.SetupGet(c => c.CountOfDeclarationLines).Returns(() =>
273-
{
274-
var declarationLines = lines.TakeWhile(line => !ModuleBodyTokens.Any(line.Contains)).ToList();
275-
for (var i = declarationLines.Count - 1; i >= 0; i--)
276-
{
277-
if (!string.IsNullOrWhiteSpace(declarationLines[i]))
278-
{
279-
return i;
280-
}
281-
}
282-
return 0;
283-
});
273+
lines.TakeWhile(line => !ModuleBodyTokens.Any(line.Contains)).Count());
284274

285275
// ReSharper disable once UseIndexedProperty
286276
codeModule.Setup(m => m.get_Lines(It.IsAny<int>(), It.IsAny<int>()))
@@ -297,7 +287,7 @@ private Mock<CodeModule> CreateCodeModuleMock(string content)
297287
{
298288
if (index - 1 >= lines.Count)
299289
{
300-
lines.AddRange(newLine.Split(new[] {Environment.NewLine}, StringSplitOptions.None));
290+
lines.AddRange(newLine.Split(new[] { Environment.NewLine }, StringSplitOptions.None));
301291
}
302292
else
303293
{

RubberduckTests/Refactoring/ExtractInterfaceTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ public void ExtractInterfaceRefactoring_ImplementProc()
3232
const string expectedCode =
3333
@"Implements ITestModule1
3434
35+
3536
Private Sub ITestModule1_Foo(ByVal arg1 As Integer, ByVal arg2 As String)
3637
Err.Raise 5 'TODO implement interface member
3738
End Sub
3839
39-
4040
Public Sub Foo(ByVal arg1 As Integer, ByVal arg2 As String)
4141
End Sub";
4242

@@ -107,6 +107,7 @@ Public Property Set Buzz(value)
107107
const string expectedCode =
108108
@"Implements ITestModule1
109109
110+
110111
Private Sub ITestModule1_Foo(ByVal arg1 As Integer, ByVal arg2 As String)
111112
Err.Raise 5 'TODO implement interface member
112113
End Sub
@@ -127,7 +128,6 @@ Private Property Set ITestModule1_Buzz(ByRef value As Variant)
127128
Err.Raise 5 'TODO implement interface member
128129
End Property
129130
130-
131131
Public Sub Foo(ByVal arg1 As Integer, ByVal arg2 As String)
132132
End Sub
133133
@@ -222,6 +222,7 @@ Public Property Set Buzz(value)
222222
const string expectedCode =
223223
@"Implements ITestModule1
224224
225+
225226
Private Sub ITestModule1_Foo(ByVal arg1 As Integer, ByVal arg2 As String)
226227
Err.Raise 5 'TODO implement interface member
227228
End Sub
@@ -230,7 +231,6 @@ Private Function ITestModule1_Fizz(ByRef b As Variant) As Variant
230231
Err.Raise 5 'TODO implement interface member
231232
End Function
232233
233-
234234
Public Sub Foo(ByVal arg1 As Integer, ByVal arg2 As String)
235235
End Sub
236236
@@ -414,11 +414,11 @@ public void ExtractInterfaceRefactoring_PassTargetIn()
414414
const string expectedCode =
415415
@"Implements ITestModule1
416416
417+
417418
Private Sub ITestModule1_Foo(ByVal arg1 As Integer, ByVal arg2 As String)
418419
Err.Raise 5 'TODO implement interface member
419420
End Sub
420421
421-
422422
Public Sub Foo(ByVal arg1 As Integer, ByVal arg2 As String)
423423
End Sub";
424424

RubberduckTests/Refactoring/ImplementInterfaceTests.cs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,59 @@ End Sub
6464
Assert.AreEqual(expectedCode, module.Lines());
6565
}
6666

67+
[TestMethod]
68+
public void ImplementInterface_Procedure_ClassHasOtherProcedure()
69+
{
70+
//Input
71+
const string inputCode1 =
72+
@"Public Sub Foo()
73+
End Sub";
74+
75+
const string inputCode2 =
76+
@"Implements Class1
77+
Public Sub Bar()
78+
End Sub";
79+
80+
var selection = new Selection(1, 1, 1, 1);
81+
82+
//Expectation
83+
const string expectedCode =
84+
@"Implements Class1
85+
86+
Private Sub Class1_Foo()
87+
Err.Raise 5 'TODO implement interface member
88+
End Sub
89+
90+
Public Sub Bar()
91+
End Sub";
92+
93+
//Arrange
94+
var builder = new MockVbeBuilder();
95+
var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none)
96+
.AddComponent("Class1", vbext_ComponentType.vbext_ct_ClassModule, inputCode1)
97+
.AddComponent("Class2", vbext_ComponentType.vbext_ct_ClassModule, inputCode2)
98+
.Build();
99+
var vbe = builder.AddProject(project).Build();
100+
var component = project.Object.VBComponents.Item(1);
101+
102+
var mockHost = new Mock<IHostApplication>();
103+
mockHost.SetupAllProperties();
104+
var parser = MockParser.Create(vbe.Object, new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object));
105+
106+
parser.Parse(new CancellationTokenSource());
107+
if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); }
108+
109+
var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection);
110+
var module = project.Object.VBComponents.Item(1).CodeModule;
111+
112+
//Act
113+
var refactoring = new ImplementInterfaceRefactoring(vbe.Object, parser.State, null);
114+
refactoring.Refactor(qualifiedSelection);
115+
116+
//Assert
117+
Assert.AreEqual(expectedCode, module.Lines());
118+
}
119+
67120
[TestMethod]
68121
public void ImplementInterface_Procedure_WithParams()
69122
{

0 commit comments

Comments
 (0)