public void OnSessionStartShouldInitializeCoverageWithCorrectCoverletSettings() { Func <TestPlatformEqtTrace, TestPlatformLogger, string, IServiceCollection> serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => { IServiceCollection serviceCollection = new ServiceCollection(); Mock <IFileSystem> fileSystem = new Mock <IFileSystem>(); fileSystem.Setup(f => f.Exists(It.IsAny <string>())).Returns((string testLib) => testLib == "abc.dll"); serviceCollection.AddTransient(_ => fileSystem.Object); serviceCollection.AddTransient <IRetryHelper, RetryHelper>(); serviceCollection.AddTransient <IProcessExitHandler, ProcessExitHandler>(); serviceCollection.AddTransient <ILogger, CoverletLogger>(_ => new CoverletLogger(eqtTrace, logger)); serviceCollection.AddSingleton <IInstrumentationHelper, InstrumentationHelper>(); serviceCollection.AddSingleton <ISourceRootTranslator, SourceRootTranslator>(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService <ILogger>(), serviceProvider.GetRequiredService <IFileSystem>())); return(serviceCollection); }; _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object, serviceCollectionFactory); _coverletCoverageDataCollector.Initialize( _configurationElement, _mockDataColectionEvents.Object, _mockDataCollectionSink.Object, _mockLogger.Object, _context); IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>(); sessionStartProperties.Add("TestSources", new List <string> { "abc.dll" }); _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); _mockCoverageWrapper.Verify(x => x.CreateCoverage(It.Is <CoverletSettings>(y => string.Equals(y.TestModule, "abc.dll")), It.IsAny <ILogger>(), It.IsAny <IInstrumentationHelper>(), It.IsAny <IFileSystem>(), It.IsAny <ISourceRootTranslator>()), Times.Once); }
public void OnSessionEndShouldSendGetCoverageReportToTestPlatform() { _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), new CoverageWrapper(), _mockCountDownEventFactory.Object); _coverletCoverageDataCollector.Initialize( _configurationElement, _mockDataColectionEvents.Object, _mockDataCollectionSink.Object, _mockLogger.Object, _context); string module = GetType().Assembly.Location; string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); var directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true); File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true); IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>(); sessionStartProperties.Add("TestSources", new List <string> { Path.Combine(directory.FullName, Path.GetFileName(module)) }); _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); _mockDataColectionEvents.Raise(x => x.SessionEnd += null, new SessionEndEventArgs()); _mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny <FileTransferInformation>()), Times.Once); directory.Delete(true); }
public void OnSessionEndShouldSendCoverageReportsForMultipleFormatsToTestPlatform(string formats, int sendReportsCount) { Func <TestPlatformEqtTrace, TestPlatformLogger, string, IServiceCollection> serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => { IServiceCollection serviceCollection = new ServiceCollection(); Mock <IFileSystem> fileSystem = new Mock <IFileSystem>(); fileSystem.Setup(f => f.Exists(It.IsAny <string>())).Returns((string testLib) => testLib == "Test"); serviceCollection.AddTransient(_ => fileSystem.Object); serviceCollection.AddTransient <IRetryHelper, RetryHelper>(); serviceCollection.AddTransient <IProcessExitHandler, ProcessExitHandler>(); serviceCollection.AddTransient <ILogger, CoverletLogger>(_ => new CoverletLogger(eqtTrace, logger)); serviceCollection.AddSingleton <IInstrumentationHelper, InstrumentationHelper>(); serviceCollection.AddSingleton <ISourceRootTranslator, SourceRootTranslator>(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService <ILogger>(), serviceProvider.GetRequiredService <IFileSystem>())); serviceCollection.AddSingleton <ICecilSymbolHelper, CecilSymbolHelper>(); return(serviceCollection); }; _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), new CoverageWrapper(), _mockCountDownEventFactory.Object, serviceCollectionFactory); IList <IReporter> reporters = formats.Split(',').Select(f => new ReporterFactory(f).CreateReporter()).Where(x => x != null).ToList(); Mock <DataCollectionSink> mockDataCollectionSink = new Mock <DataCollectionSink>(); mockDataCollectionSink.Setup(m => m.SendFileAsync(It.IsAny <FileTransferInformation>())).Callback <FileTransferInformation>(fti => { reporters.Remove(reporters.First(x => Path.GetFileName(fti.Path) == Path.ChangeExtension(CoverletConstants.DefaultFileName, x.Extension)) ); }); var doc = new XmlDocument(); var root = doc.CreateElement("Configuration"); var element = doc.CreateElement("Format"); element.AppendChild(doc.CreateTextNode(formats)); root.AppendChild(element); _configurationElement = root; _coverletCoverageDataCollector.Initialize( _configurationElement, _mockDataColectionEvents.Object, mockDataCollectionSink.Object, _mockLogger.Object, _context); var sessionStartProperties = new Dictionary <string, object> { { "TestSources", new List <string> { "Test" } } }; _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); _mockDataColectionEvents.Raise(x => x.SessionEnd += null, new SessionEndEventArgs()); mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny <FileTransferInformation>()), Times.Exactly(sendReportsCount)); Assert.Empty(reporters); }
public void OnSessionStartShouldPrepareModulesForCoverage() { Func <TestPlatformEqtTrace, TestPlatformLogger, string, IServiceCollection> serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => { IServiceCollection serviceCollection = new ServiceCollection(); Mock <IFileSystem> fileSystem = new Mock <IFileSystem>(); fileSystem.Setup(f => f.Exists(It.IsAny <string>())).Returns((string testLib) => testLib == "abc.dll"); serviceCollection.AddTransient(_ => fileSystem.Object); serviceCollection.AddTransient <IRetryHelper, RetryHelper>(); serviceCollection.AddTransient <IProcessExitHandler, ProcessExitHandler>(); serviceCollection.AddTransient <ILogger, CoverletLogger>(_ => new CoverletLogger(eqtTrace, logger)); serviceCollection.AddSingleton <IInstrumentationHelper, InstrumentationHelper>(); serviceCollection.AddSingleton <ISourceRootTranslator, SourceRootTranslator>(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService <ILogger>(), serviceProvider.GetRequiredService <IFileSystem>())); serviceCollection.AddSingleton <ICecilSymbolHelper, CecilSymbolHelper>(); return(serviceCollection); }; _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object, serviceCollectionFactory); _coverletCoverageDataCollector.Initialize( _configurationElement, _mockDataColectionEvents.Object, _mockDataCollectionSink.Object, null, _context); IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>(); IInstrumentationHelper instrumentationHelper = new InstrumentationHelper(new Mock <IProcessExitHandler>().Object, new Mock <IRetryHelper>().Object, new Mock <IFileSystem>().Object, new Mock <ILogger>().Object, new Mock <ISourceRootTranslator>().Object); CoverageParameters parameters = new CoverageParameters { IncludeFilters = null, IncludeDirectories = null, ExcludedSourceFiles = null, ExcludeAttributes = null, IncludeTestAssembly = true, SingleHit = true, MergeWith = "abc.json", UseSourceLink = true }; Coverage coverage = new Coverage("abc.dll", parameters, It.IsAny <ILogger>(), instrumentationHelper, new Mock <IFileSystem>().Object, new Mock <ISourceRootTranslator>().Object, new Mock <ICecilSymbolHelper>().Object); sessionStartProperties.Add("TestSources", new List <string> { "abc.dll" }); _mockCoverageWrapper.Setup(x => x.CreateCoverage(It.IsAny <CoverletSettings>(), It.IsAny <ILogger>(), It.IsAny <IInstrumentationHelper>(), It.IsAny <IFileSystem>(), It.IsAny <ISourceRootTranslator>(), It.IsAny <ICecilSymbolHelper>())).Returns(coverage); _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); _mockCoverageWrapper.Verify(x => x.CreateCoverage(It.Is <CoverletSettings>(y => y.TestModule.Contains("abc.dll")), It.IsAny <ILogger>(), It.IsAny <IInstrumentationHelper>(), It.IsAny <IFileSystem>(), It.IsAny <ISourceRootTranslator>(), It.IsAny <ICecilSymbolHelper>()), Times.Once); _mockCoverageWrapper.Verify(x => x.PrepareModules(It.IsAny <Coverage>()), Times.Once); }
public void OnSessionEndShouldSendGetCoverageReportToTestPlatform() { Func <TestPlatformEqtTrace, TestPlatformLogger, string, IServiceCollection> serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => { IServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddTransient <IFileSystem, FileSystem>(); serviceCollection.AddTransient <IRetryHelper, RetryHelper>(); serviceCollection.AddTransient <IProcessExitHandler, ProcessExitHandler>(); serviceCollection.AddTransient <ILogger, CoverletLogger>(_ => new CoverletLogger(eqtTrace, logger)); serviceCollection.AddSingleton <IInstrumentationHelper, InstrumentationHelper>(); serviceCollection.AddSingleton <ISourceRootTranslator, SourceRootTranslator>(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService <ILogger>(), serviceProvider.GetRequiredService <IFileSystem>())); serviceCollection.AddSingleton <ICecilSymbolHelper, CecilSymbolHelper>(); return(serviceCollection); }; _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), new CoverageWrapper(), _mockCountDownEventFactory.Object, serviceCollectionFactory); _coverletCoverageDataCollector.Initialize( _configurationElement, _mockDataColectionEvents.Object, _mockDataCollectionSink.Object, _mockLogger.Object, _context); string module = GetType().Assembly.Location; string pdb = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb"); var directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())); File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true); File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true); IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>(); sessionStartProperties.Add("TestSources", new List <string> { Path.Combine(directory.FullName, Path.GetFileName(module)) }); _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); _mockDataColectionEvents.Raise(x => x.SessionEnd += null, new SessionEndEventArgs()); _mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny <FileTransferInformation>()), Times.Once); directory.Delete(true); }
public void OnSessionStartShouldInitializeCoverageWithCorrectCoverletSettings() { _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object); _coverletCoverageDataCollector.Initialize( _configurationElement, _mockDataColectionEvents.Object, _mockDataCollectionSink.Object, _mockLogger.Object, _context); IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>(); sessionStartProperties.Add("TestSources", new List <string> { "abc.dll" }); _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); _mockCoverageWrapper.Verify(x => x.CreateCoverage(It.Is <CoverletSettings>(y => string.Equals(y.TestModule, "abc.dll")), It.IsAny <ILogger>()), Times.Once); }
public void OnSessionEndShouldSendCoverageReportsForMultipleFormatsToTestPlatform(string formats, int sendReportsCount) { _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), new CoverageWrapper(), _mockCountDownEventFactory.Object); IList <IReporter> reporters = formats.Split(',').Select(f => new ReporterFactory(f).CreateReporter()).Where(x => x != null).ToList(); Mock <DataCollectionSink> mockDataCollectionSink = new Mock <DataCollectionSink>(); mockDataCollectionSink.Setup(m => m.SendFileAsync(It.IsAny <FileTransferInformation>())).Callback <FileTransferInformation>(fti => { reporters.Remove(reporters.First(x => Path.GetFileName(fti.Path) == Path.ChangeExtension(CoverletConstants.DefaultFileName, x.Extension)) ); }); var doc = new XmlDocument(); var root = doc.CreateElement("Configuration"); var element = doc.CreateElement("Format"); element.AppendChild(doc.CreateTextNode(formats)); root.AppendChild(element); _configurationElement = root; _coverletCoverageDataCollector.Initialize( _configurationElement, _mockDataColectionEvents.Object, mockDataCollectionSink.Object, _mockLogger.Object, _context); var sessionStartProperties = new Dictionary <string, object> { { "TestSources", new List <string> { "Test" } } }; _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); _mockDataColectionEvents.Raise(x => x.SessionEnd += null, new SessionEndEventArgs()); mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny <FileTransferInformation>()), Times.Exactly(sendReportsCount)); Assert.Empty(reporters); }
public void OnSessionStartShouldPrepareModulesForCoverage() { _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object); _coverletCoverageDataCollector.Initialize( _configurationElement, _mockDataColectionEvents.Object, _mockDataCollectionSink.Object, null, _context); IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>(); Coverage coverage = new Coverage("abc.dll", null, null, null, null, null, true, true, "abc.json", true, It.IsAny <ILogger>(), DependencyInjection.Current.GetService <IInstrumentationHelper>(), DependencyInjection.Current.GetService <IFileSystem>()); sessionStartProperties.Add("TestSources", new List <string> { "abc.dll" }); _mockCoverageWrapper.Setup(x => x.CreateCoverage(It.IsAny <CoverletSettings>(), It.IsAny <ILogger>())).Returns(coverage); _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); _mockCoverageWrapper.Verify(x => x.CreateCoverage(It.Is <CoverletSettings>(y => y.TestModule.Contains("abc.dll")), It.IsAny <ILogger>()), Times.Once); _mockCoverageWrapper.Verify(x => x.PrepareModules(It.IsAny <Coverage>()), Times.Once); }
public void OnSessionStartShouldLogWarningIfInstrumentationFailed() { _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object); _coverletCoverageDataCollector.Initialize( _configurationElement, _mockDataColectionEvents.Object, _mockDataCollectionSink.Object, _mockLogger.Object, _context); IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>(); sessionStartProperties.Add("TestSources", new List <string> { "abc.dll" }); _mockCoverageWrapper.Setup(x => x.PrepareModules(It.IsAny <Coverage>())).Throws(new FileNotFoundException()); _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); _mockLogger.Verify(x => x.LogWarning(_dataCollectionContext, It.Is <string>(y => y.Contains("CoverletDataCollectorException")))); }
public void OnSessionStartShouldLogWarningIfInstrumentationFailed() { coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), this.mockCoverageWrapper.Object); coverletCoverageDataCollector.Initialize( this.configurationElement, this.mockDataColectionEvents.Object, this.mockDataCollectionSink.Object, this.mockLogger.Object, this.context); IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>(); sessionStartProperties.Add("TestSources", new List <string> { "abc.dll" }); this.mockCoverageWrapper.Setup(x => x.PrepareModules(It.IsAny <Coverage>())).Throws(new FileNotFoundException()); this.mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); this.mockLogger.Verify(x => x.LogWarning(this.dataCollectionContext, "Microsoft.TestPlatform.Extensions.CoverletCoverageDataCollector.Utilities.CoverletDataCollectorException: CoverletCoverageDataCollector: Failed to instrument modules ---> System.IO.FileNotFoundException: Unable to find the specified file.\r\n at Moq.MethodCall.ThrowExceptionResponse.RespondTo(Invocation invocation) in C:\\projects\\moq4\\src\\Moq\\MethodCall.cs:line 465\r\n at Moq.MethodCall.Execute(Invocation invocation) in C:\\projects\\moq4\\src\\Moq\\MethodCall.cs:line 109\r\n at Moq.FindAndExecuteMatchingSetup.Handle(Invocation invocation, Mock mock) in C:\\projects\\moq4\\src\\Moq\\Interception\\InterceptionAspects.cs:line 137\r\n at Moq.Mock.Moq.IInterceptor.Intercept(Invocation invocation) in C:\\projects\\moq4\\src\\Moq\\Interception\\Mock.cs:line 20\r\n at Castle.DynamicProxy.AbstractInvocation.Proceed()\r\n at Microsoft.TestPlatform.Extensions.CoverletCoverageDataCollector.DataCollector.CoverageManager.InstrumentModules() in E:\\CodeBase\\CoverletDataCollector\\src\\DataCollector\\CoverageManager.cs:line 51\r\n --- End of inner exception stack trace ---\r\n at Microsoft.TestPlatform.Extensions.CoverletCoverageDataCollector.DataCollector.CoverageManager.InstrumentModules() in E:\\CodeBase\\CoverletDataCollector\\src\\DataCollector\\CoverageManager.cs:line 56\r\n at Microsoft.TestPlatform.Extensions.CoverletCoverageDataCollector.DataCollector.CoverletCoverageCollector.OnSessionStart(Object sender, SessionStartEventArgs sessionStartEventArgs) in E:\\CodeBase\\CoverletDataCollector\\src\\DataCollector\\CoverletCoverageDataCollector.cs:line 115")); }
public void OnSessionStartShouldLogWarningIfInstrumentationFailed() { Func <TestPlatformEqtTrace, TestPlatformLogger, string, IServiceCollection> serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) => { IServiceCollection serviceCollection = new ServiceCollection(); Mock <IFileSystem> fileSystem = new Mock <IFileSystem>(); fileSystem.Setup(f => f.Exists(It.IsAny <string>())).Returns((string testLib) => testLib == "abc.dll"); serviceCollection.AddTransient(_ => fileSystem.Object); serviceCollection.AddTransient <IRetryHelper, RetryHelper>(); serviceCollection.AddTransient <IProcessExitHandler, ProcessExitHandler>(); serviceCollection.AddTransient <ILogger, CoverletLogger>(_ => new CoverletLogger(eqtTrace, logger)); serviceCollection.AddSingleton <IInstrumentationHelper, InstrumentationHelper>(); serviceCollection.AddSingleton <ISourceRootTranslator, SourceRootTranslator>(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService <ILogger>(), serviceProvider.GetRequiredService <IFileSystem>())); serviceCollection.AddSingleton <ICecilSymbolHelper, CecilSymbolHelper>(); return(serviceCollection); }; _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object, serviceCollectionFactory); _coverletCoverageDataCollector.Initialize( _configurationElement, _mockDataColectionEvents.Object, _mockDataCollectionSink.Object, _mockLogger.Object, _context); IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>(); sessionStartProperties.Add("TestSources", new List <string> { "abc.dll" }); _mockCoverageWrapper.Setup(x => x.PrepareModules(It.IsAny <Coverage>())).Throws(new FileNotFoundException()); _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties)); _mockLogger.Verify(x => x.LogWarning(_dataCollectionContext, It.Is <string>(y => y.Contains("CoverletDataCollectorException")))); }