public void TestOpenCloseDocument() { var pid = ProjectId.CreateNewId(); var text = SourceText.From("public class C { }"); var version = VersionStamp.Create(); var docInfo = DocumentInfo.Create(DocumentId.CreateNewId(pid), "c.cs", loader: TextLoader.From(TextAndVersion.Create(text, version))); var projInfo = ProjectInfo.Create( pid, version: VersionStamp.Default, name: "TestProject", assemblyName: "TestProject.dll", language: LanguageNames.CSharp, documents: new[] { docInfo }); using (var ws = new AdhocWorkspace()) { ws.AddProject(projInfo); var doc = ws.CurrentSolution.GetDocument(docInfo.Id); Assert.Equal(false, doc.TryGetText(out var currentText)); ws.OpenDocument(docInfo.Id); doc = ws.CurrentSolution.GetDocument(docInfo.Id); Assert.Equal(true, doc.TryGetText(out currentText)); Assert.Equal(true, doc.TryGetTextVersion(out var currentVersion)); Assert.Same(text, currentText); Assert.Equal(version, currentVersion); ws.CloseDocument(docInfo.Id); doc = ws.CurrentSolution.GetDocument(docInfo.Id); Assert.Equal(false, doc.TryGetText(out currentText)); } }
private static void replaceDocument(DocumentInfo newdoc) { if (lastid != null) { workspace.CloseDocument(lastid); } scriptDocument = workspace.AddDocument(scriptDocumentInfo); lastid = newdoc.Id; }
public async Task TestOpenFileOnlyAnalyzerDiagnostics() { var workspace = new AdhocWorkspace(); var project = workspace.AddProject( ProjectInfo.Create( ProjectId.CreateNewId(), VersionStamp.Create(), "CSharpProject", "CSharpProject", LanguageNames.CSharp)); var document = workspace.AddDocument(project.Id, "Empty.cs", SourceText.From("")); // create listener/service/analyzer var listener = new AsynchronousOperationListener(); var service = new MyDiagnosticAnalyzerService(new OpenFileOnlyAnalyzer(), listener); var analyzer = service.CreateIncrementalAnalyzer(workspace); // listen to events service.DiagnosticsUpdated += (s, a) => { if (workspace.IsDocumentOpen(a.DocumentId)) { // check the diagnostics are reported Assert.Equal(document.Id, a.DocumentId); Assert.Equal(1, a.Diagnostics.Length); Assert.Equal(OpenFileOnlyAnalyzer.s_syntaxRule.Id, a.Diagnostics[0].Id); } if (a.DocumentId == document.Id && !workspace.IsDocumentOpen(a.DocumentId)) { // check the diagnostics reported are cleared Assert.Equal(0, a.Diagnostics.Length); } }; // open document workspace.OpenDocument(document.Id); await analyzer.DocumentOpenAsync(document, CancellationToken.None).ConfigureAwait(false); // cause analysis await RunAllAnalysisAsync(analyzer, document).ConfigureAwait(false); // close document workspace.CloseDocument(document.Id); await analyzer.DocumentCloseAsync(document, CancellationToken.None).ConfigureAwait(false); await RunAllAnalysisAsync(analyzer, document).ConfigureAwait(false); // wait for all events to raised await listener.CreateWaitTask().ConfigureAwait(false); }
public void TestOpenCloseDocument() { var pid = ProjectId.CreateNewId(); var text = SourceText.From("public class C { }"); var version = VersionStamp.Create(); var docInfo = DocumentInfo.Create(DocumentId.CreateNewId(pid), "c.cs", loader: TextLoader.From(TextAndVersion.Create(text, version))); var projInfo = ProjectInfo.Create( pid, version: VersionStamp.Default, name: "TestProject", assemblyName: "TestProject.dll", language: LanguageNames.CSharp, documents: new[] { docInfo }); using (var ws = new AdhocWorkspace()) { ws.AddProject(projInfo); SourceText currentText; VersionStamp currentVersion; var doc = ws.CurrentSolution.GetDocument(docInfo.Id); Assert.Equal(false, doc.TryGetText(out currentText)); ws.OpenDocument(docInfo.Id); doc = ws.CurrentSolution.GetDocument(docInfo.Id); Assert.Equal(true, doc.TryGetText(out currentText)); Assert.Equal(true, doc.TryGetTextVersion(out currentVersion)); Assert.Same(text, currentText); Assert.Equal(version, currentVersion); ws.CloseDocument(docInfo.Id); doc = ws.CurrentSolution.GetDocument(docInfo.Id); Assert.Equal(false, doc.TryGetText(out currentText)); } }