コード例 #1
0
 /// <summary>
 /// Initializes a new instance of <seealso cref="ErrorFrameTooltipViewModel"/> class.
 /// </summary>
 /// <param name="errorItem">The error item the tooltip shows.</param>
 public ErrorFrameTooltipViewModel(ErrorGroupItem errorItem)
 {
     OnCloseButtonCommand          = new ProtectedCommand(ShowTooltipUtils.HideTooltip);
     OnBackToErrorReportingCommand = new ProtectedCommand(
         () => ToolWindowCommandUtils.ShowToolWindow <ErrorReportingDetailToolWindow>());
     Error = errorItem;
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="ErrorReportingToolWindowCommand"/> class.
        /// Adds our command handlers for menu (commands must exist in the command table file)
        /// </summary>
        /// <param name="package">Owner package, not null.</param>
        private ErrorReportingToolWindowCommand(Package package)
        {
            if (package == null)
            {
                throw new ArgumentNullException("package");
            }

            _package = package;

            IMenuCommandService commandService = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as IMenuCommandService;

            if (commandService != null)
            {
                var menuCommandID = new CommandID(CommandSet, CommandId);
                var menuItem      = new OleMenuCommand(
                    (sender, e) =>
                {
                    ToolWindowCommandUtils.ShowToolWindow <ErrorReportingToolWindow>();
                    EventsReporterWrapper.ReportEvent(ErrorsViewerOpenEvent.Create());
                },
                    menuCommandID);
                menuItem.BeforeQueryStatus += ToolWindowCommandUtils.EnableMenuItemOnValidProjectId;
                commandService.AddCommand(menuItem);
            }
        }
コード例 #3
0
        /// <summary>
        /// Detail view is a tree view.
        /// Each item at tree path is an <seealso cref="ObjectNodeTree"/> object.
        /// The tree view displays the <paramref name="node"/> as name : value pair.
        /// User can click at the "value" to show matching log entries.
        ///
        /// This method composes a filter on node value, adds it to existing AdvancedFilterText.
        /// The filter has format of root_node_name.node_name...node_name = "node.value".
        /// Example: jsonPayload.serviceContext.service="frontend"
        /// </summary>
        private async Task FilterOnTreeNodeValueAsync(ObjectNodeTree node)
        {
            IsAutoReloadChecked = false;

            // Firstly compose a new filter line.
            var newFilter = new StringBuilder();

            newFilter.Append($"{node.FilterLabel}=\"{node.FilterValue}\"");
            while ((node = node.Parent)?.Parent != null)
            {
                if (!string.IsNullOrWhiteSpace(node.FilterLabel))
                {
                    newFilter.Insert(0, $"{node.FilterLabel}.");
                }
            }

            // Append the new filter line to existing filter text.
            // Or to the composed filter if it is currently showing simple filters.
            if (ShowAdvancedFilter)
            {
                newFilter.Insert(0, Environment.NewLine);
                newFilter.Insert(0, AdvancedFilterText);
            }
            else
            {
                newFilter.Insert(0, ComposeSimpleFilters());
            }

            var newWindow = await ToolWindowCommandUtils.AddToolWindowAsync <LogsViewerToolWindow>();

            newWindow.ViewModel.FilterLog(newFilter.ToString());
        }
コード例 #4
0
        public void TestShowToolWindowNoPackage()
        {
            GoogleCloudExtensionPackage.Instance = null;

            var result = ToolWindowCommandUtils.ShowToolWindow <ToolWindowPane>();

            Assert.IsNull(result);
        }
コード例 #5
0
        private void NavigateToDetailWindow(ErrorGroupItem groupItem)
        {
            var window = ToolWindowCommandUtils.ShowToolWindow <ErrorReportingDetailToolWindow>();

            window.ViewModel.UpdateView(groupItem, _selectedTimeRange);

            EventsReporterWrapper.ReportEvent(ErrorsViewerNavigateToDetailWindowEvent.Create());
        }
コード例 #6
0
        public async Task TestShowToolWindowNoWindowFrame()
        {
            PackageMock.Setup(p => p.FindToolWindow <ToolWindowPane>(true, 0))
            .Returns(new ToolWindowPane {
                Frame = null
            });

            await ToolWindowCommandUtils.ShowToolWindowAsync <ToolWindowPane>();
        }
コード例 #7
0
        public void TestShowToolWindowNoWindowFrame()
        {
            PackageMock.Setup(p => p.FindToolWindow <ToolWindowPane>(true, 0))
            .Returns(() => new ToolWindowPane {
                Frame = null
            });

            ToolWindowCommandUtils.ShowToolWindow <ToolWindowPane>();
        }
コード例 #8
0
        private async Task NavigateToDetailWindowAsync(ErrorGroupItem groupItem)
        {
            ErrorReportingDetailToolWindow window =
                await ToolWindowCommandUtils.ShowToolWindowAsync <ErrorReportingDetailToolWindow>();

            window.ViewModel.UpdateView(groupItem, _selectedTimeRange);

            EventsReporterWrapper.ReportEvent(ErrorsViewerNavigateToDetailWindowEvent.Create());
        }
コード例 #9
0
 /// <summary>
 /// Initializes a new instance of <seealso cref="ErrorReportingDetailViewModel"/> class.
 /// </summary>
 public ErrorReportingDetailViewModel()
 {
     OnGotoSourceCommand = new ProtectedCommand <StackFrame>(
         (frame) => ShowTooltipUtils.ErrorFrameToSourceLine(GroupItem, frame));
     OnBackToOverViewCommand         = new ProtectedCommand(() => ToolWindowCommandUtils.ShowToolWindow <ErrorReportingToolWindow>());
     OnAutoReloadCommand             = new ProtectedCommand(() => ErrorHandlerUtils.HandleAsyncExceptions(UpdateGroupAndEventAsync));
     _datasource                     = new Lazy <StackdriverErrorReportingDataSource>(CreateDataSource);
     CredentialsStore.Default.Reset += (sender, e) => OnCurrentProjectChanged();
     CredentialsStore.Default.CurrentProjectIdChanged += (sender, e) => OnCurrentProjectChanged();
 }
コード例 #10
0
        public void TestEnableMenuItemOnValidProjectIdInvalidProjectId()
        {
            CredentialStoreMock.SetupGet(cs => cs.CurrentProjectId).Returns(() => null);
            var menuCommand = new OleMenuCommand((sender, args) => { }, (sender, args) => { },
                                                 (sender, args) => { }, new CommandID(Guid.Empty, 0));

            ToolWindowCommandUtils.EnableMenuItemOnValidProjectId(menuCommand, null);

            Assert.IsFalse(menuCommand.Enabled);
        }
コード例 #11
0
        public void TestShowToolWindowShowError()
        {
            var mockedFrame = Mock.Of <IVsWindowFrame>(f => f.Show() == VSConstants.E_UNEXPECTED);

            PackageMock.Setup(p => p.FindToolWindow <ToolWindowPane>(true, 0))
            .Returns(() => new ToolWindowPane {
                Frame = mockedFrame
            });

            ToolWindowCommandUtils.ShowToolWindow <ToolWindowPane>();
        }
コード例 #12
0
        public async Task TestAddToolWindow()
        {
            var expectedResult = new ToolWindowPane {
                Frame = _defaultFrame
            };

            PackageMock.Setup(p => p.FindToolWindow <ToolWindowPane>(false, 0)).Returns(() => null);
            PackageMock.Setup(p => p.FindToolWindow <ToolWindowPane>(true, 0)).Returns(expectedResult);

            ToolWindowPane actualResult = await ToolWindowCommandUtils.AddToolWindowAsync <ToolWindowPane>();

            Assert.AreEqual(expectedResult, actualResult);
        }
コード例 #13
0
        public void TestShowToolWindowSuccess()
        {
            var mockedFrame    = Mock.Of <IVsWindowFrame>(f => f.Show() == VSConstants.S_OK);
            var expectedResult = new ToolWindowPane {
                Frame = mockedFrame
            };

            PackageMock.Setup(p => p.FindToolWindow <ToolWindowPane>(true, 0)).Returns(() => expectedResult);

            var actualResult = ToolWindowCommandUtils.ShowToolWindow <ToolWindowPane>();

            Assert.AreEqual(expectedResult, actualResult);
        }
コード例 #14
0
        private void BackToLogsViewer()
        {
            var window = ToolWindowCommandUtils.ShowToolWindow <LogsViewerToolWindow>(Log.ParentToolWindowId);

            if (Log.Entry == null || window == null)
            {
                Debug.WriteLine("Entry or window is null, this is likely a code bug");
                return;
            }
            if (FilterLogsOfSourceLine)
            {
                window.FilterOnSourceLocation(Log);
            }
        }
コード例 #15
0
        public void TestShowToolWindowSpecificSuccess()
        {
            var expectedResult = new ToolWindowPane {
                Frame = _defaultFrame
            };
            const int toolWindowId = 2;

            PackageMock.Setup(p => p.FindToolWindow <ToolWindowPane>(true, toolWindowId))
            .Returns(() => expectedResult);

            var actualResult = ToolWindowCommandUtils.ShowToolWindow <ToolWindowPane>(toolWindowId);

            Assert.AreEqual(expectedResult, actualResult);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="LogsViewerToolWindowCommand"/> class.
        /// Adds our command handlers for menu (commands must exist in the command table file)
        /// </summary>
        /// <param name="package">Owner package, not null.</param>
        private LogsViewerToolWindowCommand(IGoogleCloudExtensionPackage package)
        {
            if (package == null)
            {
                throw new ArgumentNullException(nameof(package));
            }

            _package = package;

            var commandService = ServiceProvider.GetService(typeof(IMenuCommandService)) as IMenuCommandService;

            if (commandService != null)
            {
                var menuItem = new OleMenuCommand(
                    (sender, e) => ToolWindowCommandUtils.AddToolWindow <LogsViewerToolWindow>(), MenuCommandID);
                menuItem.BeforeQueryStatus += ToolWindowCommandUtils.EnableMenuItemOnValidProjectId;
                commandService.AddCommand(menuItem);
            }
        }
コード例 #17
0
        /// <summary>
        /// Initializes a new instance of the <see cref="LogsViewerToolWindowCommand"/> class.
        /// Adds our command handlers for menu (commands must exist in the command table file)
        /// </summary>
        /// <param name="package">Owner package, not null.</param>
        private LogsViewerToolWindowCommand(Package package)
        {
            if (package == null)
            {
                throw new ArgumentNullException("package");
            }

            _package = package;

            OleMenuCommandService commandService = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService;

            if (commandService != null)
            {
                var menuCommandID = new CommandID(CommandSet, CommandId);
                var menuItem      = new OleMenuCommand(
                    (sender, e) => ToolWindowCommandUtils.ShowToolWindow <LogsViewerToolWindow>(), menuCommandID);
                menuItem.BeforeQueryStatus += ToolWindowCommandUtils.EnableMenuItemOnValidProjectId;
                commandService.AddCommand(menuItem);
            }
        }
コード例 #18
0
        public void TestAddToolWindowAdditional()
        {
            var existingWindow = new ToolWindowPane {
                Frame = _defaultFrame
            };
            var expectedResult = new ToolWindowPane {
                Frame = _defaultFrame
            };

            PackageMock.Setup(p => p.FindToolWindow <ToolWindowPane>(false, 0))
            .Returns(() => existingWindow);
            PackageMock.Setup(p => p.FindToolWindow <ToolWindowPane>(false, 1))
            .Returns(() => null);
            PackageMock.Setup(p => p.FindToolWindow <ToolWindowPane>(true, 1))
            .Returns(() => expectedResult);

            var actualResult = ToolWindowCommandUtils.AddToolWindow <ToolWindowPane>();

            Assert.AreEqual(expectedResult, actualResult);
        }
コード例 #19
0
        /// <summary>
        /// Initializes the singleton instance of the command.
        /// </summary>
        /// <param name="package">Owner package, not null.</param>
        /// <param name="token">The token to cancel adding the command.</param>
        public static async Task InitializeAsync(IGoogleCloudExtensionPackage package, CancellationToken token)
        {
            package.ThrowIfNull(nameof(package));

            IMenuCommandService commandService =
                await package.GetServiceAsync <IMenuCommandService, IMenuCommandService>();

            await package.JoinableTaskFactory.SwitchToMainThreadAsync(token);

            var menuCommandID = new CommandID(CommandSet, CommandId);
            var menuItem      = new OleMenuCommand(
                async(sender, e) =>
            {
                await ToolWindowCommandUtils.ShowToolWindowAsync <ErrorReportingToolWindow>();
                EventsReporterWrapper.ReportEvent(ErrorsViewerOpenEvent.Create());
            },
                menuCommandID);

            menuItem.BeforeQueryStatus += ToolWindowCommandUtils.EnableMenuItemOnValidProjectId;
            commandService.AddCommand(menuItem);
        }
コード例 #20
0
        private void OnBrowseStackdriverLogCommand()
        {
            var window = ToolWindowCommandUtils.ShowToolWindow <LogsViewerToolWindow>();

            window?.FilterGAEServiceLog(_service.Id, _version.Id);
        }
コード例 #21
0
        private async Task OnBrowseStackdriverLogCommandAsync()
        {
            LogsViewerToolWindow window = await ToolWindowCommandUtils.AddToolWindowAsync <LogsViewerToolWindow>();

            window?.FilterVMInstanceLog(Instance.Id.ToString());
        }
コード例 #22
0
        private void NavigateToDetailWindow(ErrorGroupItem groupItem)
        {
            var window = ToolWindowCommandUtils.ShowToolWindow <ErrorReportingDetailToolWindow>();

            window.ViewModel.UpdateView(groupItem, _selectedTimeRange);
        }
コード例 #23
0
        private async Task OnBrowseStackdriverLogCommandAsync()
        {
            LogsViewerToolWindow window = await ToolWindowCommandUtils.AddToolWindowAsync <LogsViewerToolWindow>();

            window?.FilterGAEServiceLog(Service.Id);
        }
コード例 #24
0
        private void OnBrowseStackdriverLogCommand()
        {
            var window = ToolWindowCommandUtils.AddToolWindow <LogsViewerToolWindow>();

            window?.FilterVMInstanceLog(Instance.Id.ToString());
        }
コード例 #25
0
 public void TestEnableMenuItemOnValidProjectIdInvalidSender()
 {
     ToolWindowCommandUtils.EnableMenuItemOnValidProjectId(Mock.Of <object>(), null);
 }
コード例 #26
0
 public void TestEnableMenuItemOnValidProjectIdNullSender()
 {
     ToolWindowCommandUtils.EnableMenuItemOnValidProjectId(null, null);
 }