public void DrawingObjectの位置交換() { var window = new EPuzzleWindow(); var state = new WindowState(window); window.State = state; var container0 = new DrawingObjectContainer() { Position = DrawingObjectPosition.Relative, MarginLeft = 1f, MarginTop = 10f, Height = 100, }; state.Items.Add(container0); var container1 = new DrawingObjectContainer() { Position = DrawingObjectPosition.Relative, MarginLeft = 1f, MarginTop = 10f, Height = 100, }; state.Items.Add(container1); var a = new EigoTestLabelItem() { Position = DrawingObjectPosition.Absolute, Width = 10, Height = 100, Name = "a", }; container0.Items.Add(a); var b = new EigoTestLabelItem() { Position = DrawingObjectPosition.Absolute, Left = 0, Top = 0, Width = 20, Height = 100, Name = "b", }; container1.Items.Add(b); var c = new EigoTestLabelItem() { Position = DrawingObjectPosition.Absolute, Left = 21, Top = 0, Width = 10, Height = 100, Name = "c", }; container1.Items.Add(c); // container0 Assert.AreEqual(1, container0.BorderLeft); Assert.AreEqual(10, container0.BorderTop); Assert.AreEqual(100, container0.Height); CollectionAssert.AreEqual(new [] { a, }, container0.Items); // container1 Assert.AreEqual(1, container1.BorderLeft); Assert.AreEqual(120, container1.BorderTop); Assert.AreEqual(100, container1.Height); CollectionAssert.AreEqual(new [] { b, c, }, container1.Items); // a Assert.AreEqual("a", a.Name); Assert.AreEqual(1, a.OuterLeft); Assert.AreEqual(10, a.OuterTop); Assert.AreEqual(11, a.OuterRight); Assert.AreEqual(110, a.OuterBottom); // b Assert.AreEqual("b", b.Name); Assert.AreEqual(1, b.OuterLeft); Assert.AreEqual(120, b.OuterTop); Assert.AreEqual(21, b.OuterRight); Assert.AreEqual(220, b.OuterBottom); // c Assert.AreEqual("c", c.Name); Assert.AreEqual(22, c.OuterLeft); Assert.AreEqual(120, c.OuterTop); Assert.AreEqual(32, c.OuterRight); Assert.AreEqual(220, c.OuterBottom); WindowState.NowObject = new TestNowObject(); WindowState.NowObject.Now = DateTime.MinValue; var idouJikan = TimeSpan.FromSeconds(1d); state.場所の入れ換え(a, c, idouJikan); var aa = state.Items.Single(x => "a" == x.Name); var cc = state.Items.Single(x => "c" == x.Name); Assert.False(a.IsClickable); Assert.False(a.IsVisible); Assert.False(c.IsClickable); Assert.False(c.IsVisible); Assert.False(aa.IsClickable); Assert.True(aa.IsVisible); Assert.AreEqual(DrawingObjectPosition.Absolute, aa.Position); Assert.AreSame(state.DrawingObjectRoot, aa.Parent); Assert.AreEqual(a.OuterLeft, aa.OuterLeft); Assert.AreEqual(a.OuterTop, aa.OuterTop); Assert.AreEqual(a.OuterWidth, aa.OuterWidth); Assert.False(cc.IsClickable); Assert.True(cc.IsVisible); Assert.AreEqual(DrawingObjectPosition.Absolute, cc.Position); Assert.AreSame(state.DrawingObjectRoot, cc.Parent); Assert.AreEqual(c.OuterLeft, cc.OuterLeft); Assert.AreEqual(c.OuterTop, cc.OuterTop); Assert.AreEqual(c.OuterWidth, cc.OuterWidth); // 移動中 WindowState.NowObject.Now += TimeSpan.FromTicks((int)Math.Round(idouJikan.Ticks * 0.5f)); window.Tick(); Assert.AreEqual(c.OuterLeft + (a.OuterLeft - c.OuterLeft) * 0.5f, cc.OuterLeft, 0.1f); Assert.AreEqual(c.OuterTop + (a.OuterTop - c.OuterTop) * 0.5f, cc.OuterTop, 0.1f); Assert.AreEqual(c.Width + (a.Width - c.Width) * 0.5f, c.Width, 0.1f); Assert.AreEqual(a.OuterLeft + (c.OuterLeft - a.OuterLeft) * 0.5f, aa.OuterLeft, 0.1f); Assert.AreEqual(a.OuterTop + (c.OuterTop - a.OuterTop) * 0.5f, aa.OuterTop, 0.1f); Assert.AreEqual(a.Width + (c.Width - a.Width) * 0.5f, a.Width, 0.1f); // 場所の入れ換え完了 WindowState.NowObject.Now += idouJikan; window.Tick(); CollectionAssert.DoesNotContain(state.GetAllItems(), a); CollectionAssert.DoesNotContain(state.GetAllItems(), c); Assert.Null(a.Parent); Assert.Null(c.Parent); CollectionAssert.AreEqual(new [] { cc, }, container0.Items); CollectionAssert.AreEqual(new [] { b, aa }, container1.Items); Assert.True(aa.IsClickable); Assert.True(aa.IsVisible); Assert.True(cc.IsClickable); Assert.True(cc.IsVisible); // cc Assert.AreEqual("c", cc.Name); Assert.AreEqual(1, cc.OuterLeft); Assert.AreEqual(10, cc.OuterTop); Assert.AreEqual(11, cc.OuterRight); Assert.AreEqual(110, cc.OuterBottom); // aa Assert.AreEqual("a", aa.Name); Assert.AreEqual(22, aa.OuterLeft); Assert.AreEqual(120, aa.OuterTop); Assert.AreEqual(32, aa.OuterRight); Assert.AreEqual(220, aa.OuterBottom); }