mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 12:33:01 +08:00
Update tests in line with thread safety check
This commit is contained in:
parent
567e9f33a9
commit
3ec7dc3bb9
@ -38,19 +38,28 @@ namespace osu.Game.Tests.Database
|
||||
[Test]
|
||||
public void TestDefaultsPopulationAndQuery()
|
||||
{
|
||||
Assert.That(query().Count, Is.EqualTo(0));
|
||||
Assert.That(queryCount(), Is.EqualTo(0));
|
||||
|
||||
KeyBindingContainer testContainer = new TestKeyBindingContainer();
|
||||
|
||||
keyBindingStore.Register(testContainer);
|
||||
|
||||
Assert.That(query().Count, Is.EqualTo(3));
|
||||
Assert.That(queryCount(), Is.EqualTo(3));
|
||||
|
||||
Assert.That(query().Where(k => k.ActionInt == (int)GlobalAction.Back).Count, Is.EqualTo(1));
|
||||
Assert.That(query().Where(k => k.ActionInt == (int)GlobalAction.Select).Count, Is.EqualTo(2));
|
||||
Assert.That(queryCount(GlobalAction.Back), Is.EqualTo(1));
|
||||
Assert.That(queryCount(GlobalAction.Select), Is.EqualTo(2));
|
||||
}
|
||||
|
||||
private IQueryable<RealmKeyBinding> query() => realmContextFactory.Context.All<RealmKeyBinding>();
|
||||
private int queryCount(GlobalAction? match = null)
|
||||
{
|
||||
using (var usage = realmContextFactory.GetForRead())
|
||||
{
|
||||
var results = usage.Realm.All<RealmKeyBinding>();
|
||||
if (match.HasValue)
|
||||
results = results.Where(k => k.ActionInt == (int)match.Value);
|
||||
return results.Count();
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestUpdateViaQueriedReference()
|
||||
@ -59,7 +68,9 @@ namespace osu.Game.Tests.Database
|
||||
|
||||
keyBindingStore.Register(testContainer);
|
||||
|
||||
var backBinding = query().Single(k => k.ActionInt == (int)GlobalAction.Back);
|
||||
using (var primaryUsage = realmContextFactory.GetForRead())
|
||||
{
|
||||
var backBinding = primaryUsage.Realm.All<RealmKeyBinding>().Single(k => k.ActionInt == (int)GlobalAction.Back);
|
||||
|
||||
Assert.That(backBinding.KeyCombination.Keys, Is.EquivalentTo(new[] { InputKey.Escape }));
|
||||
|
||||
@ -76,9 +87,10 @@ namespace osu.Game.Tests.Database
|
||||
Assert.That(backBinding.KeyCombination.Keys, Is.EquivalentTo(new[] { InputKey.BackSpace }));
|
||||
|
||||
// check still correct after re-query.
|
||||
backBinding = query().Single(k => k.ActionInt == (int)GlobalAction.Back);
|
||||
backBinding = primaryUsage.Realm.All<RealmKeyBinding>().Single(k => k.ActionInt == (int)GlobalAction.Back);
|
||||
Assert.That(backBinding.KeyCombination.Keys, Is.EquivalentTo(new[] { InputKey.BackSpace }));
|
||||
}
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
|
@ -4,6 +4,7 @@
|
||||
using System;
|
||||
using System.Threading;
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Framework.Development;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Logging;
|
||||
using osu.Framework.Platform;
|
||||
@ -45,6 +46,11 @@ namespace osu.Game.Database
|
||||
public Realm Context
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!ThreadSafety.IsUpdateThread)
|
||||
throw new InvalidOperationException($"Use {nameof(GetForRead)} when performing realm operations from a non-update thread");
|
||||
|
||||
lock (updateContextLock)
|
||||
{
|
||||
if (context == null)
|
||||
{
|
||||
@ -57,6 +63,7 @@ namespace osu.Game.Database
|
||||
return context;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public RealmContextFactory(Storage storage)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user