using System;
using System.ComponentModel;
using Avalonia.Generators.Compiler;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Avalonia.Generators.Tests.Views;
using XamlX;
using XamlX.Parsers;
using Xunit;
namespace Avalonia.Generators.Tests;
public class MiniCompilerTests
{
private const string AvaloniaXaml = "";
private const string MiniClass = "namespace Example { public class Valid { public int Foo() => 21; } }";
private const string MiniValidXaml = "";
[Fact]
public void Should_Resolve_Types_From_Simple_Valid_Xaml_Markup()
{
var xaml = XDocumentXamlParser.Parse(MiniValidXaml);
var compilation = CreateBasicCompilation(MiniClass);
MiniCompiler.CreateRoslyn(new RoslynTypeSystem(compilation)).Transform(xaml);
Assert.NotNull(xaml.Root);
}
[Fact]
public void Should_Resolve_Types_From_Simple_Avalonia_Markup()
{
var xaml = XDocumentXamlParser.Parse(AvaloniaXaml);
var compilation = View.CreateAvaloniaCompilation();
MiniCompiler.CreateRoslyn(new RoslynTypeSystem(compilation)).Transform(xaml);
Assert.NotNull(xaml.Root);
}
private static CSharpCompilation CreateBasicCompilation(string source) =>
CSharpCompilation
.Create("BasicLib", options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
.AddReferences(MetadataReference.CreateFromFile(typeof(string).Assembly.Location))
.AddReferences(MetadataReference.CreateFromFile(typeof(IServiceProvider).Assembly.Location))
.AddReferences(MetadataReference.CreateFromFile(typeof(ITypeDescriptorContext).Assembly.Location))
.AddReferences(MetadataReference.CreateFromFile(typeof(ISupportInitialize).Assembly.Location))
.AddReferences(MetadataReference.CreateFromFile(typeof(TypeConverterAttribute).Assembly.Location))
.AddSyntaxTrees(CSharpSyntaxTree.ParseText(source));
}