Skip to content

Commit 62832ae

Browse files
committed
Set up dependency injection
Create new automagic factory for SettingsForm Update unit tests
1 parent 3cab998 commit 62832ae

File tree

7 files changed

+54
-33
lines changed

7 files changed

+54
-33
lines changed

RetailCoder.VBE/UI/Command/SettingsCommand.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ namespace Rubberduck.UI.Command
1212
[ComVisible(false)]
1313
public class SettingsCommand : CommandBase
1414
{
15-
private readonly IGeneralConfigService _service;
16-
private readonly IOperatingSystem _operatingSystem;
17-
public SettingsCommand(IGeneralConfigService service, IOperatingSystem operatingSystem) : base(LogManager.GetCurrentClassLogger())
15+
private readonly ISettingsFormFactory _settingsFormFactory;
16+
17+
public SettingsCommand(ISettingsFormFactory settingsFormFactory) : base(LogManager.GetCurrentClassLogger())
1818
{
19-
_service = service;
20-
_operatingSystem = operatingSystem;
19+
_settingsFormFactory = settingsFormFactory;
2120
}
2221

2322
protected override void OnExecute(object parameter)
2423
{
25-
using (var window = new SettingsForm(_service, _operatingSystem))
24+
using (var window = _settingsFormFactory.Create())
2625
{
2726
window.ShowDialog();
27+
_settingsFormFactory.Release(window);
2828
}
2929
}
3030
}

RetailCoder.VBE/UI/Inspections/InspectionResultsViewModel.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,21 @@ public sealed class InspectionResultsViewModel : ViewModelBase, INavigateSelecti
4040
private readonly IQuickFixProvider _quickFixProvider;
4141
private readonly IClipboardWriter _clipboard;
4242
private readonly IGeneralConfigService _configService;
43-
private readonly IOperatingSystem _operatingSystem;
43+
private readonly ISettingsFormFactory _settingsFormFactory;
4444

4545
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
4646

4747
public InspectionResultsViewModel(RubberduckParserState state, IInspector inspector, IQuickFixProvider quickFixProvider,
4848
INavigateCommand navigateCommand, ReparseCommand reparseCommand,
49-
IClipboardWriter clipboard, IGeneralConfigService configService, IOperatingSystem operatingSystem)
49+
IClipboardWriter clipboard, IGeneralConfigService configService, ISettingsFormFactory settingsFormFactory)
5050
{
5151
_state = state;
5252
_inspector = inspector;
5353
_quickFixProvider = quickFixProvider;
5454
NavigateCommand = navigateCommand;
5555
_clipboard = clipboard;
5656
_configService = configService;
57-
_operatingSystem = operatingSystem;
57+
_settingsFormFactory = settingsFormFactory;
5858
RefreshCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(),
5959
o =>
6060
{
@@ -238,9 +238,10 @@ public bool GroupByLocation
238238

239239
private void OpenSettings(object param)
240240
{
241-
using (var window = new SettingsForm(_configService, _operatingSystem, SettingsViews.InspectionSettings))
241+
using (var window = _settingsFormFactory.Create())
242242
{
243243
window.ShowDialog();
244+
_settingsFormFactory.Release(window);
244245
}
245246
}
246247

RetailCoder.VBE/UI/Settings/SettingsForm.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,32 @@
11
using System.Windows.Forms;
22
using Rubberduck.Settings;
33
using Rubberduck.Common;
4+
using Rubberduck.VBERuntime;
45

56
namespace Rubberduck.UI.Settings
67
{
8+
public interface ISettingsFormFactory
9+
{
10+
SettingsForm Create();
11+
void Release(SettingsForm form);
12+
}
13+
714
public partial class SettingsForm : Form
815
{
916
public SettingsForm()
1017
{
1118
InitializeComponent();
1219
}
1320

14-
public SettingsForm(IGeneralConfigService configService, IOperatingSystem operatingSystem, SettingsViews activeView = SettingsViews.GeneralSettings) : this()
21+
public SettingsForm(IGeneralConfigService configService, IOperatingSystem operatingSystem, IMessageBox messageBox, IVBESettings vbeSettings, SettingsViews activeView = SettingsViews.GeneralSettings) : this()
1522
{
1623
var config = configService.LoadConfiguration();
1724

1825
ViewModel = new SettingsControlViewModel(configService,
1926
config,
2027
new SettingsView
2128
{
22-
Control = new GeneralSettings(new GeneralSettingsViewModel(config, operatingSystem)),
29+
Control = new GeneralSettings(new GeneralSettingsViewModel(config, operatingSystem, messageBox, vbeSettings)),
2330
View = SettingsViews.GeneralSettings
2431
},
2532
new SettingsView

RetailCoder.VBE/UI/ToDoItems/ToDoExplorerViewModel.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ public sealed class ToDoExplorerViewModel : ViewModelBase, INavigateSelection, I
2121
{
2222
private readonly RubberduckParserState _state;
2323
private readonly IGeneralConfigService _configService;
24-
private readonly IOperatingSystem _operatingSystem;
24+
private readonly ISettingsFormFactory _settingsFormFactory;
2525

26-
public ToDoExplorerViewModel(RubberduckParserState state, IGeneralConfigService configService, IOperatingSystem operatingSystem)
26+
public ToDoExplorerViewModel(RubberduckParserState state, IGeneralConfigService configService, ISettingsFormFactory settingsFormFactory)
2727
{
2828
_state = state;
2929
_configService = configService;
30-
_operatingSystem = operatingSystem;
30+
_settingsFormFactory = settingsFormFactory;
3131
_state.StateChanged += HandleStateChanged;
3232

3333
SetMarkerGroupingCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), param =>
@@ -222,9 +222,10 @@ public CommandBase OpenTodoSettings
222222
}
223223
return _openTodoSettings = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ =>
224224
{
225-
using (var window = new SettingsForm(_configService, _operatingSystem, SettingsViews.TodoSettings))
225+
using (var window = _settingsFormFactory.Create())
226226
{
227227
window.ShowDialog();
228+
_settingsFormFactory.Release(window);
228229
}
229230
});
230231
}

RetailCoder.VBE/UI/UnitTesting/TestExplorerViewModel.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,25 @@ public class TestExplorerViewModel : ViewModelBase, INavigateSelection, IDisposa
2121
private readonly RubberduckParserState _state;
2222
private readonly ITestEngine _testEngine;
2323
private readonly IClipboardWriter _clipboard;
24-
private readonly IGeneralConfigService _configService;
25-
private readonly IOperatingSystem _operatingSystem;
24+
private readonly ISettingsFormFactory _settingsFormFactory;
25+
//private readonly IGeneralConfigService _configService;
26+
//private readonly IOperatingSystem _operatingSystem;
2627

2728
public TestExplorerViewModel(IVBE vbe,
2829
RubberduckParserState state,
2930
ITestEngine testEngine,
3031
TestExplorerModel model,
3132
IClipboardWriter clipboard,
3233
IGeneralConfigService configService,
33-
IOperatingSystem operatingSystem)
34+
ISettingsFormFactory settingsFormFactory)
3435
{
3536
_vbe = vbe;
3637
_state = state;
3738
_testEngine = testEngine;
3839
_testEngine.TestCompleted += TestEngineTestCompleted;
3940
Model = model;
4041
_clipboard = clipboard;
41-
_configService = configService;
42-
_operatingSystem = operatingSystem;
42+
_settingsFormFactory = settingsFormFactory;
4343

4444
_navigateCommand = new NavigateCommand(_state.ProjectsProvider);
4545

@@ -196,9 +196,10 @@ public bool GroupByLocation
196196

197197
private void OpenSettings(object param)
198198
{
199-
using (var window = new SettingsForm(_configService, _operatingSystem, SettingsViews.UnitTestSettings))
199+
using (var window = _settingsFormFactory.Create())
200200
{
201201
window.ShowDialog();
202+
_settingsFormFactory.Release(window);
202203
}
203204
}
204205

RubberduckTests/Settings/GeneralSettingsTests.cs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Rubberduck.Common;
88
using Moq;
99
using Rubberduck.UI;
10+
using Rubberduck.VBERuntime;
1011

1112
namespace RubberduckTests.Settings
1213
{
@@ -18,6 +19,16 @@ private Mock<IOperatingSystem> GetOperatingSystemMock()
1819
return new Mock<IOperatingSystem>();
1920
}
2021

22+
private Mock<IMessageBox> GetMessageBoxMock()
23+
{
24+
return new Mock<IMessageBox>();
25+
}
26+
27+
private Mock<IVBESettings> GetVBESettingsMock()
28+
{
29+
return new Mock<IVBESettings>();
30+
}
31+
2132
private Configuration GetDefaultConfig()
2233
{
2334
var generalSettings = new GeneralSettings
@@ -70,7 +81,7 @@ private Configuration GetNondefaultConfig()
7081
public void SaveConfigWorks()
7182
{
7283
var customConfig = GetNondefaultConfig();
73-
var viewModel = new GeneralSettingsViewModel(customConfig, GetOperatingSystemMock().Object);
84+
var viewModel = new GeneralSettingsViewModel(customConfig, GetOperatingSystemMock().Object, GetMessageBoxMock().Object, GetVBESettingsMock().Object);
7485

7586
var config = GetDefaultConfig();
7687
viewModel.UpdateConfig(config);
@@ -88,7 +99,7 @@ public void SaveConfigWorks()
8899
[Test]
89100
public void SetDefaultsWorks()
90101
{
91-
var viewModel = new GeneralSettingsViewModel(GetNondefaultConfig(), GetOperatingSystemMock().Object);
102+
var viewModel = new GeneralSettingsViewModel(GetNondefaultConfig(), GetOperatingSystemMock().Object, GetMessageBoxMock().Object, GetVBESettingsMock().Object);
92103

93104
var defaultConfig = GetDefaultConfig();
94105
viewModel.SetToDefaults(defaultConfig);
@@ -107,7 +118,7 @@ public void SetDefaultsWorks()
107118
public void LanguageIsSetInCtor()
108119
{
109120
var defaultConfig = GetDefaultConfig();
110-
var viewModel = new GeneralSettingsViewModel(defaultConfig, GetOperatingSystemMock().Object);
121+
var viewModel = new GeneralSettingsViewModel(defaultConfig, GetOperatingSystemMock().Object, GetMessageBoxMock().Object, GetVBESettingsMock().Object);
111122

112123
Assert.AreEqual(defaultConfig.UserSettings.GeneralSettings.Language, viewModel.SelectedLanguage);
113124
}
@@ -117,7 +128,7 @@ public void LanguageIsSetInCtor()
117128
public void HotkeysAreSetInCtor()
118129
{
119130
var defaultConfig = GetDefaultConfig();
120-
var viewModel = new GeneralSettingsViewModel(defaultConfig, GetOperatingSystemMock().Object);
131+
var viewModel = new GeneralSettingsViewModel(defaultConfig, GetOperatingSystemMock().Object, GetMessageBoxMock().Object, GetVBESettingsMock().Object);
121132

122133
Assert.IsTrue(defaultConfig.UserSettings.HotkeySettings.Settings.SequenceEqual(viewModel.Hotkeys));
123134
}
@@ -127,7 +138,7 @@ public void HotkeysAreSetInCtor()
127138
public void AutoSaveEnabledIsSetInCtor()
128139
{
129140
var defaultConfig = GetDefaultConfig();
130-
var viewModel = new GeneralSettingsViewModel(defaultConfig, GetOperatingSystemMock().Object);
141+
var viewModel = new GeneralSettingsViewModel(defaultConfig, GetOperatingSystemMock().Object, GetMessageBoxMock().Object, GetVBESettingsMock().Object);
131142

132143
Assert.AreEqual(defaultConfig.UserSettings.GeneralSettings.IsAutoSaveEnabled, viewModel.AutoSaveEnabled);
133144
}
@@ -137,7 +148,7 @@ public void AutoSaveEnabledIsSetInCtor()
137148
public void AutoSavePeriodIsSetInCtor()
138149
{
139150
var defaultConfig = GetDefaultConfig();
140-
var viewModel = new GeneralSettingsViewModel(defaultConfig, GetOperatingSystemMock().Object);
151+
var viewModel = new GeneralSettingsViewModel(defaultConfig, GetOperatingSystemMock().Object, GetMessageBoxMock().Object, GetVBESettingsMock().Object);
141152

142153
Assert.AreEqual(defaultConfig.UserSettings.GeneralSettings.AutoSavePeriod, viewModel.AutoSavePeriod);
143154
}

RubberduckTests/TodoExplorer/TodoExplorerTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public void PicksUpComments()
3434
using (var state = parser.State)
3535
{
3636
var cs = GetConfigService(new[] { "TODO", "NOTE", "BUG" });
37-
var vm = new ToDoExplorerViewModel(state, cs, GetOperatingSystemMock().Object);
37+
var vm = new ToDoExplorerViewModel(state, cs, null);
3838

3939
parser.Parse(new CancellationTokenSource());
4040
if (state.Status >= ParserState.Error)
@@ -69,7 +69,7 @@ public void PicksUpComments_StrangeCasing()
6969
using (var state = parser.State)
7070
{
7171
var cs = GetConfigService(new[] { "TODO", "NOTE", "BUG" });
72-
var vm = new ToDoExplorerViewModel(state, cs, GetOperatingSystemMock().Object);
72+
var vm = new ToDoExplorerViewModel(state, cs, null);
7373

7474
parser.Parse(new CancellationTokenSource());
7575
if (state.Status >= ParserState.Error)
@@ -104,7 +104,7 @@ public void PicksUpComments_SpecialCharacters()
104104
using (var state = parser.State)
105105
{
106106
var cs = GetConfigService(new[] { "TO-DO", "N@TE", "BUG " });
107-
var vm = new ToDoExplorerViewModel(state, cs, GetOperatingSystemMock().Object);
107+
var vm = new ToDoExplorerViewModel(state, cs, null);
108108

109109
parser.Parse(new CancellationTokenSource());
110110
if (state.Status >= ParserState.Error)
@@ -138,7 +138,7 @@ public void AvoidsFalsePositiveComments()
138138
using (var state = parser.State)
139139
{
140140
var cs = GetConfigService(new[] { "TODO", "NOTE", "BUG" });
141-
var vm = new ToDoExplorerViewModel(state, cs, GetOperatingSystemMock().Object);
141+
var vm = new ToDoExplorerViewModel(state, cs, null);
142142

143143
parser.Parse(new CancellationTokenSource());
144144
if (state.Status >= ParserState.Error)
@@ -172,7 +172,7 @@ public void RemoveRemovesComment()
172172
using (var state = parser.State)
173173
{
174174
var cs = GetConfigService(new[] { "TODO", "NOTE", "BUG" });
175-
var vm = new ToDoExplorerViewModel(state, cs, GetOperatingSystemMock().Object);
175+
var vm = new ToDoExplorerViewModel(state, cs, null);
176176

177177
parser.Parse(new CancellationTokenSource());
178178
if (state.Status >= ParserState.Error)

0 commit comments

Comments
 (0)