Files
RobustToolbox/Robust.UnitTesting/Shared/ColorUtils_Test.cs
2022-02-05 19:31:58 +01:00

60 lines
2.4 KiB
C#

using Robust.Shared.Maths;
using NUnit.Framework;
namespace Robust.UnitTesting.Shared
{
[Parallelizable(ParallelScope.All | ParallelScope.Fixtures)]
[TestFixture]
public sealed class ColorUtils_Test
{
[Test]
public void TestInterpolateBetween()
{
var black = Color.Black;
var white = Color.White;
Assert.That(Color.InterpolateBetween(black, white, 1), Is.EqualTo(white));
Assert.That(Color.InterpolateBetween(black, white, 0), Is.EqualTo(black));
// Should be grey but floating points hate us so...
// The byte conversion shouldn't have issues because the error marging should be small enough.
var grey = Color.InterpolateBetween(black, white, 0.5f);
Assert.That(grey.RByte, Is.EqualTo(127));
Assert.That(grey.GByte, Is.EqualTo(127));
Assert.That(grey.BByte, Is.EqualTo(127));
}
[Test]
public void TestWithAlpha()
{
Assert.That(Color.White.WithAlpha(128), Is.EqualTo(new Color(255, 255, 255, 128)));
Assert.That(Color.White.WithAlpha(0.5f), Is.EqualTo(new Color(1, 1, 1, 0.5f)));
}
[Test]
public void TestFromHex()
{
// Test fallback.
Assert.That(Color.FromHex("honk", Color.AliceBlue), Is.EqualTo(Color.AliceBlue));
Assert.That(() => Color.FromHex("honk"), Throws.ArgumentException);
Assert.That(() => Color.FromHex("#FFFFFFFF00"), Throws.ArgumentException);
Assert.That(Color.FromHex("#FFFFFF"), Is.EqualTo(Color.White));
Assert.That(Color.FromHex("#FFFFFFFF"), Is.EqualTo(Color.White));
Assert.That(Color.FromHex("#FFFFFF69"), Is.EqualTo(Color.White.WithAlpha(0x69)));
Assert.That(Color.FromHex("#FFF"), Is.EqualTo(Color.White));
Assert.That(Color.FromHex("#FFF8"), Is.EqualTo(Color.White.WithAlpha(0x88)));
Assert.That(Color.FromHex("#ABCDEF"), Is.EqualTo(new Color(0xAB, 0xCD, 0xEF)));
}
[Test]
public void TestByteParts()
{
var color = new Color(23, 38, 18, 20);
Assert.That(color.RByte, Is.EqualTo(23));
Assert.That(color.GByte, Is.EqualTo(38));
Assert.That(color.BByte, Is.EqualTo(18));
Assert.That(color.AByte, Is.EqualTo(20));
}
}
}