@@ -63,25 +63,26 @@ public void Initialize()
63
63
64
64
private static IEnumerator < Reference > ReferenceList ( )
65
65
{
66
- var ref1 = new Mock < Reference > ( ) ;
67
- ref1 . SetupGet ( r => r . Name ) . Returns ( "VBA" ) ;
68
- ref1 . SetupGet ( r => r . FullPath ) . Returns ( "C:\\ Program Files\\ Common Files\\ Microsoft Shared\\ VBA\\ VBA7.1\\ VBE7.DLL" ) ;
69
- yield return ref1 . Object ;
66
+ yield return
67
+ CreateMockReference ( "VBA" , @"C:\Program Files\Common Files\Microsoft Shared\VBA\VBA7.1\VBE7.DLL" ) . Object ;
70
68
71
- var ref2 = new Mock < Reference > ( ) ;
72
- ref2 . SetupGet ( r => r . Name ) . Returns ( "Excel" ) ;
73
- ref2 . SetupGet ( r => r . FullPath ) . Returns ( "C:\\ Program Files\\ Microsoft Office 15\\ Root\\ Office15\\ EXCEL.EXE" ) ;
74
- yield return ref2 . Object ;
69
+ yield return
70
+ CreateMockReference ( "Excel" , @"C:\Program Files\Microsoft Office 15\Root\Office15\EXCEL.EXE" ) . Object ;
75
71
76
- var ref3 = new Mock < Reference > ( ) ;
77
- ref3 . SetupGet ( r => r . Name ) . Returns ( "stdole" ) ;
78
- ref3 . SetupGet ( r => r . FullPath ) . Returns ( "C:\\ Windows\\ System32\\ stdole2.tlb" ) ;
79
- yield return ref3 . Object ;
72
+ yield return
73
+ CreateMockReference ( "stdole" , @"C:\Windows\System32\stdole2.tlb" ) . Object ;
80
74
81
- var ref4 = new Mock < Reference > ( ) ;
82
- ref4 . SetupGet ( r => r . Name ) . Returns ( "Office" ) ;
83
- ref4 . SetupGet ( r => r . FullPath ) . Returns ( "C:\\ Program Files\\ Common Files\\ Microsoft Shared\\ OFFICE15\\ MSO.DLL" ) ;
84
- yield return ref4 . Object ;
75
+ yield return
76
+ CreateMockReference ( "Office" , @"C:\Program Files\Common Files\Microsoft Shared\Office15\MSO.DLL" ) . Object ;
77
+ }
78
+
79
+ private static Mock < Reference > CreateMockReference ( string name , string filePath )
80
+ {
81
+ var reference = new Mock < Reference > ( ) ;
82
+ reference . SetupGet ( r => r . Name ) . Returns ( name ) ;
83
+ reference . SetupGet ( r => r . FullPath ) . Returns ( filePath ) ;
84
+
85
+ return reference ;
85
86
}
86
87
87
88
[ TestMethod ]
@@ -231,6 +232,61 @@ public void TestEngine_Run_WhenTestListIsEmpty_Bail()
231
232
Assert . IsFalse ( _wasEventRaised , "No methods should run when passed an empty list of tests." ) ;
232
233
}
233
234
235
+ //todo: move this to the "UI" layer. This code doesn't have to run for COM clients.
236
+ // COM clients will have to either already have a good reference, or be late bound.
237
+ // This is problematic for late bound code, because now we've *forced* them into early binding.
238
+ [ TestMethod ]
239
+ public void TestEngine_AfterRun_OldRubberduckReferenceIsRemoved ( )
240
+ {
241
+ var vbaRef = CreateMockReference ( "VBA" , @"C:\Path\To\VBA.DLL" ) ;
242
+ var rubberduckPath = @"C:\Path\To\Rubberduck.dll" ;
243
+ var oldRubberduckRef = CreateMockReference ( "Rubberduck" , rubberduckPath ) ;
244
+
245
+ var refrenceList = new List < Reference > ( ) { vbaRef . Object , oldRubberduckRef . Object } ;
246
+
247
+ var references = new Mock < References > ( ) ;
248
+ references . Setup ( r => r . GetEnumerator ( ) ) . Returns ( refrenceList . GetEnumerator ( ) ) ;
249
+ references . As < IEnumerable > ( ) . Setup ( r => r . GetEnumerator ( ) ) . Returns ( refrenceList . GetEnumerator ( ) ) ;
250
+ references . Setup ( r => r . AddFromFile ( It . IsAny < string > ( ) ) ) ;
251
+
252
+ var project = new Mock < VBProject > ( ) ;
253
+ project . SetupProperty ( p => p . Name , "VBAProject" ) ;
254
+ project . SetupGet ( p => p . References ) . Returns ( references . Object ) ;
255
+
256
+ //act
257
+ _engine . Run ( _engine . AllTests . Keys , project . Object ) ;
258
+
259
+ //assert
260
+ references . Verify ( r => r . Remove ( It . Is < Reference > ( arg => arg == oldRubberduckRef . Object ) ) ) ;
261
+ }
262
+
263
+ //todo: move this to the "UI" layer. This code doesn't have to run for COM clients.
264
+ // COM clients will have to either already have a good reference, or be late bound.
265
+ // This is problematic for late bound code, because now we've *forced* them into early binding.
266
+ [ TestMethod ]
267
+ public void TestEngine_AfterRun_NewRubberduckReferenceExists ( )
268
+ {
269
+ var vbaRef = CreateMockReference ( "VBA" , @"C:\Path\To\VBA.DLL" ) ;
270
+ var rubberduckPath = @"C:\Path\To\Rubberduck.dll" ;
271
+ var oldRubberduckRef = CreateMockReference ( "Rubberduck" , rubberduckPath ) ;
272
+
273
+ var refrenceList = new List < Reference > ( ) { vbaRef . Object , oldRubberduckRef . Object } ;
274
+
275
+ var references = new Mock < References > ( ) ;
276
+ references . Setup ( r => r . GetEnumerator ( ) ) . Returns ( refrenceList . GetEnumerator ( ) ) ;
277
+ references . As < IEnumerable > ( ) . Setup ( r => r . GetEnumerator ( ) ) . Returns ( refrenceList . GetEnumerator ( ) ) ;
278
+
279
+ var project = new Mock < VBProject > ( ) ;
280
+ project . SetupProperty ( p => p . Name , "VBAProject" ) ;
281
+ project . SetupGet ( p => p . References ) . Returns ( references . Object ) ;
282
+
283
+ //act
284
+ _engine . Run ( _engine . AllTests . Keys , project . Object ) ;
285
+
286
+ //assert
287
+ references . Verify ( r => r . AddFromFile ( It . IsAny < string > ( ) ) ) ;
288
+ }
289
+
234
290
private void EngineOnTestComplete ( object sender , TestCompletedEventArgs testCompletedEventArgs )
235
291
{
236
292
CatchEvent ( ) ;
0 commit comments