Skip to content

Commit 53a707c

Browse files
committed
Introduce CW support for tests
Modified EncapsulateFieldRefactoring tests to use a WindsorContainer to manage ctor injection and object instantiations - causing some degree of modification to all EF related tests.
1 parent 11598dd commit 53a707c

17 files changed

+569
-671
lines changed

RubberduckTests/Commands/RefactorCommands/EncapsulateFieldCommandTests.cs

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
1-
using System;
2-
using Moq;
1+
using Castle.Windsor;
32
using NUnit.Framework;
4-
using Rubberduck.Interaction;
53
using Rubberduck.Parsing.Rewriter;
6-
using Rubberduck.Parsing.UIContext;
74
using Rubberduck.Parsing.VBA;
8-
using Rubberduck.Refactorings;
9-
using Rubberduck.Refactorings.EncapsulateField;
105
using Rubberduck.UI.Command;
116
using Rubberduck.UI.Command.Refactorings;
12-
using Rubberduck.UI.Command.Refactorings.Notifiers;
137
using Rubberduck.VBEditor;
148
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
159
using Rubberduck.VBEditor.Utility;
@@ -60,25 +54,9 @@ Sub Foo()
6054

6155
protected override CommandBase TestCommand(IVBE vbe, RubberduckParserState state, IRewritingManager rewritingManager, ISelectionService selectionService)
6256
{
63-
var resolver = new EncapsulateFieldTestComponentResolver(state, rewritingManager);
64-
65-
var msgBox = new Mock<IMessageBox>().Object;
66-
var factory = new Mock<IRefactoringPresenterFactory>().Object;
67-
var selectedDeclarationProvider = new SelectedDeclarationProvider(selectionService, state);
68-
var uiDispatcherMock = new Mock<IUiDispatcher>();
69-
uiDispatcherMock
70-
.Setup(m => m.Invoke(It.IsAny<Action>()))
71-
.Callback((Action action) => action.Invoke());
72-
var userInteraction = new RefactoringUserInteraction<IEncapsulateFieldPresenter, EncapsulateFieldModel>(factory, uiDispatcherMock.Object);
73-
var refactoring = new EncapsulateFieldRefactoring(resolver.Resolve<EncapsulateFieldRefactoringAction>(),
74-
resolver.Resolve<EncapsulateFieldPreviewProvider>(),
75-
resolver.Resolve<IEncapsulateFieldModelFactory>(),
76-
userInteraction,
77-
selectionService,
78-
selectedDeclarationProvider);
79-
var notifier = new EncapsulateFieldFailedNotifier(msgBox);
80-
var selectedDeclarationService = new SelectedDeclarationProvider(selectionService, state);
81-
return new RefactorEncapsulateFieldCommand(refactoring, notifier, state, selectionService, selectedDeclarationService);
57+
var resolver = new EncapsulateFieldTestsResolver(state, rewritingManager, selectionService);
58+
resolver.Install(new WindsorContainer(), null);
59+
return resolver.Resolve<RefactorEncapsulateFieldCommand>();
8260
}
8361

8462
protected override IVBE SetupAllowingExecution()
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System;
2+
using NUnit.Framework;
3+
using Rubberduck.Parsing.Rewriter;
4+
using Rubberduck.Parsing.VBA;
5+
using Rubberduck.Refactorings;
6+
using Rubberduck.Refactorings.EncapsulateField;
7+
using Rubberduck.Refactorings.Exceptions;
8+
using Rubberduck.VBEditor.Utility;
9+
using RubberduckTests.Mocks;
10+
11+
namespace RubberduckTests.Refactoring.EncapsulateField
12+
{
13+
[TestFixture]
14+
public abstract class EncapsulateFieldInteractiveRefactoringTest : InteractiveRefactoringTestBase<IEncapsulateFieldPresenter, EncapsulateFieldModel>
15+
{
16+
//RefactoringTestBase.NoActiveSelection_Throws passes a null
17+
//IDeclarationFinderProvider parameter to 'TestRefactoring(...).
18+
//The EncapsulateFieldRefactoring tests Resolver throws a different
19+
//exception type without a valid interface reference and causes the
20+
//base class version of the test to fail.
21+
[Test]
22+
[Category("Refactorings")]
23+
public override void NoActiveSelection_Throws()
24+
{
25+
var testVbe = TestVbe(string.Empty, out _);
26+
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(testVbe);
27+
using (state)
28+
{
29+
var refactoring = TestRefactoring(rewritingManager, state, initialSelection: null);
30+
Assert.Throws<NoActiveSelectionException>(() => refactoring.Refactor());
31+
}
32+
}
33+
34+
protected override IRefactoring TestRefactoring(IRewritingManager rewritingManager, RubberduckParserState state, RefactoringUserInteraction<IEncapsulateFieldPresenter, EncapsulateFieldModel> userInteraction, ISelectionService selectionService)
35+
{
36+
throw new NotImplementedException();
37+
}
38+
}
39+
}

RubberduckTests/Refactoring/EncapsulateField/EncapsulateFieldTestComponentResolver.cs

Lines changed: 0 additions & 198 deletions
This file was deleted.

RubberduckTests/Refactoring/EncapsulateField/EncapsulateFieldTestSupport.cs

Lines changed: 67 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
using Castle.Windsor;
12
using Rubberduck.Parsing.Rewriter;
23
using Rubberduck.Parsing.Symbols;
34
using Rubberduck.Parsing.VBA;
45
using Rubberduck.Refactorings;
56
using Rubberduck.Refactorings.EncapsulateField;
67
using Rubberduck.VBEditor;
8+
using Rubberduck.VBEditor.SafeComWrappers;
79
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
810
using Rubberduck.VBEditor.Utility;
911
using RubberduckTests.Mocks;
@@ -13,8 +15,38 @@
1315

