Skip to content

Commit 10d0ce2

Browse files
committed
Convert VBETypeLibsAPI from static class into a regular instance class
Introduce IVBETypeLibsAPI interface to make it mockable Make ReparseCommand testable.
1 parent afd5d66 commit 10d0ce2

File tree

7 files changed

+118
-93
lines changed

7 files changed

+118
-93
lines changed

RetailCoder.VBE/Root/RubberduckIoCInstaller.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
using Rubberduck.UI.CodeMetrics;
4646
using Rubberduck.VBEditor.ComManagement;
4747
using Rubberduck.Parsing.Common;
48+
using Rubberduck.VBEditor.ComManagement.TypeLibsAPI;
4849

4950

5051
namespace Rubberduck.Root
@@ -104,6 +105,7 @@ public void Install(IWindsorContainer container, IConfigurationStore store)
104105

105106
RegisterSmartIndenter(container);
106107
RegisterParsingEngine(container);
108+
RegisterTypeLibApi(container);
107109

108110
container.Register(Component.For<TestExplorerModel>()
109111
.LifestyleSingleton());
@@ -716,6 +718,13 @@ private void RegisterParsingEngine(IWindsorContainer container)
716718
.Instance(() => new VBAPreprocessor(double.Parse(_vbe.Version, CultureInfo.InvariantCulture))));
717719
}
718720

721+
private void RegisterTypeLibApi(IWindsorContainer container)
722+
{
723+
container.Register(Component.For<IVBETypeLibsAPI>()
724+
.ImplementedBy<VBETypeLibsAPI>()
725+
.LifestyleSingleton());
726+
}
727+
719728
private void RegisterCustomDeclarationLoadersToParser(IWindsorContainer container)
720729
{
721730
container.Register(Classes.FromAssemblyContaining<ICustomDeclarationLoader>()

RetailCoder.VBE/UI/Command/ReparseCommand.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,18 @@ namespace Rubberduck.UI.Command
1919
public class ReparseCommand : CommandBase
2020
{
2121
private readonly IVBE _vbe;
22+
private readonly IVBETypeLibsAPI _typeLibApi;
23+
private readonly IMessageBox _messageBox;
2224
private readonly RubberduckParserState _state;
2325
private readonly GeneralSettings _settings;
2426

25-
public ReparseCommand(IVBE vbe, IConfigProvider<GeneralSettings> settingsProvider, RubberduckParserState state) : base(LogManager.GetCurrentClassLogger())
27+
public ReparseCommand(IVBE vbe, IConfigProvider<GeneralSettings> settingsProvider, RubberduckParserState state, IVBETypeLibsAPI typeLibApi, IMessageBox messageBox) : base(LogManager.GetCurrentClassLogger())
2628
{
2729
_vbe = vbe;
30+
_typeLibApi = typeLibApi;
2831
_state = state;
2932
_settings = settingsProvider.Create();
33+
_messageBox = messageBox;
3034
}
3135

3236
protected override bool EvaluateCanExecute(object parameter)
@@ -66,7 +70,7 @@ private bool CompileAllProjects(out List<string> failedNames)
6670
continue;
6771
}
6872

69-
if (!VBETypeLibsAPI.CompileProject(project))
73+
if (!_typeLibApi.CompileProject(project))
7074
{
7175
failedNames.Add(project.Name);
7276
}
@@ -81,8 +85,7 @@ private bool PromptUserToContinue(List<string> failedNames)
8185
{
8286
var formattedList = string.Concat(Environment.NewLine, Environment.NewLine,
8387
string.Join(Environment.NewLine, failedNames));
84-
var msgbox = new MessageBox();
85-
var result = msgbox.Show(
88+
var result = _messageBox.Show(
8689
string.Format(RubberduckUI.Command_Reparse_CannotCompile,
8790
formattedList),
8891
RubberduckUI.Command_Reparse_CannotCompile_Caption, MessageBoxButtons.YesNo,

RetailCoder.VBE/UnitTesting/TestEngine.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,18 @@ public class TestEngine : ITestEngine
2121
private readonly IVBE _vbe;
2222
private readonly RubberduckParserState _state;
2323
private readonly IFakesProviderFactory _fakesFactory;
24+
private readonly IVBETypeLibsAPI _typeLibApi;
2425

2526
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
2627

27-
public TestEngine(TestExplorerModel model, IVBE vbe, RubberduckParserState state, IFakesProviderFactory fakesFactory)
28+
public TestEngine(TestExplorerModel model, IVBE vbe, RubberduckParserState state, IFakesProviderFactory fakesFactory, IVBETypeLibsAPI typeLibApi)
2829
{
2930
Debug.WriteLine("TestEngine created.");
3031
Model = model;
3132
_vbe = vbe;
3233
_state = state;
3334
_fakesFactory = fakesFactory;
35+
_typeLibApi = typeLibApi;
3436
}
3537

3638
public TestExplorerModel Model { get; }
@@ -126,7 +128,7 @@ private void Run(IEnumerable<Declaration> members)
126128
{
127129
foreach (var member in group)
128130
{
129-
VBETypeLibsAPI.ExecuteCode(typeLib, member.QualifiedModuleName.ComponentName,
131+
_typeLibApi.ExecuteCode(typeLib, member.QualifiedModuleName.ComponentName,
130132
member.QualifiedName.MemberName);
131133
}
132134
}

RetailCoder.VBE/UnitTesting/TestMethod.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@ public class TestMethod : ViewModelBase, IEquatable<TestMethod>, INavigateSource
1919
{
2020
private readonly ICollection<AssertCompletedEventArgs> _assertResults = new List<AssertCompletedEventArgs>();
2121
private readonly IVBE _vbe;
22+
private readonly IVBETypeLibsAPI _typeLibApi;
2223

23-
public TestMethod(Declaration declaration, IVBE vbe)
24+
public TestMethod(Declaration declaration, IVBE vbe, IVBETypeLibsAPI typeLibApi)
2425
{
2526
_declaration = declaration;
2627
_vbe = vbe;
28+
_typeLibApi = typeLibApi;
2729
}
2830

2931
private Declaration _declaration;
@@ -45,7 +47,7 @@ public void Run()
4547
try
4648
{
4749
AssertHandler.OnAssertCompleted += HandleAssertCompleted;
48-
VBETypeLibsAPI.ExecuteCode(_vbe, Declaration.ProjectName, Declaration.QualifiedModuleName.ComponentName,
50+
_typeLibApi.ExecuteCode(_vbe, Declaration.ProjectName, Declaration.QualifiedModuleName.ComponentName,
4951
Declaration.QualifiedName.MemberName);
5052
AssertHandler.OnAssertCompleted -= HandleAssertCompleted;
5153

RetailCoder.VBE/UnitTesting/UnitTestUtils.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Rubberduck.Parsing.Symbols;
66
using Rubberduck.Parsing.VBA;
77
using Rubberduck.VBEditor;
8+
using Rubberduck.VBEditor.ComManagement.TypeLibsAPI;
89
using Rubberduck.VBEditor.Extensions;
910
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1011

@@ -16,7 +17,7 @@ public static IEnumerable<TestMethod> GetAllTests(IVBE vbe, RubberduckParserStat
1617
{
1718
return GetTestModuleProcedures(state)
1819
.Where(item => IsTestMethod(state, item))
19-
.Select(item => new TestMethod(item, vbe));
20+
.Select(item => new TestMethod(item, vbe, new VBETypeLibsAPI()));
2021
}
2122

2223
public static IEnumerable<TestMethod> GetTests(this IVBComponent component, IVBE vbe, RubberduckParserState state)

0 commit comments

Comments
 (0)