public void Displays404PageOnMissingDocFile()
        {
            // Arrange
            var docsEvent     = new OpenDocumentationLinkEventArgs(new Uri("missingFile.html", UriKind.Relative));
            var viewExtension = SetupNewViewExtension(true);

            // Act
            var tabsBeforeExternalEventTrigger = this.View.ExtensionTabItems.Count;

            viewExtension.HandleRequestOpenDocumentationLink(docsEvent);
            var tabsAfterExternalEventTrigger = this.View.ExtensionTabItems.Count;
            var htmlContent = GetSidebarDocsBrowserContents();

            // Assert
            Assert.IsFalse(docsEvent.IsRemoteResource);
            Assert.AreEqual(0, tabsBeforeExternalEventTrigger);
            Assert.AreEqual(1, tabsAfterExternalEventTrigger);
            Assert.IsTrue(htmlContent.Contains(fileMissingHtmlHeader));
        }
        public void CanHandleDocsEventWithValidLink()
        {
            // Arrange
            var docsEvent     = new OpenDocumentationLinkEventArgs(new Uri(localDocsFileLink, UriKind.Relative));
            var viewExtension = SetupNewViewExtension(true);

            // Act
            var tabsBeforeExternalEventTrigger = this.View.ExtensionTabItems.Count;

            viewExtension.HandleRequestOpenDocumentationLink(docsEvent);
            var tabsAfterExternalEventTrigger = this.View.ExtensionTabItems.Count;
            var htmlContent = GetSidebarDocsBrowserContents();

            // Assert
            Assert.IsFalse(docsEvent.IsRemoteResource);
            Assert.AreEqual(0, tabsBeforeExternalEventTrigger);
            Assert.AreEqual(1, tabsAfterExternalEventTrigger);
            Assert.IsTrue(htmlContent.Contains(excelDocsFileHtmlHeader));
        }
Пример #3
0
        /// <summary>
        /// This method handles the documentation open requests coming from Dynamo.
        /// The incoming request is routed to the ViewModel for processing.
        /// </summary>
        /// <param name="args">The incoming event data.</param>
        public void HandleRequestOpenDocumentationLink(OpenDocumentationLinkEventArgs args)
        {
            if (args == null)
            {
                return;
            }

            // ignore events targeting remote resources so the sidebar is not displayed
            if (args.IsRemoteResource)
            {
                return;
            }

            // make sure the view is added to the Sidebar
            // this also forces the Sidebar to open
            AddToSidebar(false);

            // forward the event to the ViewModel to handle
            this.ViewModel?.HandleOpenDocumentationLinkEvent(args);
        }
Пример #4
0
        public void CanTriggerDocumentationLinkEvent()
        {
            // Arrange
            InfoBubbleViewModel infoBubble        = new InfoBubbleViewModel(this.ViewModel);
            const string        documentationFile = "dynamo.html";
            string content = $"This is the test infoBubble href={documentationFile}";
            InfoBubbleDataPacket infoBubbleDataPacket = new InfoBubbleDataPacket(InfoBubbleViewModel.Style.Error,
                                                                                 new Point(0, 0), new Point(0, 0), content, InfoBubbleViewModel.Direction.Bottom);
            var docEventArgs = new OpenDocumentationLinkEventArgs(infoBubbleDataPacket.Link);

            // register an extra handler for documentation events so we can confirm
            // the Dynamo ViewModel event gets triggered from the InfoBubble viewmodel
            RequestOpenDocumentationLinkHandler handler = (OpenDocumentationLinkEventArgs e) =>
            {
                Assert.IsNotNull(e);
                Assert.AreEqual(documentationFile, e.Link.ToString());
            };

            this.ViewModel.RequestOpenDocumentationLink += handler;

            // Act
            // test we can pass in content with a link and it gets set
            if (infoBubble.UpdateContentCommand.CanExecute(null))
            {
                infoBubble.UpdateContentCommand.Execute(infoBubbleDataPacket);
            }
            // test the InfoBubbleViewModel raises the right DynamoViewModel event
            if (infoBubble.OpenDocumentationLinkCommand.CanExecute(null))
            {
                infoBubble.OpenDocumentationLinkCommand.Execute(docEventArgs.Link);
            }

            // Assert
            Assert.IsNotNull(infoBubble.DocumentationLink);
            Assert.AreEqual(documentationFile, infoBubble.DocumentationLink.ToString());
            this.ViewModel.RequestOpenDocumentationLink -= handler;
        }
        public void Displays404PageWhenLinkPointsToAssemblyThatCannotBeFound()
        {
            // Arrange
            var viewExtension = SetupNewViewExtension(true);

            // Reference an embedded HTML file in a loaded assembly
            var assemblyName = "NonExisting";
            var fileName     = "Whatever.html";
            var uri          = $"{assemblyName};{fileName}";
            var docsEvent    = new OpenDocumentationLinkEventArgs(new Uri(uri, UriKind.Relative));

            // Act
            var tabsBeforeExternalEventTrigger = this.View.ExtensionTabItems.Count;

            viewExtension.HandleRequestOpenDocumentationLink(docsEvent);
            var tabsAfterExternalEventTrigger = this.View.ExtensionTabItems.Count;
            var htmlContent = GetSidebarDocsBrowserContents();

            // Assert
            Assert.IsFalse(docsEvent.IsRemoteResource);
            Assert.AreEqual(0, tabsBeforeExternalEventTrigger);
            Assert.AreEqual(1, tabsAfterExternalEventTrigger);
            Assert.IsTrue(htmlContent.Contains(fileMissingHtmlHeader));
        }
        public void DisplaysHtmlEmbeddedInLoadedAssemblies()
        {
            // Arrange
            var viewExtension = SetupNewViewExtension(true);

            // Reference an embedded HTML file in a loaded assembly
            var assemblyName = "DocumentationBrowserViewExtension";
            var fileName     = "ArgumentNullException.html";
            var uri          = $"{assemblyName};{fileName}";
            var docsEvent    = new OpenDocumentationLinkEventArgs(new Uri(uri, UriKind.Relative));

            // Act
            var tabsBeforeExternalEventTrigger = this.View.ExtensionTabItems.Count;

            viewExtension.HandleRequestOpenDocumentationLink(docsEvent);
            var tabsAfterExternalEventTrigger = this.View.ExtensionTabItems.Count;
            var htmlContent = GetSidebarDocsBrowserContents();

            // Assert
            Assert.IsFalse(docsEvent.IsRemoteResource);
            Assert.AreEqual(0, tabsBeforeExternalEventTrigger);
            Assert.AreEqual(1, tabsAfterExternalEventTrigger);
            Assert.IsTrue(htmlContent.Contains("<h2>Value cannot be null</h2>"));
        }
Пример #7
0
        /// <summary>
        /// Open a documentation link in the sidebar DocumentationBrowser embedded browser.
        /// Link should ideally point to a local HTML file, but can also point to a web address.
        /// </summary>
        /// <param name="link">The Uri to the resource do display in the DocumentationBrowser.</param>
        public void OpenDocumentationLinkCommand(Uri link)
        {
            var eventArgs = new OpenDocumentationLinkEventArgs(link);

            dynamoViewModel.OpenDocumentationLink(eventArgs);
        }