1416
namespace RubberduckTests.Refactoring.EncapsulateField
1517
{
16-
public class EncapsulateFieldTestSupport : InteractiveRefactoringTestBase<IEncapsulateFieldPresenter, EncapsulateFieldModel>
18+
public class EncapsulateFieldTestSupport : EncapsulateFieldInteractiveRefactoringTest
1719
{
20+
private EncapsulateFieldTestsResolver _testResolver;
21+
22+
public void ResetResolver()
23+
{
24+
_testResolver = null;
25+
}
26+
27+
public T Resolve<T>(IDeclarationFinderProvider declarationFinderProvider, IRewritingManager rewritingManager = null, ISelectionService selectionService = null) where T : class
28+
{
29+
SetupResolver(declarationFinderProvider, rewritingManager, selectionService);
30+
return Resolve<T>() as T;
31+
}
32+
33+
public T Resolve<T>() where T : class
34+
=> _testResolver?.Resolve<T>() as T ?? throw new InvalidOperationException("Test Resolver not initialized. Call 'SetupResolver(...)' or use one of the 'Resolve<T>()' overloads");
35+
36+
public void SetupResolver(IDeclarationFinderProvider declarationFinderProvider, IRewritingManager rewritingManager = null, ISelectionService selectionService = null)
37+
{
38+
if (declarationFinderProvider is null)
39+
{
40+
throw new ArgumentNullException("declarationFinderProvider is null");
41+
}
42+
43+
if (_testResolver is null)
44+
{
45+
_testResolver = new EncapsulateFieldTestsResolver(declarationFinderProvider, rewritingManager, selectionService);
46+
_testResolver.Install(new WindsorContainer(), null);
47+
}
48+
}
49+
1850
public string RHSIdentifier => Rubberduck.Resources.Refactorings.Refactorings.CodeBuilder_DefaultPropertyRHSParam;
1951

2052
public string StateUDTDefaultTypeName => $"T{MockVbeBuilder.TestModuleName}";
@@ -116,14 +148,41 @@ public IRefactoring SupportTestRefactoring(
116148
RefactoringUserInteraction<IEncapsulateFieldPresenter, EncapsulateFieldModel> userInteraction,
117149
ISelectionService selectionService)
118150
{
119-
var resolver = new EncapsulateFieldTestComponentResolver(state, rewritingManager);
120-
var selectedDeclarationProvider = new SelectedDeclarationProvider(selectionService, state);
121-
return new EncapsulateFieldRefactoring(resolver.Resolve<EncapsulateFieldRefactoringAction>(),
122-
resolver.Resolve<EncapsulateFieldPreviewProvider>(),
123-
resolver.Resolve<IEncapsulateFieldModelFactory>(),
151+
SetupResolver(state, rewritingManager, selectionService);
152+
return new EncapsulateFieldRefactoring(Resolve<EncapsulateFieldRefactoringAction>(state, rewritingManager, selectionService),
153+
Resolve<EncapsulateFieldPreviewProvider>(),
154+
Resolve<IEncapsulateFieldModelFactory>(),
124155
userInteraction,
125156
selectionService,
126-
selectedDeclarationProvider);
157+
Resolve<ISelectedDeclarationProvider>());
158+
}
159+
160+
public IDictionary<string, string> RefactoredCode(
161+
Func<EncapsulateFieldModel, EncapsulateFieldModel> presenterAction,
162+
TestCodeString codeString,
163+
params (string, string, ComponentType)[] otherModules)
164+
{
165+
return RefactoredCode(presenterAction,
166+
(MockVbeBuilder.TestModuleName, codeString, ComponentType.StandardModule),
167+
otherModules);
168+
}
169+
170+
public IDictionary<string, string> RefactoredCode(
171+
Func<EncapsulateFieldModel, EncapsulateFieldModel> presenterAction,
172+
(string selectedModuleName, TestCodeString codeString, ComponentType componentType) moduleUnderTest,
173+
params (string, string, ComponentType)[] otherModules)
174+
{
175+
var modules = otherModules.ToList();
176+
177+
modules.Add((moduleUnderTest.selectedModuleName, moduleUnderTest.codeString.Code, moduleUnderTest.componentType));
178+
179+
return RefactoredCode(
180+
moduleUnderTest.selectedModuleName,
181+
moduleUnderTest.codeString.CaretPosition.ToOneBased(),
182+
presenterAction,
183+
null,
184+
false,
185+
modules.ToArray());
127186
}
128187

129188
public IEncapsulateFieldCandidate RetrieveEncapsulateFieldCandidate(string inputCode, string fieldName)
@@ -145,9 +204,7 @@ public IEncapsulateFieldCandidate RetrieveEncapsulateFieldCandidate(IVBE vbe, st
145204
{
146205
var match = state.DeclarationFinder.MatchName(fieldName).Where(m => m.DeclarationType.Equals(declarationType)).Single();
147206

148-
var resolver = new EncapsulateFieldTestComponentResolver(state, null);
149-
150-
var model = resolver.Resolve<IEncapsulateFieldModelFactory>().Create(match);
207+
var model = Resolve<IEncapsulateFieldModelFactory>(state).Create(match);
151208

152209
model.ConflictFinder.AssignNoConflictIdentifiers(model[match.IdentifierName]);
153210

0 commit comments

Comments
 (0)