Пример #1
0
        public void NewDisableTestAdapterCommand_should_bind_Text_property_to_CurrentProject_status()
        {
            // Arrange
            var fixture = new Fixture().Customize(new AutoMoqCustomization());
            var projName = fixture.Create<string>();
            {
                var m = fixture.Freeze<Mock<Project>>();
                m.Setup(_ => _.Name).Returns(projName);
            }

            var vm = new PrigPackageViewModel();
            var menuCommand = PrigPackage.NewDisableTestAdapterCommand(vm);
            menuCommand.Text = null;


            // Act
            vm.CurrentProject.Value = null;
            var defaultText = menuCommand.Text;
            vm.CurrentProject.Value = fixture.Freeze<Project>();
            var projectSelectedText = menuCommand.Text;


            // Assert
            Assert.IsNotNull(defaultText);
            Assert.AreNotEqual(defaultText, projectSelectedText);
            Assert.That(projectSelectedText, Is.StringMatching(projName));
        }
Пример #2
0
        public virtual void BeforeQueryStatusTestAdapter(PrigPackageViewModel vm)
        {
            if (vm.IsTestAdapterEnabled.Value)
                return;

            var proj = MonitoringSelectionService.GetCurrentProject();
            vm.SetToCurrentProjectIfSupported(proj);
        }
Пример #3
0
        public Project SetToCurrentProjectIfSupported_(IFixture fixture)
        {
            // Arrange
            var vm = new PrigPackageViewModel();

            // Act
            vm.SetToCurrentProjectIfSupported(fixture.Freeze<Project>());

            // Assert
            fixture.Freeze<Mock<Project>>().VerifyAll();
            return vm.CurrentProject.Value;
        }
Пример #4
0
 public virtual void EditPrigIndirectionSettings(PrigPackageViewModel vm)
 {
     var projItem = MonitoringSelectionService.GetSelectedItem<ProjectItem>();
     var editorialInclude = Regex.Replace(projItem.Name, @"(.*)\.v\d+\.\d+\.\d+\.v\d+\.\d+\.\d+\.\d+\.prig", "$1");
     EditPrigIndirectionSettingsCore(vm, editorialInclude);
 }
Пример #5
0
 public virtual void AddPrigAssembly(PrigPackageViewModel vm)
 {
     AddPrigAssemblyCore(vm, MonitoringSelectionService.GetSelectedItem<Reference5>().Name);
 }
Пример #6
0
        bool DisableTestAdapterCore(PrigPackageViewModel vm)
        {
            vm.BeginProjectWideProcessProgress(ProjectWideProcesses.TestAdapterDisabling);


            var machinePreq = new MachinePrerequisite(Resources.NuGetRootPackageVersion);
            machinePreq.ProfilerStatusChecking += profLoc => vm.ReportProfilerStatusCheckingProgress(25u, profLoc);
            if (!MachineWideInstaller.HasBeenInstalled(machinePreq))
            {
                vm.ShowSkippedProjectWideProcessMessage(SkippedReasons.NotRegisteredYet, null);
                vm.EndSkippedProjectWideProcessProgress(SkippedReasons.NotRegisteredYet, null);
                return false;
            }

            
            var command =
@"
Import-Module ([IO.Path]::Combine($env:URASANDESU_PRIG_PACKAGE_FOLDER, 'tools\Urasandesu.Prig'))
Disable-PrigTestAdapter
";
            var mci = new ManagementCommandInfo(command);
            mci.CommandExecuting += () => vm.ReportProcessingProjectWideProcessProgress(50u, null);
            mci.CommandExecuted += () => vm.EndCompletedProjectWideProcessProgress(null);
            ManagementCommandExecutor.Execute(mci);

            return true;
        }
