csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.6 KiB
59 lines
2.6 KiB
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 = "<TextBlock xmlns='clr-namespace:Avalonia.Controls;assembly=Avalonia' />";
|
|
private const string MiniClass = "namespace Example { public class Valid { public int Foo() => 21; } }";
|
|
private const string MiniInvalidXaml = "<Invalid xmlns='clr-namespace:Example;assembly=Example' />";
|
|
private const string MiniValidXaml = "<Valid xmlns='clr-namespace:Example;assembly=Example' />";
|
|
|
|
[Fact]
|
|
public void Should_Resolve_Types_From_Simple_Valid_Xaml_Markup()
|
|
{
|
|
var xaml = XDocumentXamlParser.Parse(MiniValidXaml);
|
|
var compilation = CreateBasicCompilation(MiniClass);
|
|
MiniCompiler.CreateDefault(new RoslynTypeSystem(compilation)).Transform(xaml);
|
|
|
|
Assert.NotNull(xaml.Root);
|
|
}
|
|
|
|
[Fact]
|
|
public void Should_Throw_When_Unable_To_Resolve_Types_From_Simple_Invalid_Markup()
|
|
{
|
|
var xaml = XDocumentXamlParser.Parse(MiniInvalidXaml);
|
|
var compilation = CreateBasicCompilation(MiniClass);
|
|
var compiler = MiniCompiler.CreateDefault(new RoslynTypeSystem(compilation));
|
|
|
|
Assert.Throws<XamlParseException>(() => compiler.Transform(xaml));
|
|
}
|
|
|
|
[Fact]
|
|
public void Should_Resolve_Types_From_Simple_Avalonia_Markup()
|
|
{
|
|
var xaml = XDocumentXamlParser.Parse(AvaloniaXaml);
|
|
var compilation = View.CreateAvaloniaCompilation();
|
|
MiniCompiler.CreateDefault(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));
|
|
}
|