using System; using Amphora; using Annulus; using Azimuth; using UnitTestSharp; namespace Glass.UnitTests { public class WorldAnchoredPanelTests : TestFixture { private static readonly Vector Size = new Vector(30, 10); private static readonly Vector Offset = new Vector(-15, -20); private static WorldAnchoredPanel NewPanel(Func toGlassSpace, Vector worldPosition) { return new WorldAnchoredPanel(toGlassSpace) { Bounds = Rect.FromPositionAndSize(Vector.Zero, Size), WorldPosition = worldPosition, OffsetFromAnchor = Offset, }; } public class CtorTests : TestFixture { public void IsHoistedAndAlwaysOnTopAndUnclipped() { WorldAnchoredPanel panel = NewPanel(point => point, Vector.Zero); CheckTrue(panel.Hoisted); CheckTrue(panel.AlwaysOnTop); CheckFalse(panel.ClipToAncestors); } } public class UpdateTests : TestFixture { public void SitsAtTheConvertedPositionPlusTheOffset() { WorldAnchoredPanel panel = NewPanel(point => point * 2, new Vector(100, 50)); panel.Update(Duration.FromMilliseconds(16), new UpdateState()); CheckEqual(new Vector(185, 80), panel.Bounds.TopLeft); } public void KeepsItsSize() { WorldAnchoredPanel panel = NewPanel(point => point, new Vector(100, 50)); panel.Update(Duration.FromMilliseconds(16), new UpdateState()); CheckEqual(Size, panel.Bounds.Size); } public void WhenTheConversionChanges_FollowsIt() { var cameraShift = new Vector(0, 0); WorldAnchoredPanel panel = NewPanel(point => point - cameraShift, new Vector(100, 50)); cameraShift = new Vector(10, 0); panel.Update(Duration.FromMilliseconds(16), new UpdateState()); CheckEqual(new Vector(75, 30), panel.Bounds.TopLeft); } public void WhenTheWorldPositionMoves_FollowsIt() { WorldAnchoredPanel panel = NewPanel(point => point, new Vector(100, 50)); panel.WorldPosition = new Vector(120, 40); panel.Update(Duration.FromMilliseconds(16), new UpdateState()); CheckEqual(new Vector(105, 20), panel.Bounds.TopLeft); } } } }