Пример #7
0
        public virtual void UnregisterPrig(PrigPackageViewModel vm)
        {
            var umwPkg = new MachineWideUninstallation(Resources.NuGetRootPackageVersion);
            umwPkg.Preparing += () => vm.BeginMachineWideProcessProgress(MachineWideProcesses.Uninstalling);
            umwPkg.ProfilerStatusChecking += profLoc => vm.ReportProfilerStatusCheckingProgress(10u, profLoc);
            umwPkg.DefaultSourceUninstalling += pkgName => vm.ReportDefaultSourceProcessingProgress(20u, pkgName, null);
            umwPkg.DefaultSourceUninstalled += stdout => vm.ReportDefaultSourceProcessedProgress(30u, stdout);
            umwPkg.ProfilerUnregistering += profLoc => vm.ReportProfilerProcessingProgress(40u, profLoc);
            umwPkg.ProfilerUnregistered += stdout => vm.ReportProfilerProcessedProgress(50u, stdout);
            umwPkg.EnvironmentVariableUnregistering += name => vm.ReportEnvironmentVariableProcessingProgress(60u, name, null);
            umwPkg.EnvironmentVariableUnregistered += name => vm.ReportEnvironmentVariableProcessedProgress(70u);
            umwPkg.NuGetSourceUnregistering += name => vm.ReportNuGetSourceProcessingProgress(80u, name, null);
            umwPkg.NuGetSourceUnregistered += stdout => vm.ReportNuGetSourceProcessedProgress(90u, stdout);
            umwPkg.Completed +=
                result =>
                {
                    switch (result)
                    {
                        case MachineWideProcessResults.Skipped:
                            vm.ShowSkippedMachineWideProcessMessage(SkippedReasons.AlreadyRegistered);
                            vm.EndSkippedMachineWideProcessProgress(SkippedReasons.AlreadyRegistered);
                            break;
                        case MachineWideProcessResults.Completed:
                            var restarts = vm.ConfirmRestartingVisualStudioToTakeEffect();
                            vm.EndCompletedMachineWideProcessProgress();
                            if (!restarts)
                                return;

                            ProcessMixin.RestartCurrentProcess();
                            break;
                    }
                };

            MachineWideInstaller.Uninstall(umwPkg);
        }
Пример #8
0
        public virtual void PrepareUnregisteringPrig(PrigPackageViewModel vm)
        {
            vm.BeginMachineWideProcessProgress(MachineWideProcesses.Uninstalling);

            var machinePreq = new MachinePrerequisite(Resources.NuGetRootPackageVersion);
            machinePreq.ProfilerStatusChecking += profLoc => vm.ReportProfilerStatusCheckingProgress(50u, profLoc);

            if (!MachineWideInstaller.HasBeenInstalled(machinePreq))
            {
                vm.ShowSkippedMachineWideProcessMessage(SkippedReasons.AlreadyRegistered);
                vm.EndSkippedMachineWideProcessProgress(SkippedReasons.AlreadyRegistered);
                return;
            }


            if (!WindowsIdentity.GetCurrent().IsElevated())
            {
                vm.ShowVisualStudioHasNotBeenElevatedYetMessage();
                if (ProcessMixin.RestartCurrentProcessWith(_ => { _.Verb = "runas"; }))
                    return;

                vm.EndSkippedMachineWideProcessProgress(SkippedReasons.CanceledByUser);
            }
            else
            {
                UnregisterPrig(vm);
            }
        }
Пример #9
0
        public void EndSkippedProjectWideProcessProgress_should_report_the_progress_to_statusbar(
            [Values(
                ProjectWideProcesses.PrigAssemblyAdding,
                ProjectWideProcesses.PrigIndirectionSettingsEditing,
                ProjectWideProcesses.PrigAssemblyRemoving,
                ProjectWideProcesses.TestAdapterEnabling,
                ProjectWideProcesses.TestAdapterDisabling)]
            ProjectWideProcesses pwProc)
        {
            // Arrange
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var include = fixture.Create<string>();

            var vm = new PrigPackageViewModel();
            vm.BeginProjectWideProcessProgress(pwProc);


            // Act
            vm.EndSkippedProjectWideProcessProgress(SkippedReasons.NotRegisteredYet, include);


            // Assert
            var progState = vm.Statusbar.ProgressState.Value;
            Assert.AreEqual(0u, progState.Value);
            Assert.IsNullOrEmpty(progState.Label);
            Assert.IsNotNullOrEmpty(vm.Statusbar.Text.Value);
        }
