public void QueryStatus_CriticalErrorNotSuppressed()
        {
            // Arrange
            docLocatorMock.Setup(x => x.FindActiveDocument()).Throws(new StackOverflowException("exception xxx"));
            Action act = () => _ = testSubject.OleStatus;

            // Act
            act.Should().ThrowExactly <StackOverflowException>().And.Message.Should().Be("exception xxx");
            logger.AssertPartialOutputStringDoesNotExist("exception xxx");
        }
示例#2
0
        public void LifeCycle_ProgressChanged_CriticalException_NotSuppressed()
        {
            // Arrange
            dummyStatusBar.ProgressOperation = () => throw new StackOverflowException("xxx");

            var progressHandler = new StatusBarDownloadProgressHandler(dummyStatusBar, dummyInstaller, logger);

            // Act and Assert: exception should be suppressed
            Action act = () => dummyInstaller.SimulateProgressChanged(new InstallationProgressChangedEventArgs(0, 1000));

            act.Should().Throw <StackOverflowException>().And.Message.Should().Be("xxx");
            logger.AssertPartialOutputStringDoesNotExist("xxx");
        }
示例#3
0
        public async Task SynchronizeWithServer_SupportedServer_IssuesFetched(ServerType serverType, string serverVersion)
        {
            var sonarServer = CreateSonarService(isConnected: true, serverType, serverVersion);
            var logger      = new TestLogger();

            var testSubject = CreateTestSubject(
                sonarService: sonarServer.Object,
                mode: SonarLintMode.Connected,
                logger: logger);

            await testSubject.SynchronizeWithServer();

            logger.AssertPartialOutputStringDoesNotExist("requires SonarQube v8.6 or later");
            CheckIssuesAreFetched(sonarServer);
        }
示例#4
0
        public void LifeCycle_ProgressChanged_CriticalException_NotSuppressed()
        {
            // Arrange
            dummyStatusBar.ProgressOperation = () => throw new StackOverflowException("xxx");

            var progressHandler = new StatusBarReanalysisProgressHandler(dummyStatusBar, logger);

            // Act and Assert: exception should not be suppressed
            dummyStatusBar.ProgressOperation = () => throw new StackOverflowException("xxx");

            Action act = () => ReportProgress(progressHandler, CancellableJobRunner.RunnerState.Running, 1, 2);

            act.Should().Throw <StackOverflowException>().And.Message.Should().Be("xxx");

            logger.AssertPartialOutputStringDoesNotExist("xxx");
        }
        public void Execute_CriticalError_IsNotSuppressed()
        {
            // Arrange
            var userSettingsProvider = CreateDummyUserSettingsProvider("any");
            var testLogger           = new TestLogger();
            var testSubject          = new TestableOpenSettingsFileWpfCommand(new ConfigurableServiceProvider(), userSettingsProvider, null, testLogger)
            {
                OpenDocOp = () => throw new StackOverflowException("dummy execute exception")
            };

            // Act
            Action act = () => testSubject.Execute(null);

            // Assert
            act.Should().ThrowExactly <StackOverflowException>().And.Message.Should().Be("dummy execute exception");
            testLogger.AssertPartialOutputStringDoesNotExist("dummy execute exception");
        }
示例#6
0
        public void Save_CriticalError_IsNotSquashed()
        {
            // Arrange
            var fileSystemMock = new Mock <IFileSystem>();

            fileSystemMock.Setup(x => x.File.WriteAllText("settings.file", It.IsAny <string>())).Throws(new System.StackOverflowException("critical custom error message"));

            var logger      = new TestLogger(logToConsole: true);
            var testSubject = new RulesSettingsSerializer(fileSystemMock.Object, logger);

            // Act
            Action act = () => testSubject.SafeSave("settings.file", new RulesSettings());

            // Assert
            act.Should().ThrowExactly <StackOverflowException>().And.Message.Should().Be("critical custom error message");
            logger.AssertPartialOutputStringDoesNotExist("critical custom error message");
        }
示例#7
0
        public void DirectoryDoesExist_IsNotCreated()
        {
            // Arrange
            var directoryMock = new Mock<IDirectory>();
            directoryMock.Setup(x => x.Exists(It.IsAny<string>())).Returns(true);

            var watcherFactoryMock = CreateFactoryAndWatcherMocks(out var watcherMock);
            var testLogger = new TestLogger(logToConsole: true);

            // Act
            using (var fileMonitor = new SingleFileMonitor(watcherFactoryMock.Object, directoryMock.Object, "c:\\dummy\\file.txt", testLogger))
            {
                // Assert
                directoryMock.Verify(x => x.Exists("c:\\dummy"), Times.Once);
                directoryMock.Verify(x => x.Create("c:\\dummy"), Times.Never);
                testLogger.AssertPartialOutputStringDoesNotExist("c:\\dummy");
            }
        }
