Files
RobustToolbox/Robust.UnitTesting/Client/UserInterface/StylesheetTest.cs
T

138 lines
4.8 KiB
C#

using NUnit.Framework;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Shared.IoC;
namespace Robust.UnitTesting.Client.UserInterface
{
[TestFixture]
public sealed class StylesheetTest : RobustUnitTest
{
public override UnitTestProject Project => UnitTestProject.Client;
[OneTimeSetUp]
public void Setup()
{
IoCManager.Resolve<IUserInterfaceManagerInternal>().InitializeTesting();
}
[Test]
public void TestSelectors()
{
var selectorElementLabel = new SelectorElement(typeof(Label), null, null, null);
var label = new Label();
var panel = new PanelContainer {StyleIdentifier = "bar"};
Assert.That(selectorElementLabel.Matches(label), Is.True);
Assert.That(selectorElementLabel.Matches(panel), Is.False);
selectorElementLabel = new SelectorElement(typeof(Label), new[] {"foo"}, null, null);
Assert.That(selectorElementLabel.Matches(label), Is.False);
Assert.That(selectorElementLabel.Matches(panel), Is.False);
Assert.That(label.HasStyleClass("foo"), Is.False);
label.AddStyleClass("foo");
Assert.That(selectorElementLabel.Matches(label), Is.True);
Assert.That(label.HasStyleClass("foo"));
// Make sure it doesn't throw.
label.AddStyleClass("foo");
label.RemoveStyleClass("foo");
Assert.That(selectorElementLabel.Matches(label), Is.False);
Assert.That(label.HasStyleClass("foo"), Is.False);
// Make sure it doesn't throw.
label.RemoveStyleClass("foo");
selectorElementLabel = new SelectorElement(null, null, "bar", null);
Assert.That(selectorElementLabel.Matches(label), Is.False);
Assert.That(selectorElementLabel.Matches(panel), Is.True);
}
[Test]
public void TestStyleProperties()
{
var sheet = new Stylesheet(new[]
{
new StyleRule(new SelectorElement(typeof(Label), null, "baz", null), new[]
{
new StyleProperty("foo", "honk"),
}),
new StyleRule(new SelectorElement(typeof(Label), null, null, null), new[]
{
new StyleProperty("foo", "heh"),
}),
new StyleRule(new SelectorElement(typeof(Label), null, null, null), new[]
{
new StyleProperty("foo", "bar"),
}),
});
var uiMgr = IoCManager.Resolve<IUserInterfaceManager>();
uiMgr.Stylesheet = sheet;
var control = new Label();
uiMgr.StateRoot.AddChild(control);
control.ForceRunStyleUpdate();
control.TryGetStyleProperty("foo", out string? value);
Assert.That(value, Is.EqualTo("bar"));
control.StyleIdentifier = "baz";
control.ForceRunStyleUpdate();
control.TryGetStyleProperty("foo", out value);
Assert.That(value, Is.EqualTo("honk"));
}
[Test]
public void TestStylesheetOverride()
{
var sheetA = new Stylesheet(new[]
{
new StyleRule(SelectorElement.Class("A"), new[] {new StyleProperty("foo", "bar")}),
});
var sheetB = new Stylesheet(new[]
{
new StyleRule(SelectorElement.Class("A"), new[] {new StyleProperty("foo", "honk!")})
});
// Set style sheet to null, property shouldn't exist.
var uiMgr = IoCManager.Resolve<IUserInterfaceManager>();
uiMgr.Stylesheet = null;
var baseControl = new Control();
baseControl.AddStyleClass("A");
var childA = new Control();
childA.AddStyleClass("A");
var childB = new Control();
childB.AddStyleClass("A");
uiMgr.StateRoot.AddChild(baseControl);
baseControl.AddChild(childA);
childA.AddChild(childB);
baseControl.ForceRunStyleUpdate();
Assert.That(baseControl.TryGetStyleProperty("foo", out object? _), Is.False);
uiMgr.RootControl.Stylesheet = sheetA;
childA.Stylesheet = sheetB;
// Assign sheets.
baseControl.ForceRunStyleUpdate();
baseControl.TryGetStyleProperty("foo", out object? value);
Assert.That(value, Is.EqualTo("bar"));
childA.TryGetStyleProperty("foo", out value);
Assert.That(value, Is.EqualTo("honk!"));
childB.TryGetStyleProperty("foo", out value);
Assert.That(value, Is.EqualTo("honk!"));
}
}
}