1
+ using Castle . Windsor ;
1
2
using Rubberduck . Parsing . Rewriter ;
2
3
using Rubberduck . Parsing . Symbols ;
3
4
using Rubberduck . Parsing . VBA ;
4
5
using Rubberduck . Refactorings ;
5
6
using Rubberduck . Refactorings . EncapsulateField ;
6
7
using Rubberduck . VBEditor ;
8
+ using Rubberduck . VBEditor . SafeComWrappers ;
7
9
using Rubberduck . VBEditor . SafeComWrappers . Abstract ;
8
10
using Rubberduck . VBEditor . Utility ;
9
11
using RubberduckTests . Mocks ;
13
15
14
16
namespace RubberduckTests . Refactoring . EncapsulateField
15
17
{
16
- public class EncapsulateFieldTestSupport : InteractiveRefactoringTestBase < IEncapsulateFieldPresenter , EncapsulateFieldModel >
18
+ public class EncapsulateFieldTestSupport : EncapsulateFieldInteractiveRefactoringTest
17
19
{
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
+
18
50
public string RHSIdentifier => Rubberduck . Resources . Refactorings . Refactorings . CodeBuilder_DefaultPropertyRHSParam ;
19
51
20
52
public string StateUDTDefaultTypeName => $ "T{ MockVbeBuilder . TestModuleName } ";
@@ -116,14 +148,41 @@ public IRefactoring SupportTestRefactoring(
116
148
RefactoringUserInteraction < IEncapsulateFieldPresenter , EncapsulateFieldModel > userInteraction ,
117
149
ISelectionService selectionService )
118
150
{
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 > ( ) ,
124
155
userInteraction ,
125
156
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 ( ) ) ;
127
186
}
128
187
129
188
public IEncapsulateFieldCandidate RetrieveEncapsulateFieldCandidate ( string inputCode , string fieldName )
@@ -145,9 +204,7 @@ public IEncapsulateFieldCandidate RetrieveEncapsulateFieldCandidate(IVBE vbe, st
145
204
{
146
205
var match = state . DeclarationFinder . MatchName ( fieldName ) . Where ( m => m . DeclarationType . Equals ( declarationType ) ) . Single ( ) ;
147
206
148
- var resolver = new EncapsulateFieldTestComponentResolver ( state , null ) ;
149
-
150
- var model = resolver . Resolve < IEncapsulateFieldModelFactory > ( ) . Create ( match ) ;
207
+ var model = Resolve < IEncapsulateFieldModelFactory > ( state ) . Create ( match ) ;
151
208
152
209
model . ConflictFinder . AssignNoConflictIdentifiers ( model [ match . IdentifierName ] ) ;
153
210
0 commit comments