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.
67 lines
3.1 KiB
67 lines
3.1 KiB
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Avalonia.Generators.Common;
|
|
using Avalonia.Generators.Common.Domain;
|
|
using Avalonia.Generators.Compiler;
|
|
using Avalonia.Generators.NameGenerator;
|
|
using Avalonia.Generators.Tests.InitializeComponent.GeneratedInitializeComponent;
|
|
using Avalonia.Generators.Tests.Views;
|
|
using Microsoft.CodeAnalysis.CSharp;
|
|
using Xunit;
|
|
|
|
namespace Avalonia.Generators.Tests.InitializeComponent;
|
|
|
|
public class InitializeComponentTests
|
|
{
|
|
[Theory]
|
|
[InlineData(InitializeComponentCode.NamedControl, View.NamedControl, false)]
|
|
[InlineData(InitializeComponentCode.NamedControls, View.NamedControls, false)]
|
|
[InlineData(InitializeComponentCode.XNamedControl, View.XNamedControl, false)]
|
|
[InlineData(InitializeComponentCode.XNamedControls, View.XNamedControls, false)]
|
|
[InlineData(InitializeComponentCode.NoNamedControls, View.NoNamedControls, false)]
|
|
[InlineData(InitializeComponentCode.CustomControls, View.CustomControls, false)]
|
|
[InlineData(InitializeComponentCode.DataTemplates, View.DataTemplates, false)]
|
|
[InlineData(InitializeComponentCode.SignUpView, View.SignUpView, false)]
|
|
[InlineData(InitializeComponentCode.FieldModifier, View.FieldModifier, false)]
|
|
[InlineData(InitializeComponentCode.AttachedPropsWithDevTools, View.AttachedProps, true)]
|
|
[InlineData(InitializeComponentCode.AttachedProps, View.AttachedProps, false)]
|
|
[InlineData(InitializeComponentCode.ControlWithoutWindow, View.ControlWithoutWindow, false)]
|
|
public async Task Should_Generate_FindControl_Refs_From_Avalonia_Markup_File(
|
|
string expectation,
|
|
string markup,
|
|
bool devToolsMode)
|
|
{
|
|
var excluded = devToolsMode ? null : "Avalonia.Diagnostics";
|
|
|
|
// Step 1: parse XAML as xml nodes, without any type information.
|
|
var classResolver = new XamlXViewResolver(MiniCompiler.CreateNoop());
|
|
|
|
var xaml = await View.Load(markup);
|
|
var classInfo = classResolver.ResolveView(xaml, CancellationToken.None);
|
|
Assert.NotNull(classInfo);
|
|
var nameResolver = new XamlXNameResolver();
|
|
var names = nameResolver.ResolveXmlNames(classInfo.Xaml, CancellationToken.None);
|
|
|
|
// Step 2: use compilation context to resolve types
|
|
var compilation =
|
|
View.CreateAvaloniaCompilation(excluded)
|
|
.WithCustomTextBox();
|
|
var resolvedNames = names.ResolveNames(compilation, nameResolver).ToArray();
|
|
|
|
// Step 3: run generator
|
|
var generator = new InitializeComponentCodeGenerator(devToolsMode);
|
|
var generatorVersion = typeof(InitializeComponentCodeGenerator).Assembly.GetName().Version?.ToString();
|
|
|
|
var code = generator
|
|
.GenerateCode("SampleView", "Sample.App", resolvedNames)
|
|
.Replace("\r", string.Empty);
|
|
|
|
var expected = (await InitializeComponentCode.Load(expectation))
|
|
.Replace("\r", string.Empty)
|
|
.Replace("$GeneratorVersion", generatorVersion);
|
|
|
|
CSharpSyntaxTree.ParseText(code);
|
|
Assert.Equal(expected, code);
|
|
}
|
|
}
|
|
|