Add hitobject container regression test

This commit is contained in:
smoogipoo 2019-12-18 18:51:12 +09:00
parent df8f8ffd0d
commit 5664ce3109
2 changed files with 77 additions and 0 deletions

View File

@ -0,0 +1,75 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using JetBrains.Annotations;
using NUnit.Framework;
using osu.Framework.Testing;
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Objects.Drawables;
using osu.Game.Rulesets.UI;
using osu.Game.Tests.Visual;
namespace osu.Game.Tests.Gameplay
{
[HeadlessTest]
public class TestSceneHitObjectContainer : OsuTestScene
{
private HitObjectContainer container;
[SetUp]
public void Setup() => Schedule(() =>
{
Child = container = new HitObjectContainer();
});
[Test]
public void TestLateHitObjectIsAddedEarlierInList()
{
DrawableHitObject hitObject = null;
AddStep("setup", () => container.Add(new TestDrawableHitObject(new HitObject { StartTime = 500 })));
AddStep("add late hitobject", () => container.Add(hitObject = new TestDrawableHitObject(new HitObject { StartTime = 1000 })));
AddAssert("hitobject index is 0", () => container.IndexOf(hitObject) == 0);
}
[Test]
public void TestEarlyHitObjectIsAddedLaterInList()
{
DrawableHitObject hitObject = null;
AddStep("setup", () => container.Add(new TestDrawableHitObject(new HitObject { StartTime = 500 })));
AddStep("add early hitobject", () => container.Add(hitObject = new TestDrawableHitObject(new HitObject())));
AddAssert("hitobject index is 0", () => container.IndexOf(hitObject) == 1);
}
[Test]
public void TestHitObjectsResortedAfterStartTimeChange()
{
DrawableHitObject firstObject = null;
DrawableHitObject secondObject = null;
AddStep("setup", () =>
{
container.Add(firstObject = new TestDrawableHitObject(new HitObject()));
container.Add(secondObject = new TestDrawableHitObject(new HitObject { StartTime = 1000 }));
});
AddStep("move first object after second", () => firstObject.HitObject.StartTime = 2000);
AddAssert("first object index is 1", () => container.IndexOf(firstObject) == 0);
AddAssert("second object index is 0", () => container.IndexOf(secondObject) == 1);
}
private class TestDrawableHitObject : DrawableHitObject
{
public TestDrawableHitObject([NotNull] HitObject hitObject)
: base(hitObject)
{
}
}
}
}

View File

@ -43,6 +43,8 @@ public virtual bool Remove(DrawableHitObject hitObject)
return true;
}
public int IndexOf(DrawableHitObject hitObject) => IndexOfInternal(hitObject);
private void onStartTimeChanged(DrawableHitObject hitObject)
{
if (!RemoveInternal(hitObject))