public async Task Workspace_RoundTrip_Test_Desktop() { using var workspace = CreateWorkspace(); var solution = CreateFullSolution(workspace); var validator = new SerializationValidator(workspace.Services); var scope1 = await validator.AssetStorage.StoreAssetsAsync(solution, CancellationToken.None).ConfigureAwait(false); // recover solution from given snapshot var recovered = await validator.GetSolutionAsync(scope1).ConfigureAwait(false); var solutionObject1 = await validator.GetValueAsync <SolutionStateChecksums>(scope1.SolutionInfo.SolutionChecksum).ConfigureAwait(false); // create new snapshot from recovered solution using var scope2 = await validator.AssetStorage.StoreAssetsAsync(recovered, CancellationToken.None).ConfigureAwait(false); // verify asset created by recovered solution is good var solutionObject2 = await validator.GetValueAsync <SolutionStateChecksums>(scope2.SolutionInfo.SolutionChecksum).ConfigureAwait(false); await validator.VerifyAssetAsync(solutionObject2).ConfigureAwait(false); // verify snapshots created from original solution and recovered solution are same validator.SolutionStateEqual(solutionObject1, solutionObject2); scope1.Dispose(); // recover new solution from recovered solution var roundtrip = await validator.GetSolutionAsync(scope2).ConfigureAwait(false); // create new snapshot from round tripped solution using var scope3 = await validator.AssetStorage.StoreAssetsAsync(roundtrip, CancellationToken.None).ConfigureAwait(false); // verify asset created by rount trip solution is good var solutionObject3 = await validator.GetValueAsync <SolutionStateChecksums>(scope3.SolutionInfo.SolutionChecksum).ConfigureAwait(false); await validator.VerifyAssetAsync(solutionObject3).ConfigureAwait(false); // verify snapshots created from original solution and round trip solution are same. validator.SolutionStateEqual(solutionObject2, solutionObject3); }
public async Task SnapshotWithMissingReferencesTest() { using var workspace = CreateWorkspace(); var project = workspace.CurrentSolution.AddProject("Project", "Project.dll", LanguageNames.CSharp); var metadata = new MissingMetadataReference(); var analyzer = new AnalyzerFileReference(Path.Combine(TempRoot.Root, "missing_reference"), new MissingAnalyzerLoader()); project = project.AddMetadataReference(metadata); project = project.AddAnalyzerReference(analyzer); var validator = new SerializationValidator(workspace.Services); using var snapshot = await validator.AssetStorage.StoreAssetsAsync(project.Solution, CancellationToken.None).ConfigureAwait(false); // this shouldn't throw var recovered = await validator.GetSolutionAsync(snapshot).ConfigureAwait(false); }
public async Task TestMetadataXmlDocComment() { using var tempRoot = new TempRoot(); // get original assembly location var mscorlibLocation = typeof(object).Assembly.Location; // set up dll and xml doc content var tempDir = tempRoot.CreateDirectory(); var tempCorlib = tempDir.CopyFile(mscorlibLocation); var tempCorlibXml = tempDir.CreateFile(Path.ChangeExtension(tempCorlib.Path, "xml")); tempCorlibXml.WriteAllText(@"<?xml version=""1.0"" encoding=""utf-8""?> <doc> <assembly> <name>mscorlib</name> </assembly> <members> <member name=""T:System.Object""> <summary>Supports all classes in the .NET Framework class hierarchy and provides low-level services to derived classes. This is the ultimate base class of all classes in the .NET Framework; it is the root of the type hierarchy.To browse the .NET Framework source code for this type, see the Reference Source.</summary> </member> </members> </doc>"); using var workspace = CreateWorkspace(); var solution = workspace.CurrentSolution .AddProject("Project", "Project.dll", LanguageNames.CSharp) .AddMetadataReference(MetadataReference.CreateFromFile(tempCorlib.Path)) .Solution; var validator = new SerializationValidator(workspace.Services); using var scope = await validator.AssetStorage.StoreAssetsAsync(solution, CancellationToken.None); // recover solution from given snapshot var recovered = await validator.GetSolutionAsync(scope); var compilation = await recovered.Projects.First().GetCompilationAsync(CancellationToken.None); var objectType = compilation.GetTypeByMetadataName("System.Object"); var xmlDocComment = objectType.GetDocumentationCommentXml(); Assert.False(string.IsNullOrEmpty(xmlDocComment)); }