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.
88 lines
3.0 KiB
88 lines
3.0 KiB
using System;
|
|
using Avalonia.Controls;
|
|
using Avalonia.Markup.Parsers;
|
|
using Avalonia.UnitTests;
|
|
using Xunit;
|
|
|
|
namespace Avalonia.Markup.UnitTests.Parsers
|
|
{
|
|
public class SelectorParserTests : ScopedTestBase
|
|
{
|
|
static SelectorParserTests()
|
|
{
|
|
//Ensure the attached properties are registered before run tests
|
|
System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(typeof(Grid).TypeHandle);
|
|
System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(typeof(Auth).TypeHandle);
|
|
}
|
|
|
|
class Auth
|
|
{
|
|
public readonly static AttachedProperty<string> NameProperty =
|
|
AvaloniaProperty.RegisterAttached<Auth, AvaloniaObject, string>("Name");
|
|
|
|
public static string GetName(AvaloniaObject avaloniaObject) =>
|
|
avaloniaObject.GetValue(NameProperty);
|
|
|
|
public static void SetName(AvaloniaObject avaloniaObject, string value) =>
|
|
avaloniaObject.SetValue(NameProperty, value);
|
|
}
|
|
|
|
[Fact]
|
|
public void Parses_Boolean_Property_Selector()
|
|
{
|
|
var target = new SelectorParser((ns, type) => typeof(TextBlock));
|
|
var result = target.Parse("TextBlock[IsPointerOver=True]");
|
|
}
|
|
|
|
[Fact]
|
|
public void Parses_AttacchedProperty_Selector_With_Namespace()
|
|
{
|
|
var target = new SelectorParser((ns, type) =>
|
|
{
|
|
return (ns, type) switch
|
|
{
|
|
("", nameof(TextBlock)) => typeof(TextBlock),
|
|
("l",nameof(Auth)) => typeof(Auth),
|
|
_ => null
|
|
};
|
|
});
|
|
var result = target.Parse("TextBlock[(l|Auth.Name)=Admin]");
|
|
}
|
|
|
|
[Fact]
|
|
public void Parses_AttacchedProperty_Selector()
|
|
{
|
|
var target = new SelectorParser((ns, type) =>
|
|
{
|
|
return (ns, type) switch
|
|
{
|
|
("", nameof(TextBlock)) => typeof(TextBlock),
|
|
("", nameof(Grid)) => typeof(Grid),
|
|
_ => null
|
|
};
|
|
});
|
|
var result = target.Parse("TextBlock[(Grid.Column)=1]");
|
|
}
|
|
|
|
[Fact]
|
|
public void Parses_Comma_Separated_Selectors()
|
|
{
|
|
var target = new SelectorParser((ns, type) => typeof(TextBlock));
|
|
var result = target.Parse("TextBlock, TextBlock:foo");
|
|
}
|
|
|
|
[Fact]
|
|
public void Throws_If_OfType_Type_Not_Found()
|
|
{
|
|
var target = new SelectorParser((ns, type) => null);
|
|
Assert.Throws<InvalidOperationException>(() => target.Parse("NotFound"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Throws_If_Is_Type_Not_Found()
|
|
{
|
|
var target = new SelectorParser((ns, type) => null);
|
|
Assert.Throws<InvalidOperationException>(() => target.Parse(":is(NotFound)"));
|
|
}
|
|
}
|
|
}
|
|
|