Merge branch 'master' into fix-carousel-restore-previous-selection

This commit is contained in:
Dan Balasescu 2020-03-23 11:01:18 +09:00 committed by GitHub
commit fb21c7d82d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 107 additions and 51 deletions

View File

@ -4,48 +4,43 @@
using System; using System;
using NUnit.Framework; using NUnit.Framework;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Testing;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
using osu.Game.Beatmaps.ControlPoints; using osu.Game.Beatmaps.ControlPoints;
using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects;
using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables;
using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.Scoring;
using osu.Game.Skinning; using osu.Game.Skinning;
using osu.Game.Tests.Visual;
using osuTK; using osuTK;
namespace osu.Game.Rulesets.Osu.Tests namespace osu.Game.Rulesets.Osu.Tests
{ {
public class TestSceneHitCircleArea : ManualInputManagerTestScene public class TestSceneHitCircleArea : OsuManualInputManagerTestScene
{ {
private HitCircle hitCircle; private HitCircle hitCircle;
private DrawableHitCircle drawableHitCircle; private DrawableHitCircle drawableHitCircle;
private DrawableHitCircle.HitReceptor hitAreaReceptor => drawableHitCircle.HitArea; private DrawableHitCircle.HitReceptor hitAreaReceptor => drawableHitCircle.HitArea;
[SetUp] [SetUp]
public new void SetUp() public void SetUp() => Schedule(() =>
{ {
base.SetUp(); hitCircle = new HitCircle
Schedule(() =>
{ {
hitCircle = new HitCircle Position = new Vector2(100, 100),
{ StartTime = Time.Current + 500
Position = new Vector2(100, 100), };
StartTime = Time.Current + 500
};
hitCircle.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()); hitCircle.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty());
Child = new SkinProvidingContainer(new DefaultSkin()) Child = new SkinProvidingContainer(new DefaultSkin())
{
RelativeSizeAxes = Axes.Both,
Child = drawableHitCircle = new DrawableHitCircle(hitCircle)
{ {
RelativeSizeAxes = Axes.Both, Size = new Vector2(100)
Child = drawableHitCircle = new DrawableHitCircle(hitCircle) }
{ };
Size = new Vector2(100) });
}
};
});
}
[Test] [Test]
public void TestCircleHitCentre() public void TestCircleHitCentre()

View File

@ -23,7 +23,7 @@ using osuTK.Graphics;
namespace osu.Game.Rulesets.Osu.Tests namespace osu.Game.Rulesets.Osu.Tests
{ {
public class TestSceneOsuDistanceSnapGrid : ManualInputManagerTestScene public class TestSceneOsuDistanceSnapGrid : OsuManualInputManagerTestScene
{ {
private const double beat_length = 100; private const double beat_length = 100;
private static readonly Vector2 grid_position = new Vector2(512, 384); private static readonly Vector2 grid_position = new Vector2(512, 384);

View File

@ -12,7 +12,7 @@ using osu.Game.Tests.Visual;
namespace osu.Game.Rulesets.Osu.Tests namespace osu.Game.Rulesets.Osu.Tests
{ {
public class TestSceneResumeOverlay : ManualInputManagerTestScene public class TestSceneResumeOverlay : OsuManualInputManagerTestScene
{ {
public override IReadOnlyList<Type> RequiredTypes => new[] public override IReadOnlyList<Type> RequiredTypes => new[]
{ {

View File

@ -37,7 +37,7 @@ using osuTK.Graphics;
namespace osu.Game.Tests.Visual.Background namespace osu.Game.Tests.Visual.Background
{ {
[TestFixture] [TestFixture]
public class TestSceneUserDimBackgrounds : ManualInputManagerTestScene public class TestSceneUserDimBackgrounds : OsuManualInputManagerTestScene
{ {
public override IReadOnlyList<Type> RequiredTypes => new[] public override IReadOnlyList<Type> RequiredTypes => new[]
{ {

View File

@ -12,7 +12,7 @@ using osuTK.Graphics;
namespace osu.Game.Tests.Visual.Components namespace osu.Game.Tests.Visual.Components
{ {
[TestFixture] [TestFixture]
public class TestSceneIdleTracker : ManualInputManagerTestScene public class TestSceneIdleTracker : OsuManualInputManagerTestScene
{ {
private IdleTrackingBox box1; private IdleTrackingBox box1;
private IdleTrackingBox box2; private IdleTrackingBox box2;

View File

@ -3,27 +3,83 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using osu.Framework.Allocation; using System.Linq;
using NUnit.Framework;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Shapes;
using osu.Framework.Graphics.UserInterface;
using osu.Framework.Testing;
using osu.Game.Screens.Edit; using osu.Game.Screens.Edit;
using osu.Game.Screens.Edit.Compose.Components; using osu.Game.Screens.Edit.Compose.Components;
using osuTK; using osuTK;
using osuTK.Input;
namespace osu.Game.Tests.Visual.Editor namespace osu.Game.Tests.Visual.Editor
{ {
public class TestSceneBeatDivisorControl : OsuTestScene public class TestSceneBeatDivisorControl : OsuManualInputManagerTestScene
{ {
public override IReadOnlyList<Type> RequiredTypes => new[] { typeof(BindableBeatDivisor) }; public override IReadOnlyList<Type> RequiredTypes => new[] { typeof(BindableBeatDivisor) };
private BeatDivisorControl beatDivisorControl;
private BindableBeatDivisor bindableBeatDivisor;
[BackgroundDependencyLoader] private SliderBar<int> tickSliderBar;
private void load() private EquilateralTriangle tickMarkerHead;
[SetUp]
public void SetUp() => Schedule(() =>
{ {
Child = new BeatDivisorControl(new BindableBeatDivisor()) Child = beatDivisorControl = new BeatDivisorControl(bindableBeatDivisor = new BindableBeatDivisor(16))
{ {
Anchor = Anchor.Centre, Anchor = Anchor.Centre,
Origin = Anchor.Centre, Origin = Anchor.Centre,
Size = new Vector2(90, 90) Size = new Vector2(90, 90)
}; };
tickSliderBar = beatDivisorControl.ChildrenOfType<SliderBar<int>>().Single();
tickMarkerHead = tickSliderBar.ChildrenOfType<EquilateralTriangle>().Single();
});
[Test]
public void TestBindableBeatDivisor()
{
AddRepeatStep("move previous", () => bindableBeatDivisor.Previous(), 4);
AddAssert("divisor is 4", () => bindableBeatDivisor.Value == 4);
AddRepeatStep("move next", () => bindableBeatDivisor.Next(), 3);
AddAssert("divisor is 12", () => bindableBeatDivisor.Value == 12);
}
[Test]
public void TestMouseInput()
{
AddStep("hold marker", () =>
{
InputManager.MoveMouseTo(tickMarkerHead.ScreenSpaceDrawQuad.Centre);
InputManager.PressButton(MouseButton.Left);
});
AddStep("move to 8 and release", () =>
{
InputManager.MoveMouseTo(tickSliderBar.ScreenSpaceDrawQuad.Centre);
InputManager.ReleaseButton(MouseButton.Left);
});
AddAssert("divisor is 8", () => bindableBeatDivisor.Value == 8);
AddStep("hold marker", () => InputManager.PressButton(MouseButton.Left));
AddStep("move to 16", () => InputManager.MoveMouseTo(getPositionForDivisor(16)));
AddStep("move to ~10 and release", () =>
{
InputManager.MoveMouseTo(getPositionForDivisor(10));
InputManager.ReleaseButton(MouseButton.Left);
});
AddAssert("divisor clamped to 8", () => bindableBeatDivisor.Value == 8);
}
private Vector2 getPositionForDivisor(int divisor)
{
var relativePosition = (float)Math.Clamp(divisor, 0, 16) / 16;
var sliderDrawQuad = tickSliderBar.ScreenSpaceDrawQuad;
return new Vector2(
sliderDrawQuad.TopLeft.X + sliderDrawQuad.Width * relativePosition,
sliderDrawQuad.Centre.Y
);
} }
} }
} }

View File

@ -17,7 +17,7 @@ using osuTK.Graphics;
namespace osu.Game.Tests.Visual.Editor namespace osu.Game.Tests.Visual.Editor
{ {
public class TestSceneZoomableScrollContainer : ManualInputManagerTestScene public class TestSceneZoomableScrollContainer : OsuManualInputManagerTestScene
{ {
private ZoomableScrollContainer scrollContainer; private ZoomableScrollContainer scrollContainer;
private Drawable innerBox; private Drawable innerBox;

View File

@ -18,7 +18,7 @@ using osuTK.Input;
namespace osu.Game.Tests.Visual.Gameplay namespace osu.Game.Tests.Visual.Gameplay
{ {
[Description("player pause/fail screens")] [Description("player pause/fail screens")]
public class TestSceneGameplayMenuOverlay : ManualInputManagerTestScene public class TestSceneGameplayMenuOverlay : OsuManualInputManagerTestScene
{ {
public override IReadOnlyList<Type> RequiredTypes => new[] { typeof(FailOverlay), typeof(PauseOverlay) }; public override IReadOnlyList<Type> RequiredTypes => new[] { typeof(FailOverlay), typeof(PauseOverlay) };

View File

@ -15,7 +15,7 @@ using osuTK.Input;
namespace osu.Game.Tests.Visual.Gameplay namespace osu.Game.Tests.Visual.Gameplay
{ {
public class TestSceneHUDOverlay : ManualInputManagerTestScene public class TestSceneHUDOverlay : OsuManualInputManagerTestScene
{ {
private HUDOverlay hudOverlay; private HUDOverlay hudOverlay;

View File

@ -13,7 +13,7 @@ using osuTK.Input;
namespace osu.Game.Tests.Visual.Gameplay namespace osu.Game.Tests.Visual.Gameplay
{ {
[Description("'Hold to Quit' UI element")] [Description("'Hold to Quit' UI element")]
public class TestSceneHoldForMenuButton : ManualInputManagerTestScene public class TestSceneHoldForMenuButton : OsuManualInputManagerTestScene
{ {
private bool exitAction; private bool exitAction;

View File

@ -13,7 +13,7 @@ using osuTK.Input;
namespace osu.Game.Tests.Visual.Gameplay namespace osu.Game.Tests.Visual.Gameplay
{ {
[TestFixture] [TestFixture]
public class TestSceneKeyCounter : ManualInputManagerTestScene public class TestSceneKeyCounter : OsuManualInputManagerTestScene
{ {
public override IReadOnlyList<Type> RequiredTypes => new[] public override IReadOnlyList<Type> RequiredTypes => new[]
{ {

View File

@ -29,7 +29,7 @@ using osuTK.Input;
namespace osu.Game.Tests.Visual.Gameplay namespace osu.Game.Tests.Visual.Gameplay
{ {
public class TestScenePlayerLoader : ManualInputManagerTestScene public class TestScenePlayerLoader : OsuManualInputManagerTestScene
{ {
private TestPlayerLoader loader; private TestPlayerLoader loader;
private TestPlayerLoaderContainer container; private TestPlayerLoaderContainer container;

View File

@ -14,7 +14,7 @@ using osuTK.Input;
namespace osu.Game.Tests.Visual.Gameplay namespace osu.Game.Tests.Visual.Gameplay
{ {
[TestFixture] [TestFixture]
public class TestSceneSkipOverlay : ManualInputManagerTestScene public class TestSceneSkipOverlay : OsuManualInputManagerTestScene
{ {
private SkipOverlay skip; private SkipOverlay skip;
private int requestCount; private int requestCount;

View File

@ -20,7 +20,7 @@ using osuTK.Input;
namespace osu.Game.Tests.Visual.Multiplayer namespace osu.Game.Tests.Visual.Multiplayer
{ {
public class TestSceneDrawableRoomPlaylist : ManualInputManagerTestScene public class TestSceneDrawableRoomPlaylist : OsuManualInputManagerTestScene
{ {
public override IReadOnlyList<Type> RequiredTypes => new[] public override IReadOnlyList<Type> RequiredTypes => new[]
{ {

View File

@ -27,7 +27,7 @@ namespace osu.Game.Tests.Visual.Navigation
/// <summary> /// <summary>
/// A scene which tests full game flow. /// A scene which tests full game flow.
/// </summary> /// </summary>
public abstract class OsuGameTestScene : ManualInputManagerTestScene public abstract class OsuGameTestScene : OsuManualInputManagerTestScene
{ {
private GameHost host; private GameHost host;

View File

@ -22,7 +22,7 @@ using osuTK.Input;
namespace osu.Game.Tests.Visual.Online namespace osu.Game.Tests.Visual.Online
{ {
public class TestSceneChatOverlay : ManualInputManagerTestScene public class TestSceneChatOverlay : OsuManualInputManagerTestScene
{ {
public override IReadOnlyList<Type> RequiredTypes => new[] public override IReadOnlyList<Type> RequiredTypes => new[]
{ {

View File

@ -15,7 +15,7 @@ using osuTK.Input;
namespace osu.Game.Tests.Visual.UserInterface namespace osu.Game.Tests.Visual.UserInterface
{ {
public class TestSceneCommentEditor : ManualInputManagerTestScene public class TestSceneCommentEditor : OsuManualInputManagerTestScene
{ {
public override IReadOnlyList<Type> RequiredTypes => new[] public override IReadOnlyList<Type> RequiredTypes => new[]
{ {

View File

@ -17,7 +17,7 @@ using osuTK.Graphics;
namespace osu.Game.Tests.Visual.UserInterface namespace osu.Game.Tests.Visual.UserInterface
{ {
[TestFixture] [TestFixture]
public class TestSceneCursors : ManualInputManagerTestScene public class TestSceneCursors : OsuManualInputManagerTestScene
{ {
private readonly MenuCursorContainer menuCursorContainer; private readonly MenuCursorContainer menuCursorContainer;
private readonly CustomCursorBox[] cursorBoxes = new CustomCursorBox[6]; private readonly CustomCursorBox[] cursorBoxes = new CustomCursorBox[6];

View File

@ -27,7 +27,7 @@ using osuTK.Input;
namespace osu.Game.Tests.Visual.UserInterface namespace osu.Game.Tests.Visual.UserInterface
{ {
public class TestSceneDeleteLocalScore : ManualInputManagerTestScene public class TestSceneDeleteLocalScore : OsuManualInputManagerTestScene
{ {
public override IReadOnlyList<Type> RequiredTypes => new[] public override IReadOnlyList<Type> RequiredTypes => new[]
{ {

View File

@ -12,7 +12,7 @@ using osuTK.Graphics;
namespace osu.Game.Tests.Visual.UserInterface namespace osu.Game.Tests.Visual.UserInterface
{ {
[TestFixture] [TestFixture]
public class TestSceneOsuHoverContainer : ManualInputManagerTestScene public class TestSceneOsuHoverContainer : OsuManualInputManagerTestScene
{ {
private OsuHoverTestContainer hoverContainer; private OsuHoverTestContainer hoverContainer;
private Box colourContainer; private Box colourContainer;

View File

@ -12,7 +12,7 @@ using osuTK.Input;
namespace osu.Game.Tests.Visual.UserInterface namespace osu.Game.Tests.Visual.UserInterface
{ {
public class TestSceneStatefulMenuItem : ManualInputManagerTestScene public class TestSceneStatefulMenuItem : OsuManualInputManagerTestScene
{ {
public override IReadOnlyList<Type> RequiredTypes => new[] public override IReadOnlyList<Type> RequiredTypes => new[]
{ {

View File

@ -9,7 +9,7 @@ using osuTK.Input;
namespace osu.Game.Tests.Visual.UserInterface namespace osu.Game.Tests.Visual.UserInterface
{ {
public class TestSceneSwitchButton : ManualInputManagerTestScene public class TestSceneSwitchButton : OsuManualInputManagerTestScene
{ {
private SwitchButton switchButton; private SwitchButton switchButton;

View File

@ -279,6 +279,11 @@ namespace osu.Game.Screens.Edit.Compose.Components
handleMouseInput(e.ScreenSpaceMousePosition); handleMouseInput(e.ScreenSpaceMousePosition);
} }
protected override void OnDragEnd(DragEndEvent e)
{
handleMouseInput(e.ScreenSpaceMousePosition);
}
private void handleMouseInput(Vector2 screenSpaceMousePosition) private void handleMouseInput(Vector2 screenSpaceMousePosition)
{ {
// copied from SliderBar so we can do custom spacing logic. // copied from SliderBar so we can do custom spacing logic.

View File

@ -14,7 +14,7 @@ using osuTK.Graphics;
namespace osu.Game.Tests.Visual namespace osu.Game.Tests.Visual
{ {
public abstract class ManualInputManagerTestScene : OsuTestScene public abstract class OsuManualInputManagerTestScene : OsuTestScene
{ {
protected override Container<Drawable> Content => content; protected override Container<Drawable> Content => content;
private readonly Container content; private readonly Container content;
@ -24,7 +24,7 @@ namespace osu.Game.Tests.Visual
private readonly TriangleButton buttonTest; private readonly TriangleButton buttonTest;
private readonly TriangleButton buttonLocal; private readonly TriangleButton buttonLocal;
protected ManualInputManagerTestScene() protected OsuManualInputManagerTestScene()
{ {
base.Content.AddRange(new Drawable[] base.Content.AddRange(new Drawable[]
{ {

View File

@ -11,7 +11,7 @@ namespace osu.Game.Tests.Visual
/// <summary> /// <summary>
/// A test case which can be used to test a screen (that relies on OnEntering being called to execute startup instructions). /// A test case which can be used to test a screen (that relies on OnEntering being called to execute startup instructions).
/// </summary> /// </summary>
public abstract class ScreenTestScene : ManualInputManagerTestScene public abstract class ScreenTestScene : OsuManualInputManagerTestScene
{ {
protected readonly OsuScreenStack Stack; protected readonly OsuScreenStack Stack;

View File

@ -8,7 +8,7 @@ using osu.Game.Rulesets.Edit;
namespace osu.Game.Tests.Visual namespace osu.Game.Tests.Visual
{ {
public abstract class SelectionBlueprintTestScene : ManualInputManagerTestScene public abstract class SelectionBlueprintTestScene : OsuManualInputManagerTestScene
{ {
protected override Container<Drawable> Content => content ?? base.Content; protected override Container<Drawable> Content => content ?? base.Content;
private readonly Container content; private readonly Container content;

View File

@ -68,7 +68,7 @@ namespace osu.Game.Users.Drawables
if (!OpenOnClick.Value) if (!OpenOnClick.Value)
return; return;
if (user != null) if (user?.Id > 1)
game?.ShowUser(user.Id); game?.ShowUser(user.Id);
} }