public void LogErrorAsync_WithoutException_ArgumentNullException_Message()
        {
            // Arrange
            var     vsaMock = new Mock <IVisualStudioAccess>();
            ILogger logger  = new VisualStudioLogger(vsaMock.Object, "foo");

            // Act & Assert
            // ReSharper disable once AssignNullToNotNullAttribute
            Assert.Throws <ArgumentNullException>(() => logger.LogErrorAsync(null));
        }
        public async Task LogErrorAsync_WithoutException_LogCorrectMessageAsync()
        {
            // Arrange
            var     vsaMock = new Mock <IVisualStudioAccess>();
            ILogger logger  = new VisualStudioLogger(vsaMock.Object, "foo");

            // Act
            await logger.LogErrorAsync("test message");

            // Assert
            vsaMock.Verify(m => m.LogToOutputPanelAsync("ERROR: test message"), Times.Once);
        }
        public async Task LogErrorAsync_WithException_LogCorrectMessageAsync()
        {
            // Arrange
            var     vsaMock   = new Mock <IVisualStudioAccess>();
            ILogger logger    = new VisualStudioLogger(vsaMock.Object, "foo");
            var     exception = new Exception("test exception");

            // Act
            await logger.LogErrorAsync(exception, "test message");

            // Assert
            vsaMock.Verify(m => m.LogToOutputPanelAsync(It.Is <string>(s => s.StartsWith("ERROR: test message") &&
                                                                       s.Contains(exception.Message) &&
                                                                       s.Contains(exception.GetType().FullName))),
                           Times.Once);
        }