MiniCompilerTests.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 MiniInvalidXaml = "<Invalid xmlns='clr-namespace:Example;assembly=Example' />";
  16. private const string MiniValidXaml = "<Valid xmlns='clr-namespace:Example;assembly=Example' />";
  17. [Fact]
  18. public void Should_Resolve_Types_From_Simple_Valid_Xaml_Markup()
  19. {
  20. var xaml = XDocumentXamlParser.Parse(MiniValidXaml);
  21. var compilation = CreateBasicCompilation(MiniClass);
  22. MiniCompiler.CreateDefault(new RoslynTypeSystem(compilation)).Transform(xaml);
  23. Assert.NotNull(xaml.Root);
  24. }
  25. [Fact]
  26. public void Should_Throw_When_Unable_To_Resolve_Types_From_Simple_Invalid_Markup()
  27. {
  28. var xaml = XDocumentXamlParser.Parse(MiniInvalidXaml);
  29. var compilation = CreateBasicCompilation(MiniClass);
  30. var compiler = MiniCompiler.CreateDefault(new RoslynTypeSystem(compilation));
  31. Assert.Throws<XamlParseException>(() => compiler.Transform(xaml));
  32. }
  33. [Fact]
  34. public void Should_Resolve_Types_From_Simple_Avalonia_Markup()
  35. {
  36. var xaml = XDocumentXamlParser.Parse(AvaloniaXaml);
  37. var compilation = View.CreateAvaloniaCompilation();
  38. MiniCompiler.CreateDefault(new RoslynTypeSystem(compilation)).Transform(xaml);
  39. Assert.NotNull(xaml.Root);
  40. }
  41. private static CSharpCompilation CreateBasicCompilation(string source) =>
  42. CSharpCompilation
  43. .Create("BasicLib", options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
  44. .AddReferences(MetadataReference.CreateFromFile(typeof(string).Assembly.Location))
  45. .AddReferences(MetadataReference.CreateFromFile(typeof(IServiceProvider).Assembly.Location))
  46. .AddReferences(MetadataReference.CreateFromFile(typeof(ITypeDescriptorContext).Assembly.Location))
  47. .AddReferences(MetadataReference.CreateFromFile(typeof(ISupportInitialize).Assembly.Location))
  48. .AddReferences(MetadataReference.CreateFromFile(typeof(TypeConverterAttribute).Assembly.Location))
  49. .AddSyntaxTrees(CSharpSyntaxTree.ParseText(source));
  50. }