using UnitTestSharp; namespace Prism.UnitTests { public class TintColorTests : TestFixture { public class ToArgbTests : TestFixture { public void MatchesTheColorItTintsBy() { var tint = new TintColor(0.1, 0.4, 0.7, 0.9); CheckEqual(((Color)tint).ToArgb(), tint.ToArgb()); } public void Default_IsOpaqueWhite() { CheckEqual(unchecked((int)0xFFFFFFFF), default(TintColor).ToArgb()); } public void FullyTransparentBlack_IsZero() { CheckEqual(0, new TintColor(0, 0, 0, 0).ToArgb()); } } public class IsWhiteTests : TestFixture { public void Default_IsWhite() { CheckTrue(default(TintColor).IsWhite); } public void OpaqueWhite_IsWhite() { CheckTrue(new TintColor(1, 1, 1, 1).IsWhite); } public void AnyOtherColor_IsNot() { CheckFalse(new TintColor(1, 1, 0.9, 1).IsWhite); CheckFalse(new TintColor(1, 1, 1, 0.9).IsWhite); CheckFalse(new TintColor(0.9, 1, 1, 1).IsWhite); CheckFalse(new TintColor(1, 0.9, 1, 1).IsWhite); } } public class ApplyTests : TestFixture { public void White_LeavesTheColorAlone() { CheckEqual(unchecked((int)0x80123456), default(TintColor).Apply(unchecked((int)0x80123456))); } public void MultipliesEachChannel() { var tint = new TintColor(1, 0, 0.5, 1); CheckEqual(unchecked((int)0xFFFF0040), tint.Apply(unchecked((int)0xFFFFFF80))); } public void MultipliesTheAlphaToo() { var tint = new TintColor(1, 1, 1, 0.5); CheckEqual(unchecked((int)0x7FFFFFFF), tint.Apply(unchecked((int)0xFFFFFFFF))); } public void TransparentBlack_ClearsEverything() { CheckEqual(0, new TintColor(0, 0, 0, 0).Apply(unchecked((int)0xFFFFFFFF))); } public void RoundsToTheNearestValue() { var tint = new TintColor(0.5, 0.5, 0.5, 1); CheckEqual(unchecked((int)0xFF010101), tint.Apply(unchecked((int)0xFF020202))); } } public class MultiplyOperatorTests : TestFixture { public void WhiteTimesATint_IsThatTint() { var tint = new TintColor(1, 0.5, 0, 1); CheckEqual(tint.ToArgb(), (default(TintColor) * tint).ToArgb()); } public void ATintTimesWhite_IsThatTint() { var tint = new TintColor(1, 0.5, 0, 1); CheckEqual(tint.ToArgb(), (tint * default(TintColor)).ToArgb()); } public void MultipliesEachChannel() { var product = new TintColor(1, 1, 0, 1) * new TintColor(1, 0, 1, 0.5); CheckEqual(unchecked((int)0x7FFF0000), product.ToArgb()); } public void MatchesApplyingBothOneAfterTheOther() { var first = new TintColor(0.3, 0.9, 0.5, 0.8); var second = new TintColor(0.7, 0.2, 1, 0.6); int argb = unchecked((int)0xFFC8A064); CheckEqual(second.Apply(first.Apply(argb)), (first * second).Apply(argb)); } } public class CtorTests : TestFixture { public void WithoutAlpha_IsOpaque() { CheckEqual(new TintColor(1, 0.5, 0, 1).ToArgb(), new TintColor(1, 0.5, 0).ToArgb()); } public void WithAlpha_TintsEachChannelByItsFraction() { var tint = new TintColor(1, 0, 0.25, 0.5); CheckEqual(unchecked((int)0x7FFF0040), tint.Apply(unchecked((int)0xFFFFFFFF))); } public void AFractionOutsideZeroToOne_Throws() { CheckThrow(typeof(System.ArgumentOutOfRangeException)); new TintColor(1.5, 0, 0); } public void NaNFraction_Throws() { CheckThrow(typeof(System.ArgumentOutOfRangeException)); new TintColor(0, 0, 0, double.NaN); } } public class ColorConversionTests : TestFixture { public void FromColor_TintsByThatColor() { TintColor tint = Color.FromArgb(128, 255, 0, 64); CheckEqual(unchecked((int)0x80FF0040), tint.ToArgb()); } public void FromColor_OfOpaqueWhite_IsWhite() { TintColor tint = Colors.White; CheckTrue(tint.IsWhite); } public void ToColor_UndoesFromColor() { Color original = Color.FromArgb(77, 12, 34, 56); TintColor tint = original; CheckEqual(original, (Color)tint); } } } }