提交 fc85afda 编写于 作者: H Heejae Chang

added unit test

上级 72f32fcf
......@@ -109,7 +109,7 @@ public async void Unregister(Workspace workspace, bool blockingShutdown = false)
_owner._analyzerService.ShutdownAnalyzerFrom(_workspace);
}
public void RegisterIncrementalAnalyzerProvider(IIncrementalAnalyzerProvider provider, IncrementalAnalyzerProviderMetadata metadata)
public void AddAnalyzerProvider(IIncrementalAnalyzerProvider provider, IncrementalAnalyzerProviderMetadata metadata)
{
// preview solution crawler doesn't support adding and removing analyzer dynamically
throw new NotSupportedException();
......
......@@ -42,6 +42,37 @@ public async Task RegisterService()
}
}
[Fact]
public async Task DynamicallyAddAnalyzer()
{
using (var workspace = new WorkCoordinatorWorkspace(SolutionCrawler))
{
// create solution and wait for it to settle
var solution = GetInitialSolutionInfo(workspace);
workspace.OnSolutionAdded(solution);
await WaitWaiterAsync(workspace.ExportProvider);
// create solution crawler and add new analyzer provider dynamically
var service = new SolutionCrawlerRegistrationService(
SpecializedCollections.EmptyEnumerable<Lazy<IIncrementalAnalyzerProvider, IncrementalAnalyzerProviderMetadata>>(),
GetListeners(workspace.ExportProvider));
service.Register(workspace);
var provider = new AnalyzerProvider(new Analyzer());
service.AddAnalyzerProvider(provider, Metadata.Crawler);
// wait for everything to settle
await WaitAsync(service, workspace);
service.Unregister(workspace);
// check whether everything ran as expected
Assert.Equal(10, provider.Analyzer.SyntaxDocumentIds.Count);
Assert.Equal(10, provider.Analyzer.DocumentIds.Count);
}
}
[Fact, WorkItem(747226, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/747226")]
public async Task SolutionAdded_Simple()
{
......@@ -997,23 +1028,23 @@ protected override void Dispose(bool finalize)
private class AnalyzerProvider : IIncrementalAnalyzerProvider
{
private readonly Analyzer _analyzer;
public readonly Analyzer Analyzer;
public AnalyzerProvider(Analyzer analyzer)
{
_analyzer = analyzer;
Analyzer = analyzer;
}
public IIncrementalAnalyzer CreateIncrementalAnalyzer(Workspace workspace)
{
return _analyzer;
return Analyzer;
}
}
internal class Metadata : IncrementalAnalyzerProviderMetadata
{
public Metadata(params string[] workspaceKinds)
: base(new Dictionary<string, object> { { "WorkspaceKinds", workspaceKinds }, { "HighPriorityForActiveFile", false } })
: base(new Dictionary<string, object> { { "WorkspaceKinds", workspaceKinds }, { "HighPriorityForActiveFile", false }, { "Name", "TestAnalyzer" } })
{
}
......
......@@ -85,7 +85,7 @@ public void Unregister(Workspace workspace, bool blockingShutdown = false)
SolutionCrawlerLogger.LogUnregistration(coordinator.CorrelationId);
}
public void RegisterIncrementalAnalyzerProvider(IIncrementalAnalyzerProvider provider, IncrementalAnalyzerProviderMetadata metadata)
public void AddAnalyzerProvider(IIncrementalAnalyzerProvider provider, IncrementalAnalyzerProviderMetadata metadata)
{
// now update all existing work coordinator
lock (_gate)
......
......@@ -12,6 +12,6 @@ internal interface ISolutionCrawlerRegistrationService : IWorkspaceService
void Register(Workspace workspace);
void Unregister(Workspace workspace, bool blockingShutdown = false);
void RegisterIncrementalAnalyzerProvider(IIncrementalAnalyzerProvider provider, IncrementalAnalyzerProviderMetadata metadata);
void AddAnalyzerProvider(IIncrementalAnalyzerProvider provider, IncrementalAnalyzerProviderMetadata metadata);
}
}
......@@ -23,7 +23,7 @@ public void Unregister(Workspace workspace, bool blockingShutdown = false)
// base implementation do nothing.
}
public void RegisterIncrementalAnalyzerProvider(IIncrementalAnalyzerProvider provider, IncrementalAnalyzerProviderMetadata metadata)
public void AddAnalyzerProvider(IIncrementalAnalyzerProvider provider, IncrementalAnalyzerProviderMetadata metadata)
{
// base implementation do nothing.
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册