InitializeComponentTests.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System.Threading.Tasks;
  2. using Avalonia.Generators.Common;
  3. using Avalonia.Generators.Compiler;
  4. using Avalonia.Generators.NameGenerator;
  5. using Avalonia.Generators.Tests.InitializeComponent.GeneratedInitializeComponent;
  6. using Avalonia.Generators.Tests.OnlyProperties.GeneratedCode;
  7. using Avalonia.Generators.Tests.Views;
  8. using Microsoft.CodeAnalysis.CSharp;
  9. using Xunit;
  10. namespace Avalonia.Generators.Tests.InitializeComponent;
  11. public class InitializeComponentTests
  12. {
  13. [Theory]
  14. [InlineData(InitializeComponentCode.NamedControl, View.NamedControl, false)]
  15. [InlineData(InitializeComponentCode.NamedControls, View.NamedControls, false)]
  16. [InlineData(InitializeComponentCode.XNamedControl, View.XNamedControl, false)]
  17. [InlineData(InitializeComponentCode.XNamedControls, View.XNamedControls, false)]
  18. [InlineData(InitializeComponentCode.NoNamedControls, View.NoNamedControls, false)]
  19. [InlineData(InitializeComponentCode.CustomControls, View.CustomControls, false)]
  20. [InlineData(InitializeComponentCode.DataTemplates, View.DataTemplates, false)]
  21. [InlineData(InitializeComponentCode.SignUpView, View.SignUpView, false)]
  22. [InlineData(InitializeComponentCode.FieldModifier, View.FieldModifier, false)]
  23. [InlineData(InitializeComponentCode.AttachedPropsWithDevTools, View.AttachedProps, true)]
  24. [InlineData(InitializeComponentCode.AttachedProps, View.AttachedProps, false)]
  25. [InlineData(InitializeComponentCode.ControlWithoutWindow, View.ControlWithoutWindow, true)]
  26. [InlineData(InitializeComponentCode.ControlWithoutWindow, View.ControlWithoutWindow, false)]
  27. public async Task Should_Generate_FindControl_Refs_From_Avalonia_Markup_File(
  28. string expectation,
  29. string markup,
  30. bool devToolsMode)
  31. {
  32. var excluded = devToolsMode ? null : "Avalonia.Diagnostics";
  33. var compilation =
  34. View.CreateAvaloniaCompilation(excluded)
  35. .WithCustomTextBox();
  36. var types = new RoslynTypeSystem(compilation);
  37. var classResolver = new XamlXViewResolver(
  38. types,
  39. MiniCompiler.CreateDefault(
  40. new RoslynTypeSystem(compilation),
  41. MiniCompiler.AvaloniaXmlnsDefinitionAttribute));
  42. var xaml = await View.Load(markup);
  43. var classInfo = classResolver.ResolveView(xaml);
  44. var nameResolver = new XamlXNameResolver();
  45. var names = nameResolver.ResolveNames(classInfo.Xaml);
  46. var generator = new InitializeComponentCodeGenerator(types);
  47. var code = generator
  48. .GenerateCode("SampleView", "Sample.App", classInfo.XamlType, names)
  49. .Replace("\r", string.Empty);
  50. var expected = await InitializeComponentCode.Load(expectation);
  51. CSharpSyntaxTree.ParseText(code);
  52. Assert.Equal(expected.Replace("\r", string.Empty), code);
  53. }
  54. }