Skip to content

Commit e11b25b

Browse files
committed
Default and user inspection settings will be merged together
1 parent 9edf8ed commit e11b25b

File tree

3 files changed

+45
-5
lines changed

3 files changed

+45
-5
lines changed

RetailCoder.VBE/Settings/CodeInspectionConfigProvider.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ public CodeInspectionConfigProvider(IPersistanceService<CodeInspectionSettings>
2323

2424
public CodeInspectionSettings Create()
2525
{
26-
return _persister.Load(_defaultSettings) ?? _defaultSettings;
26+
// Loaded settings don't contain defaults, so we need to combine user settings with defaults.
27+
var loaded = _persister.Load(_defaultSettings);
28+
loaded?.CodeInspections.UnionWith(_defaultSettings.CodeInspections);
29+
30+
return loaded ?? _defaultSettings;
2731
}
2832

2933
public CodeInspectionSettings CreateDefaults()

RetailCoder.VBE/Settings/CodeInspectionSettings.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,16 +156,14 @@ public override bool Equals(object obj)
156156
{
157157
return obj is CodeInspectionSetting inspectionSetting &&
158158
inspectionSetting.InspectionType == InspectionType &&
159-
inspectionSetting.Name == Name &&
160-
inspectionSetting.Severity == Severity;
159+
inspectionSetting.Name == Name;
161160
}
162161

163162
public override int GetHashCode()
164163
{
165164
unchecked
166165
{
167166
var hashCode = Name?.GetHashCode() ?? 0;
168-
hashCode = (hashCode * 397) ^ (int)Severity;
169167
hashCode = (hashCode * 397) ^ (int)InspectionType;
170168
return hashCode;
171169
}

RubberduckTests/Settings/CodeInspectionConfigProviderTests.cs

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
using Moq;
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using Moq;
24
using NUnit.Framework;
35
using Rubberduck.Parsing.Inspections.Abstract;
6+
using Rubberduck.Parsing.Inspections.Resources;
47
using Rubberduck.Settings;
8+
using Rubberduck.SettingsProvider;
59

610
namespace RubberduckTests.Settings
711
{
@@ -20,5 +24,39 @@ public void SettingsForFoundInspectionsAreAddedToDefaultSettings()
2024

2125
Assert.NotNull(defaults.GetSetting(inspectionMock.Object.GetType()));
2226
}
27+
28+
[Category("Settings")]
29+
[Test]
30+
public void UserSettingsAreCombinedWithDefaultSettings()
31+
{
32+
var userSetting = new CodeInspectionSetting("Foo", CodeInspectionType.CodeQualityIssues);
33+
var userSettings = new CodeInspectionSettings { CodeInspections = new HashSet<CodeInspectionSetting>(new[] {userSetting})};
34+
var persisterMock = new Mock<IPersistanceService<CodeInspectionSettings>>();
35+
persisterMock.Setup(persister => persister.Load(It.IsAny<CodeInspectionSettings>())).Returns(userSettings);
36+
var configProvider = new CodeInspectionConfigProvider(persisterMock.Object, Enumerable.Empty<IInspection>());
37+
38+
var settings = configProvider.Create().CodeInspections;
39+
var defaultSettings = configProvider.CreateDefaults().CodeInspections;
40+
41+
Assert.Contains(userSetting, settings.ToArray());
42+
Assert.IsTrue(defaultSettings.All(s => settings.Contains(s)));
43+
}
44+
45+
[Category("Settings")]
46+
[Test]
47+
public void UserSettingsAreNotDuplicatedWithDefaultSettings()
48+
{
49+
var defaultSettings = new CodeInspectionConfigProvider(null, Enumerable.Empty<IInspection>()).CreateDefaults().CodeInspections;
50+
var userSetting = defaultSettings.First();
51+
var userSettings = new CodeInspectionSettings { CodeInspections = new HashSet<CodeInspectionSetting>(new[] { userSetting }) };
52+
var persisterMock = new Mock<IPersistanceService<CodeInspectionSettings>>();
53+
persisterMock.Setup(persister => persister.Load(It.IsAny<CodeInspectionSettings>())).Returns(userSettings);
54+
var configProvider = new CodeInspectionConfigProvider(persisterMock.Object, Enumerable.Empty<IInspection>());
55+
56+
var settings = configProvider.Create().CodeInspections;
57+
58+
Assert.AreEqual(defaultSettings.Count, settings.Count);
59+
Assert.Contains(userSetting, settings.ToArray());
60+
}
2361
}
2462
}

0 commit comments

Comments
 (0)