public void IsDraggingReturnsFalseAfterDisconnect() { var connected = new object(); var connector = Substitute.For <IUriPlacementConnector>(); var dragDrop = new ConnectedDragDrop(this._uriDisconnectTable); dragDrop.Drag(connected); IUriPlacementConnector dragDropConnector = dragDrop; dragDropConnector.Disconnect(connected); Assert.IsFalse(dragDrop.IsDragging(connected)); Assert.IsFalse(dragDrop.IsActive); }
public void RaisesDraggedClosedOnDisconnect() { var connected = new object(); var connector = Substitute.For <IUriPlacementConnector>(); var dragDrop = new ConnectedDragDrop(this._uriDisconnectTable); dragDrop.Drag(connected); var wasRaised = false; dragDrop.DraggedClosed += (sender, e) => wasRaised = true; IUriPlacementConnector dragDropConnector = dragDrop; dragDropConnector.Disconnect(connected); Assert.IsTrue(wasRaised); }
public void DisposesDataOnDisconnect() { var connected = new object(); var dragDrop = new ConnectedDragDrop(this._uriDisconnectTable); dragDrop.Drag(connected); var key1 = new ConnectedDragDropKey <IDisposable>(); var key2 = new ConnectedDragDropKey <IContainer>(); var disposable1 = Substitute.For <IDisposable>(); var disposable2 = Substitute.For <IContainer>(); dragDrop.SetData(key1, disposable1); dragDrop.SetData(key2, disposable2); IUriPlacementConnector dragDropConnector = dragDrop; dragDropConnector.Disconnect(connected); disposable1.Received(1).Dispose(); disposable2.Received(1).Dispose(); }
/// <summary> /// Tries to make the object resolved via the URI available in the shell. /// </summary> /// <param name="uri">The URI of the resolved object.</param> /// <param name="resolved">The object resolved via the URI.</param> /// <param name="placementConnector"><see cref="IUriPlacementConnector"/> /// for connecting the object to the user interface.</param> /// <param name="appendToDisposable">When this method returns, contains the action that allows to add a <see cref="IDisposable"/> /// to the group of <see cref="IDisposable"/> in the metadata.</param> /// <returns><see cref="IDisposable"/> registered in the metadata.</returns> private IDisposable Connect(Uri uri, object resolved, IUriPlacementConnector placementConnector, out Action <IDisposable> appendToDisposable) { placementConnector.Connect(resolved); try { var composite = new CompositeDisposable(); appendToDisposable = composite.Add; this._uriResolvedObjectHolder.Add(resolved, new UriResolvedMetadata(uri, composite)); this._uriDisconnectTable[resolved] = placementConnector; return(composite); } catch (Exception ex) { if (!ex.IsCritical()) { // When failed to add the object in the holder - disconnect it from the UI. placementConnector.Disconnect(resolved); } throw; } }