A cross-platform UI framework for .NET
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.
 
 
 

162 lines
4.8 KiB

using Avalonia.Data;
using Avalonia.Controls;
using Xunit;
namespace Avalonia.Base.UnitTests
{
public class ClassBindingManagerTests
{
[Fact]
public void GetClassProperty_Should_Return_Same_Instance_For_Same_Class()
{
var property1 = ClassBindingManager.GetClassProperty("Foo");
var property2 = ClassBindingManager.GetClassProperty("Foo");
Assert.Same(property1, property2);
}
[Fact]
public void GetClassProperty_Should_Return_Different_Instances_For_Different_Classes()
{
var property1 = ClassBindingManager.GetClassProperty("Foo");
var property2 = ClassBindingManager.GetClassProperty("Bar");
Assert.NotSame(property1, property2);
}
[Fact]
public void SetClass_Should_Add_Class()
{
var target = new StyledElement();
ClassBindingManager.SetClass(target, "Foo", true);
Assert.Contains("Foo", target.Classes);
}
[Fact]
public void SetClass_Should_Remove_Added_Class()
{
var target = new StyledElement();
ClassBindingManager.SetClass(target, "Foo", true);
ClassBindingManager.SetClass(target, "Foo", false);
Assert.DoesNotContain("Foo", target.Classes);
}
[Fact]
public void SetClasses_Should_Add_Classes()
{
var target = new StyledElement();
ClassBindingManager.SetClasses(target, "Foo Bar");
Assert.Contains("Foo", target.Classes);
Assert.Contains("Bar", target.Classes);
}
[Fact]
public void SetClasses_Should_Remove_Added_Classes()
{
var target = new StyledElement();
ClassBindingManager.SetClasses(target, "Foo Bar");
ClassBindingManager.SetClasses(target, "");
Assert.Empty(target.Classes);
}
[Fact]
public void SetClasses_Should_Keep_PseudoClasses()
{
var target = new StyledElement();
((IPseudoClasses)target.Classes).Add(":Baz");
ClassBindingManager.SetClasses(target, "Foo");
Assert.Equal(new[] { ":Baz", "Foo" }, target.Classes);
}
[Fact]
public void SetClass_Should_Override_SetClasses_Adding()
{
var target = new StyledElement();
ClassBindingManager.SetClasses(target, "Foo Bar");
ClassBindingManager.SetClass(target, "Foo", false);
Assert.Contains("Bar", target.Classes);
Assert.DoesNotContain("Foo", target.Classes);
}
[Fact]
public void SetClass_Should_Override_SetClasses_Adding_When_Set_Before()
{
var target = new StyledElement();
ClassBindingManager.SetClass(target, "Foo", false);
ClassBindingManager.SetClasses(target, "Foo Bar");
Assert.Contains("Bar", target.Classes);
Assert.DoesNotContain("Foo", target.Classes);
}
[Fact]
public void SetClass_Should_Override_SetClasses_Removing()
{
var target = new StyledElement();
ClassBindingManager.SetClasses(target, "Bar");
ClassBindingManager.SetClass(target, "Foo", true);
Assert.Contains("Foo", target.Classes);
Assert.Contains("Bar", target.Classes);
}
[Fact]
public void SetClass_Should_Override_SetClasses_Removing_When_Set_Before()
{
var target = new StyledElement();
ClassBindingManager.SetClass(target, "Foo", true);
ClassBindingManager.SetClasses(target, "Bar");
Assert.Contains("Foo", target.Classes);
Assert.Contains("Bar", target.Classes);
}
[Fact]
public void BindClass_Should_Update_Classes()
{
var target = new StyledElement();
using var d = ClassBindingManager.BindClass(target, "Bar", new Binding { Source = true }, null);
Assert.Contains("Bar", target.Classes);
}
[Fact]
public void BindClasses_Should_Update_Classes()
{
var target = new StyledElement();
using var d = ClassBindingManager.BindClasses(target, new Binding { Source = "Foo Bar" }, null);
Assert.Equal("Foo Bar", ClassBindingManager.GetClasses(target));
Assert.Contains("Foo", target.Classes);
Assert.Contains("Bar", target.Classes);
}
[Fact]
public void IsClassesBindingProperty_Should_Detect_Classes_Properties()
{
var prop = ClassBindingManager.GetClassProperty("Foo");
var result = ClassBindingManager.IsClassesBindingProperty(prop, out var name);
Assert.True(result);
Assert.Equal("Foo", name);
}
}
}