public void RaisesViewsCollectionChangedOnConnectAndDisconnect() { var connected = new object(); var view = new object(); var match = Substitute.For <IViewModelViewMatch>(); match.View.Returns(view); this._viewMatcher.Match(connected).Returns(match); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(new object()); // чтобы проверяемый индекс отличался от нуля. NotifyCollectionChangedEventArgs args = null; connector.Views.CollectionChanged += (sender, e) => args = e; connector.Connect(connected); Assert.AreEqual(NotifyCollectionChangedAction.Add, args.Action); Assert.AreEqual(1, args.NewStartingIndex); CollectionAssert.Contains(args.NewItems, view); connector.Disconnect(connected); Assert.AreEqual(NotifyCollectionChangedAction.Remove, args.Action); Assert.AreEqual(1, args.OldStartingIndex); CollectionAssert.Contains(args.OldItems, view); }
public void AvoidsUIEffectWhileDisconnecting() { // О целях данного теста, см. AvoidsUIEffectWhileConnecting. var connected1 = new object(); var connected2 = new object(); var connected3 = new object(); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); connector.Connect(connected3); connector.Active = connected2; connector.Views.CollectionChanged += (sender, e) => { ((ICollectionView)sender).MoveCurrentToFirst(); }; connector.ActiveChanged += (sender, e) => { Assert.AreEqual(connected2, e.OldValue); Assert.AreEqual(connected3, e.NewValue); }; connector.Disconnect(connected2); }
public void MovesViewInRespectToConnected() { var connected1 = new object(); var connected2 = new object(); var view1 = new object(); var view2 = new object(); var match1 = Substitute.For <IViewModelViewMatch>(); var match2 = Substitute.For <IViewModelViewMatch>(); match1.View.Returns(view1); match2.View.Returns(view2); this._viewMatcher.Match(connected1).Returns(match1); this._viewMatcher.Match(connected2).Returns(match2); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); connector.MoveConnected(connected1, 1); Assert.AreEqual(1, connector.Views.Cast <object>().ToList().IndexOf(view1)); }
public void RemovesDisconnectedViewFromViews() { var connected1 = new object(); var connected2 = new object(); var view1 = new object(); var view2 = new object(); var match1 = Substitute.For <IViewModelViewMatch>(); var match2 = Substitute.For <IViewModelViewMatch>(); match1.View.Returns(view1); match2.View.Returns(view2); this._viewMatcher.Match(connected1).Returns(match1); this._viewMatcher.Match(connected2).Returns(match2); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); connector.Disconnect(connected1); Assert.IsFalse(connector.Views.Contains(view1)); Assert.IsTrue(connector.Views.Contains(view2)); }
public void ActivatesOnConnectWhenActivateOnConnectFlagSet() { var connected1 = new object(); var connected2 = new object(); var view1 = new object(); var view2 = new object(); var match1 = Substitute.For <IViewModelViewMatch>(); var match2 = Substitute.For <IViewModelViewMatch>(); match1.View.Returns(view1); match2.View.Returns(view2); this._viewMatcher.Match(connected1).Returns(match1); this._viewMatcher.Match(connected2).Returns(match2); IItemsPlacementConnector connector = this.CreateTestObject(ItemsPlacementConnectorFlags.ActivateOnConnect); connector.Connect(connected1); Assert.AreEqual(connected1, connector.Active); Assert.AreEqual(view1, connector.Views.CurrentItem); connector.Connect(connected2); Assert.AreEqual(connected2, connector.Active); Assert.AreEqual(view2, connector.Views.CurrentItem); }
public void AvoidsUIEffectWhileConnecting() { // Задача теста: убедиться, что внешнее влияние на Views // в процессе вызова Connect игнорируется. Почему это важно? // Ряд контролов WPF, унаследованных от Selector, форсируют // выбор добавленного объекта, когда SelectedItem содержит null. // Это приводит к неожиданным событиям OnActiveChanged, а также // может нарушить синхронизацию между потребителями коннектора // и пользовательским интерфейсом. var connected1 = new object(); var connected2 = new object(); var connected3 = new object(); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); connector.Views.CollectionChanged += (sender, e) => { ((ICollectionView)sender).MoveCurrentToFirst(); }; connector.ActiveChanged += (sender, e) => { Assert.Fail("Вызвано событие ActiveChanged"); }; connector.Connect(connected3); }
public void RaisesActiveChangedWhenActiveAssigned() { var connected1 = new object(); var connected2 = new object(); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); ActiveChangedEventArgs args = null; connector.ActiveChanged += (sender, e) => args = e; connector.Active = connected1; Assert.IsNull(args.OldValue); Assert.AreEqual(connected1, args.NewValue); connector.Active = connected2; Assert.AreEqual(connected1, args.OldValue); Assert.AreEqual(connected2, args.NewValue); connector.Active = null; Assert.AreEqual(connected2, args.OldValue); Assert.IsNull(args.NewValue); }
public void ExposesConnectedInConnected() { var connected1 = new object(); var connected2 = new object(); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); Assert.IsTrue(connector.Connected.Contains(connected1)); Assert.IsTrue(connector.Connected.Contains(connected2)); }
public void RemovesDisconnectedFromConnected() { var connected1 = new object(); var connected2 = new object(); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); connector.Disconnect(connected2); Assert.IsTrue(connector.Connected.Contains(connected1)); Assert.IsFalse(connector.Connected.Contains(connected2)); }
public void ExposesViewFromDragDropData() { var connected = new object(); var view = Substitute.For <IDisposable>(); this._connectedDragDrop.IsDragging(connected).Returns(true); this._connectedDragDrop.GetData(ConnectedDragDropKeys.UriConnectedView).Returns(view); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected); Assert.IsTrue(connector.Views.Contains(view)); this._viewMatcher.DidNotReceiveWithAnyArgs().Match(null); }
public void MovesConnectedWithinConnected() { var connected1 = new object(); var connected2 = new object(); var connected3 = new object(); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); connector.Connect(connected3); connector.MoveConnected(connected1, 2); Assert.AreEqual(2, connector.Connected.ToList().IndexOf(connected1)); }
public void DoesntRaiseActiveChangedWhenTheSameActiveAssigned() { var connected = new object(); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected); connector.Active = connected; var wasRaised = false; connector.ActiveChanged += (sender, e) => wasRaised = true; connector.Active = connected; Assert.IsFalse(wasRaised); }
public void DoesntConnectWhenMatchRaiseException() { this._viewMatcher.Match(null).ReturnsForAnyArgs(ci => { throw new Exception(); }); IItemsPlacementConnector connector = this.CreateTestObject(); try { var resolved = new object(); connector.Connect(resolved); } catch (Exception) { } Assert.IsFalse(connector.Connected.Any()); Assert.IsTrue(connector.Views.IsEmpty); Assert.IsTrue(connector.IsPlacementEmpty); }
public void ExposesAssignedActiveAndItsView() { var connected1 = new object(); var connected2 = new object(); var view1 = new object(); var view2 = new object(); var match1 = Substitute.For <IViewModelViewMatch>(); var match2 = Substitute.For <IViewModelViewMatch>(); match1.View.Returns(view1); match2.View.Returns(view2); this._viewMatcher.Match(connected1).Returns(match1); this._viewMatcher.Match(connected2).Returns(match2); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); Assert.IsNull(connector.Active); Assert.IsNull(connector.Views.CurrentItem); connector.Active = connected1; Assert.AreEqual(connected1, connector.Active); Assert.AreEqual(view1, connector.Views.CurrentItem); Assert.AreEqual(0, connector.Views.CurrentPosition); connector.Active = connected2; Assert.AreEqual(connected2, connector.Active); Assert.AreEqual(view2, connector.Views.CurrentItem); Assert.AreEqual(1, connector.Views.CurrentPosition); connector.Active = null; Assert.IsNull(connector.Active); Assert.IsNull(connector.Views.CurrentItem); Assert.AreEqual(-1, connector.Views.CurrentPosition); }
public void DoesntRaiseConnectedChangedOnMoveConnectedToTheSameIndex() { var connected1 = new object(); var connected2 = new object(); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); var wasRaised = false; connector.ConnectedChanged += (sender, e) => wasRaised = true; connector.MoveConnected(connected1, 0); Assert.IsFalse(wasRaised); connector.MoveConnected(connected2, 1); Assert.IsFalse(wasRaised); }
public void MakesActiveNullWhenActiveIsSingleAndHaveDisconnected() { var connected = new object(); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected); connector.Active = connected; ActiveChangedEventArgs args = null; connector.ActiveChanged += (sender, e) => args = e; connector.Disconnect(connected); Assert.IsNull(connector.Active); Assert.AreEqual(connected, args.OldValue); Assert.IsNull(args.NewValue); }
public void ActivatesConnectedWhenViewsCurrentChanged() { var connected1 = new object(); var connected2 = new object(); var view1 = new object(); var view2 = new object(); var match1 = Substitute.For <IViewModelViewMatch>(); var match2 = Substitute.For <IViewModelViewMatch>(); match1.View.Returns(view1); match2.View.Returns(view2); this._viewMatcher.Match(connected1).Returns(match1); this._viewMatcher.Match(connected2).Returns(match2); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); ActiveChangedEventArgs args = null; connector.ActiveChanged += (sender, e) => args = e; connector.Views.MoveCurrentTo(view2); Assert.AreEqual(connected2, connector.Active); Assert.IsNull(args.OldValue); Assert.AreEqual(connected2, args.NewValue); connector.Views.MoveCurrentTo(view1); Assert.AreEqual(connected1, connector.Active); Assert.AreEqual(connected2, args.OldValue); Assert.AreEqual(connected1, args.NewValue); connector.Views.MoveCurrentTo(null); Assert.IsNull(connector.Active); Assert.AreEqual(connected1, args.OldValue); Assert.IsNull(args.NewValue); }
public void RaisesConnectedChangedOnMoveConnected() { var connected1 = new object(); var connected2 = new object(); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); ConnectedChangedEventArgs args = null; connector.ConnectedChanged += (sender, e) => args = e; connector.MoveConnected(connected1, 1); Assert.AreEqual(ConnectedChangedAction.Move, args.Action); Assert.AreEqual(connected1, args.Changed); connector.MoveConnected(connected2, 1); Assert.AreEqual(ConnectedChangedAction.Move, args.Action); Assert.AreEqual(connected2, args.Changed); }
public void ExposesConnectedAsViewWhenViewModelHasNoMatchedView() { var connected1 = new object(); var connected2 = new object(); var view1 = new object(); var match1 = Substitute.For <IViewModelViewMatch>(); match1.View.Returns(view1); this._viewMatcher.Match(connected1).Returns(match1); this._viewMatcher.Match(connected2).Returns((IViewModelViewMatch)null); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); Assert.IsFalse(connector.Views.Contains(connected1)); Assert.IsTrue(connector.Views.Contains(connected2)); }
public void RaisesViewsCollectionChangedOnMoveConnected() { var connected1 = new object(); var connected2 = new object(); var view1 = new object(); var view2 = new object(); var match1 = Substitute.For <IViewModelViewMatch>(); var match2 = Substitute.For <IViewModelViewMatch>(); match1.View.Returns(view1); match2.View.Returns(view2); this._viewMatcher.Match(connected1).Returns(match1); this._viewMatcher.Match(connected2).Returns(match2); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); NotifyCollectionChangedEventArgs args = null; connector.Views.CollectionChanged += (sender, e) => args = e; connector.MoveConnected(connected1, 1); Assert.AreEqual(NotifyCollectionChangedAction.Move, args.Action); Assert.AreEqual(1, args.NewStartingIndex); CollectionAssert.Contains(args.NewItems, view1); connector.MoveConnected(connected2, 1); Assert.AreEqual(NotifyCollectionChangedAction.Move, args.Action); Assert.AreEqual(1, args.NewStartingIndex); CollectionAssert.Contains(args.NewItems, view2); }
public MainWindowViewModel(Func <IItemsPlacementConnector> itemsPlacementConnectorFactory, IShell shell) { this._figurePlacementConnector = itemsPlacementConnectorFactory(); this._shell = shell; this._shell.AddUriPlacementResolver(this); this.SquareLength = 125; this.SquareBackground = "DeepSkyBlue"; this.CircleDiameter = 150; this.CircleBackground = "Lime"; this.AddSquareCommand = new DelegateCommand(() => { var uri = ShellUriBuilder.StartUri() .Placement("figures") .Module("main") .Item("square") .Parameter("length", this.SquareLength.ToString()) .Parameter("background", this.SquareBackground) .End(); this._shell.Resolve(uri).Open(); }); this.AddCircleCommand = new DelegateCommand(() => { var uri = ShellUriBuilder.StartUri() .Placement("figures") .Module("main") .Item("circle") .Parameter("diameter", this.CircleDiameter.ToString()) .Parameter("background", this.CircleBackground) .End(); this._shell.Resolve(uri).Open(); }); }
public void ActivatesPreviousWhenActiveIsLastAndHaveDisconnected() { var connected1 = new object(); var connected2 = new object(); var connected3 = new object(); IItemsPlacementConnector connector = this.CreateTestObject(); connector.Connect(connected1); connector.Connect(connected2); connector.Connect(connected3); connector.Active = connected3; ActiveChangedEventArgs args = null; connector.ActiveChanged += (sender, e) => args = e; connector.Disconnect(connected3); Assert.AreEqual(connected2, connector.Active); Assert.AreEqual(connected3, args.OldValue); Assert.AreEqual(connected2, args.NewValue); }