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"); }
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"); }
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); }
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"); }
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"); }
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"); } }
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"); }
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"); }