ClipboardControllerTests.cs 4.7 KB

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