ClipboardControllerTests.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using System.IO;
  2. using System.Linq;
  3. using System.Windows;
  4. using System.Windows.Media;
  5. using System.Windows.Media.Imaging;
  6. using PixiEditor.Models.Controllers;
  7. using PixiEditor.Models.DataHolders;
  8. using PixiEditor.Models.Layers;
  9. using PixiEditor.Models.Position;
  10. using SkiaSharp;
  11. using Xunit;
  12. namespace PixiEditorTests.ModelsTests.ControllersTests
  13. {
  14. public class ClipboardControllerTests
  15. {
  16. private const string Text = "Text data";
  17. private readonly SKColor testColor = new SKColor(223, 20, 52);
  18. [StaFact]
  19. public void TestThatClipboardControllerIgnoresNonImageDataInClipboard()
  20. {
  21. Clipboard.Clear();
  22. Clipboard.SetText(Text);
  23. Surface img = ClipboardController.GetImageFromClipboard();
  24. Assert.Null(img);
  25. }
  26. [StaFact]
  27. public void TestThatIsImageInClipboardWorksForDib()
  28. {
  29. Clipboard.Clear();
  30. Clipboard.SetImage(BitmapFactory.New(10, 10));
  31. Assert.True(ClipboardController.IsImageInClipboard());
  32. }
  33. [StaFact]
  34. public void TestThatClipboardControllerSavesImageToClipboard()
  35. {
  36. Layer testLayer = new Layer("test layer", 10, 10);
  37. ClipboardController.CopyToClipboard(new[] { testLayer }, CoordinatesCalculator.RectangleToCoordinates(0, 0, 9, 9).ToArray(), 10, 10);
  38. Assert.True(ClipboardController.IsImageInClipboard());
  39. }
  40. [StaFact]
  41. public void TestThatCopyToClipboardWithSelectionSavesCorrectBitmap()
  42. {
  43. Clipboard.Clear();
  44. Layer testLayer = new Layer("test layer", 10, 10);
  45. Layer testLayer2 = new Layer("test layer", 10, 10);
  46. testLayer.SetPixel(new Coordinates(4, 4), testColor);
  47. testLayer2.SetPixel(new Coordinates(5, 5), testColor);
  48. ClipboardController.CopyToClipboard(
  49. new[] { testLayer, testLayer2 },
  50. new[] { new Coordinates(4, 4), new Coordinates(5, 5) },
  51. 10,
  52. 10);
  53. BitmapSource img = Clipboard.GetImage(); // Using default Clipboard get image to avoid false positives from faulty ClipboardController GetImage
  54. Assert.True(ClipboardController.IsImageInClipboard());
  55. Assert.NotNull(img);
  56. Assert.Equal(2, img.Width);
  57. Assert.Equal(2, img.Height);
  58. Surface bmp = new Surface(img);
  59. Assert.Equal(testColor, bmp.GetSRGBPixel(0, 0));
  60. Assert.Equal(testColor, bmp.GetSRGBPixel(1, 1));
  61. }
  62. [StaFact]
  63. public void TestThatClipboardControllerGetsCorrectImageInDibFormatFromClipboard()
  64. {
  65. Clipboard.Clear();
  66. using Surface bmp = new Surface(10, 10);
  67. bmp.SetSRGBPixel(4, 4, testColor);
  68. Clipboard.SetImage(bmp);
  69. Surface img = ClipboardController.GetImageFromClipboard();
  70. Assert.NotNull(img);
  71. Assert.Equal(10, img.Width);
  72. Assert.Equal(10, img.Height);
  73. Assert.Equal(testColor, bmp.GetPixel(4, 4));
  74. }
  75. [StaFact]
  76. public void TestThatClipboardControllerGetsCorrectImageInPngFormatFromClipboard()
  77. {
  78. Clipboard.Clear();
  79. Surface bmp = BitmapFactory.New(10, 10);
  80. bmp.SetPixel(4, 4, testColor);
  81. using (MemoryStream pngStream = new MemoryStream())
  82. {
  83. DataObject data = new DataObject();
  84. PngBitmapEncoder encoder = new PngBitmapEncoder();
  85. encoder.Frames.Add(BitmapFrame.Create(bmp));
  86. encoder.Save(pngStream);
  87. data.SetData("PNG", pngStream, false); // PNG, supports transparency
  88. Clipboard.SetDataObject(data, true);
  89. }
  90. Surface img = ClipboardController.GetImageFromClipboard();
  91. Assert.NotNull(img);
  92. Assert.Equal(10, img.Width);
  93. Assert.Equal(10, img.Height);
  94. Assert.Equal(testColor, bmp.GetPixel(4, 4));
  95. }
  96. [StaFact]
  97. public void TestThatClipboardControllerGetsCorrectImageInBitmapFormatFromClipboard()
  98. {
  99. Clipboard.Clear();
  100. Surface bmp = BitmapFactory.New(10, 10);
  101. bmp.SetPixel(4, 4, testColor);
  102. DataObject data = new DataObject();
  103. data.SetData(DataFormats.Bitmap, bmp, false); // PNG, supports transparency
  104. Clipboard.SetDataObject(data, true);
  105. Surface img = ClipboardController.GetImageFromClipboard();
  106. Assert.NotNull(img);
  107. Assert.Equal(10, img.Width);
  108. Assert.Equal(10, img.Height);
  109. Assert.Equal(testColor, bmp.GetPixel(4, 4));
  110. }
  111. }
  112. }