示例#8
0
        public void Load_CriticalError_IsNotSquashed()
        {
            // Arrange
            var fileMock = new Mock <IFile>();

            fileMock.Setup(x => x.Exists("settings.file")).Returns(true);
            fileMock.Setup(x => x.ReadAllText("settings.file")).Throws(new System.StackOverflowException("critical custom error message"));

            var logger      = new TestLogger(logToConsole: true);
            var testSubject = new UserSettingsSerializer(fileMock.Object, logger);

            // Act
            Action act = () => testSubject.SafeLoad("settings.file");

            // Assert
            act.Should().ThrowExactly <StackOverflowException>().And.Message.Should().Be("critical custom error message");
            logger.AssertPartialOutputStringDoesNotExist("critical custom error message");
        }
示例#9
0
        public void Execute_CriticalErrorNotSuppressed()
        {
            // Arrange
            var errorList = new Mock <IErrorList>();

            errorList.Setup(x => x.TableControl).Throws(new StackOverflowException("exception xxx"));

            var testLogger = new TestLogger();
            var mockUserSettingsProvider = new Mock <IUserSettingsProvider>();
            var solutionTracker          = CreateSolutionTracker(SonarLintMode.Standalone);

            var    command = CreateDisableRuleMenuCommand(errorList.Object, mockUserSettingsProvider.Object, solutionTracker, testLogger);
            Action act     = () => command.Invoke();

            // Act
            act.Should().ThrowExactly <StackOverflowException>().And.Message.Should().Be("exception xxx");

            testLogger.AssertPartialOutputStringDoesNotExist("exception xxx");
        }
        public void Execute_CancellationTokenCancelledMidway_ProcessKilled()
        {
            var testFolder     = CreateTestSpecificFolder(TestContext);
            var signalFileName = $"{testFolder}\\signal-{Guid.NewGuid():N}.txt";

            var exeName = WriteBatchFileForTest(TestContext,
                                                $@"
echo test > ""{signalFileName}"" 
waitfor /t 10 {Guid.NewGuid():N}
@echo Done!
");

            using var processCancellationTokenSource = new CancellationTokenSource();
            var logger = new TestLogger(true, true);
            var args   = new ProcessRunnerArguments(exeName, true)
            {
                TimeoutInMilliseconds = 12000,
                CancellationToken     = processCancellationTokenSource.Token
            };

            var runner = CreateProcessRunner(logger);

            bool?result      = null;
            var  processTask = Task.Run(() => { result = runner.Execute(args); });

            var taskCancellationTokenSource = new CancellationTokenSource();
            var cancellationTask            = Task.Run(() =>
            {
                while (!taskCancellationTokenSource.IsCancellationRequested && !File.Exists(signalFileName))
                {
                    Thread.Sleep(millisecondsTimeout: 10);
                }
                processCancellationTokenSource.Cancel();
            }, taskCancellationTokenSource.Token);

            Task.WaitAll(new[] { processTask, cancellationTask }, TimeSpan.FromSeconds(15));
            taskCancellationTokenSource.Cancel();

            result.Should().BeFalse("Expecting the process to have failed");
            runner.ExitCode.Should().Be(-1, "Unexpected exit code");
            processCancellationTokenSource.IsCancellationRequested.Should().BeTrue();
            logger.AssertPartialOutputStringDoesNotExist("Done!");
        }
        public void SolutionBindingOperation_Initialization()
        {
            // Arrange
            var cs1Project = this.solutionMock.AddOrGetProject("CS1.csproj");

            cs1Project.SetCSProjectKind();
            var cs2Project = this.solutionMock.AddOrGetProject("CS2.csproj");

            cs2Project.SetCSProjectKind();
            var vbProject = this.solutionMock.AddOrGetProject("VB.vbproj");

            vbProject.SetVBProjectKind();
            var otherProjectType = this.solutionMock.AddOrGetProject("xxx.proj");

            otherProjectType.ProjectKind = "{" + Guid.NewGuid().ToString() + "}";

            var logger = new TestLogger();

            SolutionBindingOperation testSubject = this.CreateTestSubject("key", logger: logger);
            var projects = new[] { cs1Project, vbProject, cs2Project, otherProjectType };

            // Sanity
            testSubject.Binders.Should().BeEmpty("Not expecting any project binders");

            // Act
            testSubject.Initialize(projects, GetQualityProfiles());

            // Assert
            testSubject.SolutionFullPath.Should().Be(Path.Combine(SolutionRoot, "xxx.sln"));
            testSubject.Binders.Should().HaveCount(3, "Should be one per managed project");

            testSubject.Binders.Select(x => ((ProjectBindingOperation)x).ProjectFullPath)
            .Should().BeEquivalentTo("CS1.csproj", "CS2.csproj", "VB.vbproj");

            logger.AssertPartialOutputStringExists("xxx.proj"); // expecting a message about the project that won't be bound, but not the others
            logger.AssertPartialOutputStringDoesNotExist("CS1.csproj");
        }