BoxShadowsTests.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using Avalonia.Media;
  2. using Xunit;
  3. namespace Avalonia.Base.UnitTests.Media
  4. {
  5. public class BoxShadowsTests
  6. {
  7. [Theory]
  8. [InlineData("none")]
  9. [InlineData(" none ")]
  10. public void Parse_None_ReturnsEmpty(string input)
  11. {
  12. var bs = BoxShadows.Parse(input);
  13. Assert.Equal(0, bs.Count);
  14. Assert.Equal(default, bs);
  15. Assert.Equal("none", bs.ToString());
  16. }
  17. [Theory]
  18. [InlineData("0 0 5 0 #FF0000")]
  19. [InlineData("10 20 30 5 rgba(0,0,0,0.5)")]
  20. [InlineData("10 20 30 5 rgba(0, 0, 0, 0.5)")]
  21. [InlineData(" 10 20 30 5 rgba(0, 0, 0, 0.5) ")]
  22. public void Parse_SingleShadow_ToString_RoundTrip(string input)
  23. {
  24. var bs = BoxShadows.Parse(input);
  25. Assert.Equal(1, bs.Count);
  26. var str = bs.ToString();
  27. var reparsed = BoxShadows.Parse(str);
  28. Assert.Equal(bs, reparsed);
  29. }
  30. [Theory]
  31. [InlineData("0 0 5 0 #FF0000", 10.0)]
  32. [InlineData("0 0 10 0 rgba(0,0,0,0.5)", 20.0)]
  33. public void TransformBounds_IncludesShadowExpansion(string input, double minExpansion)
  34. {
  35. var bs = BoxShadows.Parse(input);
  36. var rect = new Rect(0, 0, 100, 100);
  37. var transformed = bs.TransformBounds(rect);
  38. Assert.True(transformed.Width >= rect.Width + minExpansion);
  39. Assert.True(transformed.Height >= rect.Height + minExpansion);
  40. }
  41. [Theory]
  42. [InlineData("5 5 10 0 rgba(10,20,30,0.4)")]
  43. [InlineData("5 5 10 0 hsla(10,20%,30%,0.4)")]
  44. [InlineData("5 5 10 0 hsva(10,20%,30%,0.4)")]
  45. public void Parse_ColorFunction_IsHandled(string input)
  46. {
  47. var bs = BoxShadows.Parse(input);
  48. Assert.Equal(1, bs.Count);
  49. var reparsed = BoxShadows.Parse(bs.ToString());
  50. Assert.Equal(bs, reparsed);
  51. }
  52. [Theory]
  53. [InlineData("1 2 3 0 #FF0000", 1)]
  54. [InlineData("10 20 30 5 rgba(0,0,0,0.5)", 1)]
  55. [InlineData("1 2 3 0 #FF0000, 1 2 3 0 #FF0000", 2)]
  56. [InlineData("10 20 30 5 rgba(0,0,0,0.5), 1 2 3 0 #FF0000", 2)]
  57. [InlineData("10 20 30 5 rgba(0,0,0,0.5), 10 20 30 5 rgba(0,0,0,0.5)", 2)]
  58. [InlineData("10 20 30 5 rgba(0,0,0,0.5), 10 20 30 5 rgba(0,0,0,0.5), 10 20 30 5 rgba(0,0,0,0.5)", 3)]
  59. [InlineData("10 20 30 5 rgba(0,0,0,0.5), 10 20 30 5 #ffffff, 10 20 30 5 Red", 3)]
  60. [InlineData(" 10 20 30 5 rgba(0, 0, 0, 0.5), 10 20 30 5 rgba(0, 0, 0, 0.5), 10 20 30 5 rgba(0, 0, 0, 0.5) ", 3)]
  61. [InlineData(" 10 20 30 5 rgba(0, 0, 0, 0.5), 10 20 30 5 #ffffff, 10 20 30 5 Red ", 3)]
  62. public void Parse_MultipleShadows(string input, int count)
  63. {
  64. var bs = BoxShadows.Parse(input);
  65. Assert.Equal(count, bs.Count);
  66. var reparsed = BoxShadows.Parse(bs.ToString());
  67. Assert.Equal(bs, reparsed);
  68. }
  69. }
  70. }