Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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();
        }
Пример #4
0
        /// <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;
            }
        }