public BuildUpToDateCheckTests(ITestOutputHelper output) { _output = output; // NOTE most of these mocks are only present to prevent NREs in Initialize // Enable "Info" log level, as we assert logged messages in tests var projectSystemOptions = new Mock <IProjectSystemOptions>(); projectSystemOptions.Setup(o => o.GetFastUpToDateLoggingLevelAsync(It.IsAny <CancellationToken>())) .ReturnsAsync(LogLevel.Info); projectSystemOptions.Setup(o => o.GetIsFastUpToDateCheckEnabledAsync(It.IsAny <CancellationToken>())) .ReturnsAsync(() => _isFastUpToDateCheckEnabled); var projectCommonServices = IProjectCommonServicesFactory.CreateWithDefaultThreadingPolicy(); var jointRuleSource = new ProjectValueDataSource <IProjectSubscriptionUpdate>(projectCommonServices); var sourceItemsRuleSource = new ProjectValueDataSource <IProjectSubscriptionUpdate>(projectCommonServices); var projectSubscriptionService = new Mock <IProjectSubscriptionService>(); projectSubscriptionService.SetupGet(o => o.JointRuleSource).Returns(jointRuleSource); projectSubscriptionService.SetupGet(o => o.SourceItemsRuleSource).Returns(sourceItemsRuleSource); var configuredProjectServices = ConfiguredProjectServicesFactory.Create(projectSubscriptionService: projectSubscriptionService.Object); var configuredProject = new Mock <ConfiguredProject>(); configuredProject.SetupGet(c => c.ProjectVersion).Returns(() => _projectVersion); configuredProject.SetupGet(c => c.Services).Returns(configuredProjectServices); configuredProject.SetupGet(c => c.UnconfiguredProject).Returns(UnconfiguredProjectFactory.Create(filePath: _projectFullPath)); var projectAsynchronousTasksService = new Mock <IProjectAsynchronousTasksService>(); projectAsynchronousTasksService.SetupGet(s => s.UnloadCancellationToken).Returns(CancellationToken.None); projectAsynchronousTasksService.Setup(s => s.IsTaskQueueEmpty(ProjectCriticalOperation.Build)).Returns(() => _isTaskQueueEmpty); var lastWriteTimeUtc = new DateTime(1999, 1, 1, 0, 0, 0, DateTimeKind.Utc); _fileSystem = new IFileSystemMock(); _fileSystem.AddFile(_msBuildProjectFullPath, lastWriteTimeUtc); _fileSystem.AddFile("Project1", lastWriteTimeUtc); _fileSystem.AddFile("Project2", lastWriteTimeUtc); _fileSystem.AddFolder(_msBuildProjectDirectory); _fileSystem.AddFolder(_outputPath); var threadingService = IProjectThreadingServiceFactory.Create(); _buildUpToDateCheck = new BuildUpToDateCheck( projectSystemOptions.Object, configuredProject.Object, projectAsynchronousTasksService.Object, IProjectItemSchemaServiceFactory.Create(), ITelemetryServiceFactory.Create(telemetryParameters => _telemetryEvents.Add(telemetryParameters)), threadingService, _fileSystem); }
private static ActiveConfiguredProjectsLoader CreateInstance(UnconfiguredProject project, IUnconfiguredProjectTasksService?tasksService, out ProjectValueDataSource <IConfigurationGroup <ProjectConfiguration> > source) { var services = IProjectCommonServicesFactory.CreateWithDefaultThreadingPolicy(); source = ProjectValueDataSourceFactory.Create <IConfigurationGroup <ProjectConfiguration> >(services); var activeConfigurationGroupService = IActiveConfigurationGroupServiceFactory.Implement(source); var loader = CreateInstance(project, activeConfigurationGroupService, tasksService); return(loader); }
public DesignTimeInputsChangeTrackerTests() { var services = IProjectCommonServicesFactory.CreateWithDefaultThreadingPolicy(); using var designTimeInputsSource = ProjectValueDataSourceFactory.Create <DesignTimeInputs>(services); var dataSourceMock = new Mock <IDesignTimeInputsDataSource>(); dataSourceMock.SetupGet(s => s.SourceBlock) .Returns(designTimeInputsSource.SourceBlock); using var fileWatcherSource = ProjectValueDataSourceFactory.Create <string[]>(services); var watcherMock = new Mock <IDesignTimeInputsFileWatcher>(); watcherMock.SetupGet(s => s.SourceBlock) .Returns(fileWatcherSource.SourceBlock); var threadingService = IProjectThreadingServiceFactory.Create(); var projectSubscriptionService = IActiveConfiguredProjectSubscriptionServiceFactory.Create(); var unconfiguredProject = UnconfiguredProjectFactory.Create( filePath: Path.Combine(_projectFolder, "MyTestProj.csproj"), projectAsynchronousTasksService: IProjectAsynchronousTasksServiceFactory.Create()); var unconfiguredProjectServices = IUnconfiguredProjectServicesFactory.Create( projectService: IProjectServiceFactory.Create( services: ProjectServicesFactory.Create( threadingService: threadingService))); _changeTracker = new DesignTimeInputsChangeTracker(unconfiguredProject, unconfiguredProjectServices, threadingService, projectSubscriptionService, dataSourceMock.Object, watcherMock.Object) { AllowSourceBlockCompletion = true }; // Create a block to receive the output var receiver = DataflowBlockSlim.CreateActionBlock <IProjectVersionedValue <DesignTimeInputsDelta> >(OutputProduced); _changeTracker.SourceBlock.LinkTo(receiver, DataflowOption.PropagateCompletion); }
public static IProjectSubscriptionService Create() { var services = IProjectCommonServicesFactory.CreateWithDefaultThreadingPolicy(); var ruleSource = ProjectValueDataSourceFactory.Create <IProjectSubscriptionUpdate>(services); var projectSource = ProjectValueDataSourceFactory.Create <IProjectSnapshot>(services); var mock = new Mock <IProjectSubscriptionService>(); mock.SetupGet(s => s.ProjectRuleSource) .Returns(ruleSource); mock.SetupGet(s => s.ProjectBuildRuleSource) .Returns(ruleSource); mock.SetupGet(s => s.ProjectSource) .Returns(projectSource); mock.SetupGet(s => s.SourceItemsRuleSource) .Returns(ruleSource); return(mock.Object); }
private static DesignTimeInputsFileWatcher CreateDesignTimeInputsFileWatcher(IVsAsyncFileChangeEx fileChangeService, out ProjectValueDataSource <DesignTimeInputs> source) { // Create our mock design time inputs data source, but with a source we can actually use var services = IProjectCommonServicesFactory.CreateWithDefaultThreadingPolicy(); source = ProjectValueDataSourceFactory.Create <DesignTimeInputs>(services); var mock = new Mock <IDesignTimeInputsDataSource>(); mock.SetupGet(s => s.SourceBlock) .Returns(source.SourceBlock); var dataSource = mock.Object; var threadingService = IProjectThreadingServiceFactory.Create(); var unconfiguredProject = UnconfiguredProjectFactory.Create(fullPath: @"C:\MyProject\MyProject.csproj"); var unconfiguredProjectServices = IUnconfiguredProjectServicesFactory.Create( projectService: IProjectServiceFactory.Create( services: ProjectServicesFactory.Create( threadingService: threadingService))); // Create our class under test return(new DesignTimeInputsFileWatcher(unconfiguredProject, unconfiguredProjectServices, threadingService, dataSource, IVsServiceFactory.Create <SVsFileChangeEx, IVsAsyncFileChangeEx>(fileChangeService))); }