diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneModSelectOverlay.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneModSelectOverlay.cs
index 4a1d90d871..91edc226c9 100644
--- a/osu.Game.Tests/Visual/UserInterface/TestSceneModSelectOverlay.cs
+++ b/osu.Game.Tests/Visual/UserInterface/TestSceneModSelectOverlay.cs
@@ -12,6 +12,7 @@ using osu.Framework.Graphics.Containers;
using osu.Framework.Testing;
using osu.Game.Graphics.UserInterface;
using osu.Game.Overlays.Mods;
+using osu.Game.Overlays.Settings;
using osu.Game.Rulesets;
using osu.Game.Rulesets.Mania;
using osu.Game.Rulesets.Mania.Mods;
@@ -50,6 +51,38 @@ namespace osu.Game.Tests.Visual.UserInterface
AddStep("show", () => modSelect.Show());
}
+ ///
+ /// Ensure that two mod overlays are not cross polluting via central settings instances.
+ ///
+ [Test]
+ public void TestSettingsNotCrossPolluting()
+ {
+ Bindable> selectedMods2 = null;
+
+ AddStep("select diff adjust", () => SelectedMods.Value = new Mod[] { new OsuModDifficultyAdjust() });
+
+ AddStep("set setting", () => modSelect.ChildrenOfType>().First().Current.Value = 8);
+
+ AddAssert("ensure setting is propagated", () => SelectedMods.Value.OfType().Single().CircleSize.Value == 8);
+
+ AddStep("create second bindable", () => selectedMods2 = new Bindable>(new Mod[] { new OsuModDifficultyAdjust() }));
+
+ AddStep("create second overlay", () =>
+ {
+ Add(modSelect = new TestModSelectOverlay().With(d =>
+ {
+ d.Origin = Anchor.TopCentre;
+ d.Anchor = Anchor.TopCentre;
+ d.SelectedMods.BindTarget = selectedMods2;
+ }));
+ });
+
+ AddStep("show", () => modSelect.Show());
+
+ AddAssert("ensure first is unchanged", () => SelectedMods.Value.OfType().Single().CircleSize.Value == 8);
+ AddAssert("ensure second is default", () => selectedMods2.Value.OfType().Single().CircleSize.Value == 5);
+ }
+
[Test]
public void TestSettingsResetOnDeselection()
{