Пример #10
0
        public void ReportPackageReferenceAddedProgress_should_report_the_progress_to_statusbar()
        {
            // Arrange
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var prog = fixture.Create<uint>();
            var id = fixture.Create<string>();
            {
                var m = new Mock<IVsPackageMetadata>(MockBehavior.Strict);
                m.Setup(_ => _.Id).Returns(id);
                fixture.Inject(m);
            }

            var vm = new PrigPackageViewModel();

            // Act
            vm.ReportPackageReferenceAddedProgress(prog, fixture.Freeze<IVsPackageMetadata>());


            // Assert
            var progState = vm.Statusbar.ProgressState.Value;
            Assert.AreEqual(prog, progState.Value);
            Assert.That(progState.Label, Is.StringMatching(id));
        }
Пример #11
0
        public void ReportPackagePreparingProgress_should_report_the_progress_to_statusbar()
        {
            // Arrange
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var prog = fixture.Create<uint>();

            var vm = new PrigPackageViewModel();

            // Act
            vm.ReportPackagePreparingProgress(prog);


            // Assert
            var progState = vm.Statusbar.ProgressState.Value;
            Assert.AreEqual(prog, progState.Value);
            Assert.IsNotNullOrEmpty(progState.Label);
        }
Пример #12
0
        public void ShowVisualStudioHasNotBeenElevatedYetMessage_should_show_the_message_to_message_box()
        {
            // Arrange
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var vm = new PrigPackageViewModel();

            // Act
            vm.ShowVisualStudioHasNotBeenElevatedYetMessage();


            // Assert
            var msgBox = vm.MessageBoxParameter.Value;
            Assert.AreEqual(OLEMSGBUTTON.OLEMSGBUTTON_OK, msgBox.Button);
            Assert.AreEqual(OLEMSGICON.OLEMSGICON_INFO, msgBox.Icon);
            Assert.IsNotNullOrEmpty(msgBox.Text);
        }
Пример #13
0
        public void EndCompletedMachineWideProcessProgress_should_report_the_progress_to_statusbar(
            [Values(MachineWideProcesses.Installing, MachineWideProcesses.Uninstalling)]
            MachineWideProcesses mwProc)
        {
            // Arrange
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var vm = new PrigPackageViewModel();
            vm.BeginMachineWideProcessProgress(mwProc);

            // Act
            vm.EndCompletedMachineWideProcessProgress();


            // Assert
            var progState = vm.Statusbar.ProgressState.Value;
            Assert.AreEqual(0u, progState.Value);
            Assert.IsNullOrEmpty(progState.Label);
            Assert.IsNotNullOrEmpty(vm.Statusbar.Text.Value);
        }
Пример #14
0
        public void ConfirmRestartingVisualStudioToTakeEffect_should_show_the_message_to_message_box(
            [Values(MachineWideProcesses.Installing, MachineWideProcesses.Uninstalling)]
            MachineWideProcesses mwProc,
            [Values(VSConstants.MessageBoxResult.IDYES, VSConstants.MessageBoxResult.IDNO)]
            VSConstants.MessageBoxResult response)
        {
            // Arrange
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var vm = new PrigPackageViewModel();
            vm.BeginMachineWideProcessProgress(mwProc);
            vm.MessageBoxParameter.Subscribe(_ => _.Result = response);

            // Act
            var result = vm.ConfirmRestartingVisualStudioToTakeEffect();

            // Assert
            Assert.AreEqual(response == VSConstants.MessageBoxResult.IDYES, result);
            var msgBox = vm.MessageBoxParameter.Value;
            Assert.AreEqual(OLEMSGBUTTON.OLEMSGBUTTON_YESNO, msgBox.Button);
            Assert.AreEqual(OLEMSGICON.OLEMSGICON_WARNING, msgBox.Icon);
            Assert.IsNotNullOrEmpty(msgBox.Text);
        }
