mirror of https://github.com/ppy/osu
Add path type menu test cases
This commit is contained in:
parent
be4520fe33
commit
4110d1675d
|
@ -4,9 +4,11 @@
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.UserInterface;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Beatmaps.ControlPoints;
|
using osu.Game.Beatmaps.ControlPoints;
|
||||||
using osu.Game.Rulesets.Objects;
|
using osu.Game.Rulesets.Objects;
|
||||||
|
using osu.Game.Rulesets.Objects.Types;
|
||||||
using osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components;
|
using osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders.Components;
|
||||||
using osu.Game.Rulesets.Osu.Objects;
|
using osu.Game.Rulesets.Osu.Objects;
|
||||||
using osu.Game.Tests.Visual;
|
using osu.Game.Tests.Visual;
|
||||||
|
@ -14,7 +16,7 @@
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Osu.Tests.Editor
|
namespace osu.Game.Rulesets.Osu.Tests.Editor
|
||||||
{
|
{
|
||||||
public class TestScenePathControlPointVisualiser : OsuTestScene
|
public class TestScenePathControlPointVisualiser : OsuManualInputManagerTestScene
|
||||||
{
|
{
|
||||||
private Slider slider;
|
private Slider slider;
|
||||||
private PathControlPointVisualiser visualiser;
|
private PathControlPointVisualiser visualiser;
|
||||||
|
@ -43,12 +45,107 @@ public void TestAddOverlappingControlPoints()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestPerfectCurveTooManyPoints()
|
||||||
|
{
|
||||||
|
createVisualiser(true);
|
||||||
|
|
||||||
|
addControlPointStep(new Vector2(200), PathType.Bezier);
|
||||||
|
addControlPointStep(new Vector2(300));
|
||||||
|
addControlPointStep(new Vector2(500, 300));
|
||||||
|
addControlPointStep(new Vector2(700, 200));
|
||||||
|
addControlPointStep(new Vector2(500, 100));
|
||||||
|
|
||||||
|
// Must be both hovering and selecting the control point for the context menu to work.
|
||||||
|
moveMouseToControlPoint(1);
|
||||||
|
AddStep("select control point", () => visualiser.Pieces[1].IsSelected.Value = true);
|
||||||
|
addContextMenuItemStep("Perfect curve");
|
||||||
|
|
||||||
|
assertControlPointPathType(0, PathType.Bezier);
|
||||||
|
assertControlPointPathType(1, PathType.PerfectCurve);
|
||||||
|
AddAssert("point 3 is not inherited", () => slider.Path.ControlPoints[3].Type != null);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestPerfectCurveLastThreePoints()
|
||||||
|
{
|
||||||
|
createVisualiser(true);
|
||||||
|
|
||||||
|
addControlPointStep(new Vector2(200), PathType.Bezier);
|
||||||
|
addControlPointStep(new Vector2(300));
|
||||||
|
addControlPointStep(new Vector2(500, 300));
|
||||||
|
addControlPointStep(new Vector2(700, 200));
|
||||||
|
addControlPointStep(new Vector2(500, 100));
|
||||||
|
|
||||||
|
moveMouseToControlPoint(2);
|
||||||
|
AddStep("select control point", () => visualiser.Pieces[2].IsSelected.Value = true);
|
||||||
|
addContextMenuItemStep("Perfect curve");
|
||||||
|
|
||||||
|
assertControlPointPathType(0, PathType.Bezier);
|
||||||
|
assertControlPointPathType(2, PathType.PerfectCurve);
|
||||||
|
assertControlPointPathType(4, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestPerfectCurveLastTwoPoints()
|
||||||
|
{
|
||||||
|
createVisualiser(true);
|
||||||
|
|
||||||
|
addControlPointStep(new Vector2(200), PathType.Bezier);
|
||||||
|
addControlPointStep(new Vector2(300));
|
||||||
|
addControlPointStep(new Vector2(500, 300));
|
||||||
|
addControlPointStep(new Vector2(700, 200));
|
||||||
|
addControlPointStep(new Vector2(500, 100));
|
||||||
|
|
||||||
|
moveMouseToControlPoint(3);
|
||||||
|
AddStep("select control point", () => visualiser.Pieces[3].IsSelected.Value = true);
|
||||||
|
addContextMenuItemStep("Perfect curve");
|
||||||
|
|
||||||
|
assertControlPointPathType(0, PathType.Bezier);
|
||||||
|
AddAssert("point 3 is not inherited", () => slider.Path.ControlPoints[3].Type != null);
|
||||||
|
}
|
||||||
|
|
||||||
private void createVisualiser(bool allowSelection) => AddStep("create visualiser", () => Child = visualiser = new PathControlPointVisualiser(slider, allowSelection)
|
private void createVisualiser(bool allowSelection) => AddStep("create visualiser", () => Child = visualiser = new PathControlPointVisualiser(slider, allowSelection)
|
||||||
{
|
{
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre
|
Origin = Anchor.Centre
|
||||||
});
|
});
|
||||||
|
|
||||||
private void addControlPointStep(Vector2 position) => AddStep($"add control point {position}", () => slider.Path.ControlPoints.Add(new PathControlPoint(position)));
|
private void addControlPointStep(Vector2 position) => addControlPointStep(position, null);
|
||||||
|
|
||||||
|
private void addControlPointStep(Vector2 position, PathType? type)
|
||||||
|
{
|
||||||
|
AddStep($"add {type} control point at {position}", () =>
|
||||||
|
{
|
||||||
|
slider.Path.ControlPoints.Add(new PathControlPoint(position, type));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void moveMouseToControlPoint(int index)
|
||||||
|
{
|
||||||
|
AddStep($"move mouse to control point {index}", () =>
|
||||||
|
{
|
||||||
|
Vector2 position = slider.Path.ControlPoints[index].Position.Value;
|
||||||
|
InputManager.MoveMouseTo(visualiser.Pieces[0].Parent.ToScreenSpace(position));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertControlPointPathType(int controlPointIndex, PathType? type)
|
||||||
|
{
|
||||||
|
AddAssert($"point {controlPointIndex} is {type}", () =>
|
||||||
|
{
|
||||||
|
return slider.Path.ControlPoints[controlPointIndex].Type.Value == type;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addContextMenuItemStep(string contextMenuText)
|
||||||
|
{
|
||||||
|
AddStep($"click context menu item \"{contextMenuText}\"", () =>
|
||||||
|
{
|
||||||
|
MenuItem item = visualiser.ContextMenuItems[1].Items.FirstOrDefault(menuItem => menuItem.Text.Value == contextMenuText);
|
||||||
|
|
||||||
|
item?.Action?.Value();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue