Rewrite repeat arrow test

This commit is contained in:
Bartłomiej Dach 2020-04-05 15:37:31 +02:00
parent cbc546905f
commit c817cc726a

View File

@ -59,8 +59,6 @@ namespace osu.Game.Rulesets.Osu.Tests
} }
private DrawableSlider slider; private DrawableSlider slider;
private DrawableSliderRepeat repeat;
private Vector2 savedVector;
[SetUpSteps] [SetUpSteps]
public override void SetUpSteps() { } public override void SetUpSteps() { }
@ -112,31 +110,24 @@ namespace osu.Game.Rulesets.Osu.Tests
} }
} }
[TestCase(true)] [Test]
[TestCase(false)] public void TestRepeatArrowDoesNotMoveWhenHit()
public void TestArrowMovement(bool isHit)
{ {
AddStep($"{(isHit ? "enable" : "disable")} autoplay", () => autoplay = isHit); AddStep("enable autoplay", () => autoplay = true);
setSnaking(true); setSnaking(true);
base.SetUpSteps(); base.SetUpSteps();
addSeekStep(16500); checkPositionChange(16600, sliderRepeat, positionAlmostSame);
AddStep("retrieve 2nd slider repeat", () => }
{
var drawable = Player.DrawableRuleset.Playfield.AllHitObjects.ElementAt(1);
repeat = drawable.ChildrenOfType<Container<DrawableSliderRepeat>>().First().Children.First();
});
AddStep("Save repeat vector", () => savedVector = repeat.Position);
addSeekStep(16700);
AddAssert($"Repeat vector {(isHit ? "is same" : "decreased")}", () => [Test]
{ public void TestRepeatArrowMovesWhenNotHit()
if (isHit) {
// Precision.AlmostEquals is used because repeat might have a chance to update its position depending on where in the frame its hit AddStep("disable autoplay", () => autoplay = false);
return Precision.AlmostEquals(savedVector, repeat.Position, 1); setSnaking(true);
base.SetUpSteps();
return repeat.X < savedVector.X && repeat.Y < savedVector.Y; checkPositionChange(16600, sliderRepeat, positionDecreased);
});
} }
private void retrieveSlider(int index) => AddStep($"retrieve {(index + 1).ToOrdinalWords()} slider", () => private void retrieveSlider(int index) => AddStep($"retrieve {(index + 1).ToOrdinalWords()} slider", () =>
@ -166,10 +157,17 @@ namespace osu.Game.Rulesets.Osu.Tests
private List<Vector2> sliderCurve => ((PlaySliderBody)slider.Body.Drawable).CurrentCurve; private List<Vector2> sliderCurve => ((PlaySliderBody)slider.Body.Drawable).CurrentCurve;
private Vector2 sliderStart() => sliderCurve.First(); private Vector2 sliderStart() => sliderCurve.First();
private Vector2 sliderEnd() => sliderCurve.Last(); private Vector2 sliderEnd() => sliderCurve.Last();
private Vector2 sliderRepeat()
{
var drawable = Player.DrawableRuleset.Playfield.AllHitObjects.ElementAt(1);
var repeat = drawable.ChildrenOfType<Container<DrawableSliderRepeat>>().First().Children.First();
return repeat.Position;
}
private bool positionRemainsSame(Vector2 previous, Vector2 current) => previous == current; private bool positionRemainsSame(Vector2 previous, Vector2 current) => previous == current;
private bool positionIncreased(Vector2 previous, Vector2 current) => current.X > previous.X && current.Y > previous.Y; private bool positionIncreased(Vector2 previous, Vector2 current) => current.X > previous.X && current.Y > previous.Y;
private bool positionDecreased(Vector2 previous, Vector2 current) => current.X < previous.X && current.Y < previous.Y; private bool positionDecreased(Vector2 previous, Vector2 current) => current.X < previous.X && current.Y < previous.Y;
private bool positionAlmostSame(Vector2 previous, Vector2 current) => Precision.AlmostEquals(previous, current, 1);
private void checkPositionChange(double startTime, Func<Vector2> positionToCheck, Func<Vector2, Vector2, bool> positionAssertion) private void checkPositionChange(double startTime, Func<Vector2> positionToCheck, Func<Vector2, Vector2, bool> positionAssertion)
{ {