public async Task UpdaterService() { var hostServices = s_composition.GetHostServices(); using var workspace = new AdhocWorkspace(hostServices); var options = workspace.CurrentSolution.Options.WithChangedOption( RemoteHostOptions.SolutionChecksumMonitorBackOffTimeSpanInMS, 1 ); workspace.TryApplyChanges(workspace.CurrentSolution.WithOptions(options)); var listenerProvider = ( (IMefHostExportProvider)hostServices ).GetExportedValue <AsynchronousOperationListenerProvider>(); var checksumUpdater = new SolutionChecksumUpdater( workspace, listenerProvider, CancellationToken.None ); var service = workspace.Services.GetRequiredService <IRemoteHostClientProvider>(); // make sure client is ready using var client = await service.TryGetRemoteHostClientAsync(CancellationToken.None); // add solution, change document workspace.AddSolution( SolutionInfo.Create(SolutionId.CreateNewId(), VersionStamp.Default) ); var project = workspace.AddProject("proj", LanguageNames.CSharp); var document = workspace.AddDocument(project.Id, "doc.cs", SourceText.From("code")); workspace.ApplyTextChanges( document.Id, new[] { new TextChange(new TextSpan(0, 1), "abc") }, CancellationToken.None ); // wait for listener var workspaceListener = listenerProvider.GetWaiter(FeatureAttribute.Workspace); await workspaceListener.ExpeditedWaitAsync(); var listener = listenerProvider.GetWaiter(FeatureAttribute.SolutionChecksumUpdater); await listener.ExpeditedWaitAsync(); // checksum should already exist Assert.True(workspace.CurrentSolution.State.TryGetStateChecksums(out _)); checksumUpdater.Shutdown(); }
public async Task UpdaterService() { var exportProvider = ExportProviderCache .GetOrCreateExportProviderFactory(ServiceTestExportProvider.CreateAssemblyCatalog() .WithParts(typeof(InProcRemoteHostClientProvider.Factory), typeof(CSharpOptionsSerializationService))) .CreateExportProvider(); using var workspace = new AdhocWorkspace(TestHostServices.CreateHostServices(exportProvider)); var options = workspace.CurrentSolution.Options .WithChangedOption(Microsoft.VisualStudio.LanguageServices.Remote.RemoteHostOptions.SolutionChecksumMonitorBackOffTimeSpanInMS, 1) .WithChangedOption(Microsoft.CodeAnalysis.Test.Utilities.RemoteHost.RemoteHostOptions.RemoteHostTest, true); workspace.TryApplyChanges(workspace.CurrentSolution.WithOptions(options)); var listenerProvider = exportProvider.GetExportedValue <AsynchronousOperationListenerProvider>(); var checksumUpdater = new SolutionChecksumUpdater(workspace, listenerProvider, CancellationToken.None); var service = workspace.Services.GetRequiredService <IRemoteHostClientProvider>(); // make sure client is ready using var client = await service.TryGetRemoteHostClientAsync(CancellationToken.None); // add solution, change document workspace.AddSolution(SolutionInfo.Create(SolutionId.CreateNewId(), VersionStamp.Default)); var project = workspace.AddProject("proj", LanguageNames.CSharp); var document = workspace.AddDocument(project.Id, "doc.cs", SourceText.From("code")); workspace.ApplyTextChanges(document.Id, new[] { new TextChange(new TextSpan(0, 1), "abc") }, CancellationToken.None); // wait for listener var workspaceListener = listenerProvider.GetWaiter(FeatureAttribute.Workspace); await workspaceListener.ExpeditedWaitAsync(); var listener = listenerProvider.GetWaiter(FeatureAttribute.SolutionChecksumUpdater); await listener.ExpeditedWaitAsync(); // checksum should already exist Assert.True(workspace.CurrentSolution.State.TryGetStateChecksums(out _)); checksumUpdater.Shutdown(); }