Fix test failures

This commit is contained in:
smoogipoo 2020-09-08 19:41:05 +09:00
parent b7ca003928
commit 8e2f5d4ea8
2 changed files with 42 additions and 20 deletions

View File

@ -8,8 +8,8 @@
using System.Threading.Tasks;
using NUnit.Framework;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Platform;
using osu.Game.Beatmaps;
using osu.Game.Collections;
using osu.Game.Tests.Resources;
@ -21,11 +21,11 @@ public class ImportCollectionsTest
[Test]
public async Task TestImportEmptyDatabase()
{
using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportEmptyDatabase"))
using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{
try
{
var osu = await loadOsu(host);
var osu = loadOsu(host);
var collectionManager = osu.Dependencies.Get<BeatmapCollectionManager>();
await collectionManager.Import(new MemoryStream());
@ -42,11 +42,11 @@ public async Task TestImportEmptyDatabase()
[Test]
public async Task TestImportWithNoBeatmaps()
{
using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportWithNoBeatmaps"))
using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{
try
{
var osu = await loadOsu(host);
var osu = loadOsu(host);
var collectionManager = osu.Dependencies.Get<BeatmapCollectionManager>();
await collectionManager.Import(TestResources.OpenResource("Collections/collections.db"));
@ -69,11 +69,11 @@ public async Task TestImportWithNoBeatmaps()
[Test]
public async Task TestImportWithBeatmaps()
{
using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportWithBeatmaps"))
using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{
try
{
var osu = await loadOsu(host, true);
var osu = loadOsu(host, true);
var collectionManager = osu.Dependencies.Get<BeatmapCollectionManager>();
await collectionManager.Import(TestResources.OpenResource("Collections/collections.db"));
@ -99,13 +99,13 @@ public async Task TestImportMalformedDatabase()
bool exceptionThrown = false;
UnhandledExceptionEventHandler setException = (_, __) => exceptionThrown = true;
using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportMalformedDatabase"))
using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{
try
{
AppDomain.CurrentDomain.UnhandledException += setException;
var osu = await loadOsu(host, true);
var osu = loadOsu(host, true);
var collectionManager = osu.Dependencies.Get<BeatmapCollectionManager>();
@ -137,11 +137,11 @@ public async Task TestImportMalformedDatabase()
[Test]
public async Task TestSaveAndReload()
{
using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestSaveAndReload"))
using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{
try
{
var osu = await loadOsu(host, true);
var osu = loadOsu(host, true);
var collectionManager = osu.Dependencies.Get<BeatmapCollectionManager>();
await collectionManager.Import(TestResources.OpenResource("Collections/collections.db"));
@ -163,7 +163,7 @@ public async Task TestSaveAndReload()
{
try
{
var osu = await loadOsu(host, true);
var osu = loadOsu(host, true);
var collectionManager = osu.Dependencies.Get<BeatmapCollectionManager>();
@ -182,9 +182,9 @@ public async Task TestSaveAndReload()
}
}
private async Task<OsuGameBase> loadOsu(GameHost host, bool withBeatmap = false)
private OsuGameBase loadOsu(GameHost host, bool withBeatmap = false)
{
var osu = new OsuGameBase();
var osu = new TestOsuGameBase(withBeatmap);
#pragma warning disable 4014
Task.Run(() => host.Run(osu));
@ -192,12 +192,8 @@ private async Task<OsuGameBase> loadOsu(GameHost host, bool withBeatmap = false)
waitForOrAssert(() => osu.IsLoaded, @"osu! failed to start in a reasonable amount of time");
if (withBeatmap)
{
var beatmapFile = TestResources.GetTestBeatmapForImport();
var beatmapManager = osu.Dependencies.Get<BeatmapManager>();
await beatmapManager.Import(beatmapFile);
}
var collectionManager = osu.Dependencies.Get<BeatmapCollectionManager>();
waitForOrAssert(() => collectionManager.DatabaseLoaded, "Collection database did not load in a reasonable amount of time");
return osu;
}
@ -211,5 +207,24 @@ private void waitForOrAssert(Func<bool> result, string failureMessage, int timeo
Assert.IsTrue(task.Wait(timeout), failureMessage);
}
private class TestOsuGameBase : OsuGameBase
{
private readonly bool withBeatmap;
public TestOsuGameBase(bool withBeatmap)
{
this.withBeatmap = withBeatmap;
}
protected override void AddInternal(Drawable drawable)
{
// The beatmap must be imported just before the collection manager is loaded.
if (drawable is BeatmapCollectionManager && withBeatmap)
BeatmapManager.Import(TestResources.GetTestBeatmapForImport()).Wait();
base.AddInternal(drawable);
}
}
}
}

View File

@ -33,6 +33,11 @@ public class BeatmapCollectionManager : CompositeDrawable
public bool SupportsImportFromStable => RuntimeInfo.IsDesktop;
/// <summary>
/// Whether the user's database has finished loading.
/// </summary>
public bool DatabaseLoaded { get; private set; }
[Resolved]
private GameHost host { get; set; }
@ -86,6 +91,8 @@ private void loadDatabase() => Task.Run(async () =>
using (var stream = storage.GetStream(database_name))
await import(stream);
}
DatabaseLoaded = true;
});
/// <summary>