diff --git a/osu.Game/Tests/Visual/OsuTestScene.cs b/osu.Game/Tests/Visual/OsuTestScene.cs
index f00cefaefd..b59a1db403 100644
--- a/osu.Game/Tests/Visual/OsuTestScene.cs
+++ b/osu.Game/Tests/Visual/OsuTestScene.cs
@@ -69,12 +69,26 @@ namespace osu.Game.Tests.Visual
///
protected virtual bool UseOnlineAPI => false;
+ ///
+ /// When running headless, there is an opportunity to use the host storage rather than creating a second isolated one.
+ /// This is because the host is recycled per TestScene execution in headless at an nunit level.
+ ///
+ private Storage isolatedHostStorage;
+
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent)
{
+ if (!UseFreshStoragePerRun)
+ isolatedHostStorage = (parent.Get() as HeadlessGameHost)?.Storage;
+
contextFactory = new Lazy(() =>
{
var factory = new DatabaseContextFactory(LocalStorage);
- factory.ResetDatabase();
+
+ // only reset the database if not using the host storage.
+ // if we reset the host storage, it will delete global key bindings.
+ if (isolatedHostStorage == null)
+ factory.ResetDatabase();
+
using (var usage = factory.Get())
usage.Migrate();
return factory;
@@ -135,12 +149,9 @@ namespace osu.Game.Tests.Visual
}
localStorage =
- new Lazy(() => !UseFreshStoragePerRun && host is HeadlessGameHost ? host.Storage : new NativeStorage(Path.Combine(RuntimeInfo.StartupDirectory, $"{GetType().Name}-{Guid.NewGuid()}")));
+ new Lazy(() => isolatedHostStorage ?? new NativeStorage(Path.Combine(RuntimeInfo.StartupDirectory, $"{GetType().Name}-{Guid.NewGuid()}")));
}
- [Resolved]
- private GameHost host { get; set; }
-
[Resolved]
protected AudioManager Audio { get; private set; }