MiniCompilerTests.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System;
  2. using System.ComponentModel;
  3. using Avalonia.Generators.Compiler;
  4. using Microsoft.CodeAnalysis;
  5. using Microsoft.CodeAnalysis.CSharp;
  6. using Avalonia.Generators.Tests.Views;
  7. using XamlX;
  8. using XamlX.Parsers;
  9. using Xunit;
  10. namespace Avalonia.Generators.Tests;
  11. public class MiniCompilerTests
  12. {
  13. private const string AvaloniaXaml = "<TextBlock xmlns='clr-namespace:Avalonia.Controls;assembly=Avalonia' />";
  14. private const string MiniClass = "namespace Example { public class Valid { public int Foo() => 21; } }";
  15. private const string MiniValidXaml = "<Valid xmlns='clr-namespace:Example;assembly=Example' />";
  16. [Fact]
  17. public void Should_Resolve_Types_From_Simple_Valid_Xaml_Markup()
  18. {
  19. var xaml = XDocumentXamlParser.Parse(MiniValidXaml);
  20. var compilation = CreateBasicCompilation(MiniClass);
  21. MiniCompiler.CreateRoslyn(new RoslynTypeSystem(compilation)).Transform(xaml);
  22. Assert.NotNull(xaml.Root);
  23. }
  24. [Fact]
  25. public void Should_Resolve_Types_From_Simple_Avalonia_Markup()
  26. {
  27. var xaml = XDocumentXamlParser.Parse(AvaloniaXaml);
  28. var compilation = View.CreateAvaloniaCompilation();
  29. MiniCompiler.CreateRoslyn(new RoslynTypeSystem(compilation)).Transform(xaml);
  30. Assert.NotNull(xaml.Root);
  31. }
  32. private static CSharpCompilation CreateBasicCompilation(string source) =>
  33. CSharpCompilation
  34. .Create("BasicLib", options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
  35. .AddReferences(MetadataReference.CreateFromFile(typeof(string).Assembly.Location))
  36. .AddReferences(MetadataReference.CreateFromFile(typeof(IServiceProvider).Assembly.Location))
  37. .AddReferences(MetadataReference.CreateFromFile(typeof(ITypeDescriptorContext).Assembly.Location))
  38. .AddReferences(MetadataReference.CreateFromFile(typeof(ISupportInitialize).Assembly.Location))
  39. .AddReferences(MetadataReference.CreateFromFile(typeof(TypeConverterAttribute).Assembly.Location))
  40. .AddSyntaxTrees(CSharpSyntaxTree.ParseText(source));
  41. }