Пример #15
0
        public void ShowSkippedMachineWideProcessMessage_should_show_the_message_to_message_box(
            [Values(MachineWideProcesses.Installing, MachineWideProcesses.Uninstalling)]
            MachineWideProcesses mwProc,
            [Values(SkippedReasons.AlreadyRegistered, SkippedReasons.CanceledByUser)]
            SkippedReasons reason)
        {
            // Arrange
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var vm = new PrigPackageViewModel();
            vm.BeginMachineWideProcessProgress(mwProc);

            // Act
            vm.ShowSkippedMachineWideProcessMessage(reason);


            // Assert
            var msgBox = vm.MessageBoxParameter.Value;
            Assert.AreEqual(OLEMSGBUTTON.OLEMSGBUTTON_OK, msgBox.Button);
            Assert.AreEqual(OLEMSGICON.OLEMSGICON_INFO, msgBox.Icon);
            Assert.IsNotNullOrEmpty(msgBox.Text);
        }
Пример #16
0
 public virtual void OnBuildDone(PrigPackageViewModel vm)
 {
     if (!vm.HasEnabledTestAdapter())
         DisableTestAdapter(vm);
     else
         EnableTestAdapterCore(vm);
 }
Пример #17
0
        public virtual void OnProjectRemoved(PrigPackageViewModel vm, Project proj)
        {
            if (!vm.HasEnabledTestAdapter(proj))
                return;

            DisableTestAdapter(vm);
        }
Пример #18
0
        public void ShowSkippedProjectWideProcessMessage_should_report_the_progress_to_statusbar(
            [Values(
                ProjectWideProcesses.PrigAssemblyAdding,
                ProjectWideProcesses.PrigIndirectionSettingsEditing,
                ProjectWideProcesses.PrigAssemblyRemoving,
                ProjectWideProcesses.TestAdapterEnabling,
                ProjectWideProcesses.TestAdapterDisabling)]
            ProjectWideProcesses pwProc)
        {
            // Arrange
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var include = fixture.Create<string>();

            var vm = new PrigPackageViewModel();
            vm.BeginProjectWideProcessProgress(pwProc);


            // Act
            vm.ShowSkippedProjectWideProcessMessage(SkippedReasons.NotRegisteredYet, include);


            // Assert
            var msgBox = vm.MessageBoxParameter.Value;
            Assert.AreEqual(OLEMSGBUTTON.OLEMSGBUTTON_OK, msgBox.Button);
            Assert.AreEqual(OLEMSGICON.OLEMSGICON_WARNING, msgBox.Icon);
            Assert.IsNotNullOrEmpty(msgBox.Text);
        }
Пример #19
0
        void RegisterPrig(PrigPackageViewModel vm)
        {
            var mwInstl = new MachineWideInstallation(Resources.NuGetRootPackageVersion);
            mwInstl.Preparing += () => vm.BeginMachineWideProcessProgress(MachineWideProcesses.Installing);
            mwInstl.ProfilerStatusChecking += profLoc => vm.ReportProfilerStatusCheckingProgress(8u, profLoc);
            mwInstl.NuGetPackageCreating += pkgName => vm.ReportNuGetPackageCreatingProgress(17u, pkgName);
            mwInstl.NuGetPackageCreated += stdout => vm.ReportNuGetPackageCreatedProgress(25u, stdout);
            mwInstl.NuGetSourceRegistering += (path, name) => vm.ReportNuGetSourceProcessingProgress(33u, path, name);
            mwInstl.NuGetSourceRegistered += stdout => vm.ReportNuGetSourceProcessedProgress(42u, stdout);
            mwInstl.EnvironmentVariableRegistering += (name, value) => vm.ReportEnvironmentVariableProcessingProgress(50u, name, value);
            mwInstl.EnvironmentVariableRegistered += (name, value) => vm.ReportEnvironmentVariableProcessedProgress(58u);
            mwInstl.ProfilerRegistering += profLoc => vm.ReportProfilerProcessingProgress(67u, profLoc);
            mwInstl.ProfilerRegistered += stdout => vm.ReportProfilerProcessedProgress(75u, stdout);
            mwInstl.DefaultSourceInstalling += (pkgName, src) => vm.ReportDefaultSourceProcessingProgress(83u, pkgName, src);
            mwInstl.DefaultSourceInstalled += stdout => vm.ReportDefaultSourceProcessedProgress(92u, stdout);
            mwInstl.Completed += 
                result =>
                {
                    switch (result)
                    {
                        case MachineWideProcessResults.Skipped:
                            vm.ShowSkippedMachineWideProcessMessage(SkippedReasons.AlreadyRegistered);
                            vm.EndSkippedMachineWideProcessProgress(SkippedReasons.AlreadyRegistered);
                            break;
                        case MachineWideProcessResults.Completed:
                            var restarts = vm.ConfirmRestartingVisualStudioToTakeEffect();
                            vm.EndCompletedMachineWideProcessProgress();
                            if (!restarts)
                                return;

                            ProcessMixin.RestartCurrentProcess();
                            break;
                    }
                };

            MachineWideInstaller.Install(mwInstl);
        }
