using System; namespace Prism.UnitTests { public class SrgbColorTests : UnitTestSharp.TestFixture { public class CtorTests : UnitTestSharp.TestFixture { public void AssignsAllFourChannels() { var color = new SrgbColor(0.1, 0.2, 0.3, 0.4); CheckEqual(0.1, color.Red); CheckEqual(0.2, color.Green); CheckEqual(0.3, color.Blue); CheckEqual(0.4, color.Alpha); } public void WithoutAlpha_IsOpaque() { CheckEqual(1.0, new SrgbColor(0.1, 0.2, 0.3).Alpha); } public void ChannelsBelowZero_LimitToZero() { var color = new SrgbColor(-1, -0.5, -2, -3); CheckEqual(new SrgbColor(0, 0, 0, 0), color); } public void ChannelsAboveOne_LimitToOne() { var color = new SrgbColor(1.5, 2, 3, 4); CheckEqual(new SrgbColor(1, 1, 1, 1), color); } public void NaNChannel_Throws() { CheckThrow(typeof(ArgumentOutOfRangeException)); new SrgbColor(0, double.NaN, 0); } public void InfiniteChannel_Throws() { CheckThrow(typeof(ArgumentOutOfRangeException)); new SrgbColor(0, 0, 0, double.PositiveInfinity); } } public class FromColorTests : UnitTestSharp.TestFixture { public void DividesEveryChannelBy255() { SrgbColor color = SrgbColor.FromColor(Color.FromArgb(51, 255, 102, 0)); CheckEqual(new SrgbColor(1, 0.4, 0, 0.2), color); } } public class ToColorTests : UnitTestSharp.TestFixture { public void RoundsEveryChannelToTheNearestByte() { var color = new SrgbColor(100.4 / 255, 100.6 / 255, 0, 200.6 / 255); CheckEqual(Color.FromArgb(201, 100, 101, 0), color.ToColor()); } public void UndoesFromColor() { Color original = Color.FromArgb(77, 12, 34, 56); CheckEqual(original, SrgbColor.FromColor(original).ToColor()); } } public class EqualityTests : UnitTestSharp.TestFixture { public void SameChannels_AreEqual() { CheckTrue(new SrgbColor(0.1, 0.2, 0.3, 0.4).Equals(new SrgbColor(0.1, 0.2, 0.3, 0.4))); CheckTrue(new SrgbColor(0.1, 0.2, 0.3, 0.4) == new SrgbColor(0.1, 0.2, 0.3, 0.4)); CheckFalse(new SrgbColor(0.1, 0.2, 0.3, 0.4) != new SrgbColor(0.1, 0.2, 0.3, 0.4)); } public void AnyDifferentChannel_IsNotEqual() { var baseColor = new SrgbColor(0.1, 0.2, 0.3, 0.4); CheckFalse(baseColor.Equals(new SrgbColor(0.9, 0.2, 0.3, 0.4))); CheckFalse(baseColor.Equals(new SrgbColor(0.1, 0.9, 0.3, 0.4))); CheckFalse(baseColor.Equals(new SrgbColor(0.1, 0.2, 0.9, 0.4))); CheckFalse(baseColor.Equals(new SrgbColor(0.1, 0.2, 0.3, 0.9))); CheckTrue(baseColor != new SrgbColor(0.1, 0.2, 0.3, 0.9)); } public void BoxedColor_IsEqualToTheSameColor() { CheckTrue(new SrgbColor(0.1, 0.2, 0.3).Equals((object)new SrgbColor(0.1, 0.2, 0.3))); } public void ANonSrgbColor_IsNotEqual() { CheckFalse(new SrgbColor(0.1, 0.2, 0.3).Equals("color")); } public void EqualColors_HaveTheSameHashCode() { CheckEqual(new SrgbColor(0.1, 0.2, 0.3, 0.4).GetHashCode(), new SrgbColor(0.1, 0.2, 0.3, 0.4).GetHashCode()); } } } }