Пример #20
0
        public void ConfirmRemovingPrigAssembly_should_show_the_message_to_message_box(
            [Values(VSConstants.MessageBoxResult.IDYES, VSConstants.MessageBoxResult.IDNO)]
            VSConstants.MessageBoxResult response)
        {
            // Arrange
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            var deletionalInclude = fixture.Create<string>();

            var vm = new PrigPackageViewModel();
            vm.MessageBoxParameter.Subscribe(_ => _.Result = response);

            // Act
            var result = vm.ConfirmRemovingPrigAssembly(deletionalInclude);

            // Assert
            Assert.AreEqual(response == VSConstants.MessageBoxResult.IDYES, result);
            var msgBox = vm.MessageBoxParameter.Value;
            Assert.AreEqual(OLEMSGBUTTON.OLEMSGBUTTON_YESNO, msgBox.Button);
            Assert.AreEqual(OLEMSGICON.OLEMSGICON_QUERY, msgBox.Icon);
            Assert.IsNotNullOrEmpty(msgBox.Text);
        }
Пример #21
0
        void RemovePrigAssemblyCore(PrigPackageViewModel vm, string deletionalInclude)
        {
            vm.BeginProjectWideProcessProgress(ProjectWideProcesses.PrigAssemblyRemoving);


            var machinePreq = new MachinePrerequisite(Resources.NuGetRootPackageVersion);
            machinePreq.ProfilerStatusChecking += profLoc => vm.ReportProfilerStatusCheckingProgress(13u, profLoc);
            if (!MachineWideInstaller.HasBeenInstalled(machinePreq))
            {
                vm.ShowSkippedProjectWideProcessMessage(SkippedReasons.NotRegisteredYet, deletionalInclude);
                vm.EndSkippedProjectWideProcessProgress(SkippedReasons.NotRegisteredYet, deletionalInclude);
                return;
            }

            
            if (!vm.ConfirmRemovingPrigAssembly(deletionalInclude))
                return;


            var proj = MonitoringSelectionService.GetCurrentProject();


            var pwPkg = new ProjectWidePackage(Resources.NuGetRootPackageId, Resources.NuGetRootPackageVersion, proj);
            pwPkg.PackagePreparing += () => vm.ReportPackagePreparingProgress(25u);
            pwPkg.PackageInstalling += metadata => vm.ReportPackageInstallingProgress(50u, metadata);
            pwPkg.PackageInstalled += metadata => vm.ReportPackageInstalledProgress(50u, metadata);
            pwPkg.PackageReferenceAdded += metadata => vm.ReportPackageReferenceAddedProgress(50u, metadata);
            ProjectWideInstaller.Install(pwPkg);


            var command = string.Format(
@"
Import-Module ([IO.Path]::Combine($env:URASANDESU_PRIG_PACKAGE_FOLDER, 'tools\Urasandesu.Prig'))
Start-PrigSetup -DeletionalInclude {0} -Project $Project
", deletionalInclude);
            var mci = new ManagementCommandInfo(command, proj);
            mci.CommandExecuting += () => vm.ReportProcessingProjectWideProcessProgress(75u, deletionalInclude);
            mci.CommandExecuted +=
                () =>
                {
                    vm.ShowCompletedProjectWideProcessMessage(deletionalInclude);
                    vm.EndCompletedProjectWideProcessProgress(deletionalInclude);
                };
            ManagementCommandExecutor.Execute(mci);
        }
Пример #22
0
 static MenuCommand NewAddPrigAssemblyCommand(PrigPackageViewModel vm)
 {
     var commandId = new CommandID(GuidList.AddPrigAssemblyGroup, (int)PkgCmdIDList.AddPrigAssemblyCommand);
     var handler = new EventHandler((sender, e) => vm.AddPrigAssemblyCommand.Execute(sender));
     var menuCommand = new MenuCommand(handler, commandId);
     return menuCommand;
 }
Пример #23
0
 public virtual void AddPrigAssemblyForMSCorLib(PrigPackageViewModel vm)
 {
     AddPrigAssemblyCore(vm, "mscorlib");
 }
Пример #24
0
 internal static OleMenuCommand NewDisableTestAdapterCommand(PrigPackageViewModel vm)
 {
     var commandId = new CommandID(GuidList.MainMenuGroup, (int)PkgCmdIDList.DisableTestAdapterCommand);
     var handler = new EventHandler((sender, e) => vm.DisableTestAdapterCommand.Execute(sender));
     var menuCommand = new OleMenuCommand(handler, commandId);
     vm.DisableTestAdapterCommand.CanExecuteChanged += (sender, e) => menuCommand.Enabled = ((ICommand)sender).CanExecute(menuCommand);
     menuCommand.Enabled = false;
     var text = PrigPackageResources.GetString("DisableTestAdapterMenu");
     vm.CurrentProject.Subscribe(
         proj => menuCommand.Text = proj == null ? text : string.Format(PrigPackageResources.GetString("_0_For_1_MenuFormat"), text, proj.Name));
     return menuCommand;
 }
Пример #25
0
 public virtual void EnableTestAdapter(PrigPackageViewModel vm)
 {
     if (EnableTestAdapterCore(vm))
         vm.IsTestAdapterEnabled.Value = true;
 }
Пример #26
0
 static MenuCommand NewUnregisterPrigCommand(PrigPackageViewModel vm)
 {
     var commandId = new CommandID(GuidList.RegistrationMenuGroup, (int)PkgCmdIDList.UnregisterPrigCommand);
     var handler = new EventHandler((sender, e) => vm.UnregisterPrigCommand.Execute(sender));
     var menuCommand = new MenuCommand(handler, commandId);
     return menuCommand;
 }
Пример #27
0
 public virtual void DisableTestAdapter(PrigPackageViewModel vm)
 {
     if (DisableTestAdapterCore(vm))
         vm.IsTestAdapterEnabled.Value = false;
 }
Пример #28
0
 static OleMenuCommand NewRemovePrigAssemblyCommand(PrigPackageViewModel vm)
 {
     var commandId = new CommandID(GuidList.EditPrigIndirectionSettingsGroup, (int)PkgCmdIDList.RemovePrigAssemblyCommand);
     var handler = new EventHandler((sender, e) => vm.RemovePrigAssemblyCommand.Execute(sender));
     var menuCommand = new OleMenuCommand(handler, commandId);
     vm.RemovePrigAssemblyCommand.CanExecuteChanged += (sender, e) => menuCommand.Enabled = ((ICommand)sender).CanExecute(menuCommand);
     menuCommand.BeforeQueryStatus += (sender, e) => vm.EditPrigIndirectionSettingsBeforeQueryStatusCommand.Execute(sender);
     vm.IsEditPrigIndirectionSettingsCommandVisible.Subscribe(_ => menuCommand.Visible = _);
     return menuCommand;
 }
Пример #29
0
 public virtual void RemovePrigAssembly(PrigPackageViewModel vm)
 {
     var projItem = MonitoringSelectionService.GetSelectedItem<ProjectItem>();
     var deletionalInclude = Regex.Replace(projItem.Name, @"(.*)\.prig$", "$1");
     RemovePrigAssemblyCore(vm, deletionalInclude);
 }
Пример #30
0
 public virtual void BeforeQueryStatusEditPrigIndirectionSettings(PrigPackageViewModel vm)
 {
     var projItem = MonitoringSelectionService.GetSelectedItem<ProjectItem>();
     vm.SetEditPrigIndirectionSettingsCommandVisibility(projItem);
 }