DocumentTests.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. using System;
  2. using System.Windows.Media;
  3. using PixiEditor.Models.Controllers;
  4. using PixiEditor.Models.DataHolders;
  5. using PixiEditor.Models.Enums;
  6. using PixiEditor.Models.Layers;
  7. using PixiEditor.Models.Position;
  8. using PixiEditor.ViewModels;
  9. using Xunit;
  10. namespace PixiEditorTests.ModelsTests.DataHoldersTests
  11. {
  12. [Collection("Application collection")]
  13. public class DocumentTests
  14. {
  15. [Theory]
  16. [InlineData(10, 10, 20, 20)]
  17. [InlineData(1, 2, 5, 8)]
  18. [InlineData(20, 20, 10, 10)] // TODO Anchor
  19. public void TestResizeCanvasResizesProperly(int oldWidth, int oldHeight, int newWidth, int newHeight)
  20. {
  21. Document document = new Document(oldWidth, oldHeight);
  22. document.ResizeCanvas(newWidth, newHeight, AnchorPoint.Top | AnchorPoint.Left);
  23. Assert.Equal(newHeight, document.Height);
  24. Assert.Equal(newWidth, document.Width);
  25. }
  26. [Theory]
  27. [InlineData(10, 10, 20, 20)]
  28. [InlineData(5, 8, 10, 16)]
  29. public void TestResizeWorks(int oldWidth, int oldHeight, int newWidth, int newHeight)
  30. {
  31. Document document = new Document(oldWidth, oldHeight);
  32. document.Resize(newWidth, newHeight);
  33. Assert.Equal(newHeight, document.Height);
  34. Assert.Equal(newWidth, document.Width);
  35. }
  36. [Theory]
  37. [InlineData(10, 10, 0, 0)]
  38. [InlineData(50, 50, 10, 49)]
  39. public void TestThatClipCanvasWorksForSingleLayer(int initialWidth, int initialHeight, int additionalPixelX, int additionalPixelY)
  40. {
  41. Document document = new Document(initialWidth, initialHeight);
  42. BitmapManager manager = new BitmapManager
  43. {
  44. ActiveDocument = document
  45. };
  46. manager.ActiveDocument.AddNewLayer("test");
  47. manager.ActiveLayer.SetPixel(
  48. new Coordinates(
  49. (int)Math.Ceiling(initialWidth / 2f),
  50. (int)Math.Ceiling(initialHeight / 2f)), Colors.Black);
  51. manager.ActiveLayer.SetPixel(new Coordinates(additionalPixelX, additionalPixelY), Colors.Black);
  52. document.ClipCanvas();
  53. Assert.Equal(manager.ActiveLayer.Width, document.Width);
  54. Assert.Equal(manager.ActiveLayer.Height, document.Height);
  55. }
  56. [Theory]
  57. [InlineData(10, 10, 0, 0)]
  58. [InlineData(50, 50, 15, 23)]
  59. [InlineData(3, 3, 1, 1)]
  60. [InlineData(1, 1, 0, 0)]
  61. public void TestThatClipCanvasWorksForMultipleLayers(int initialWidth, int initialHeight, int secondLayerPixelX, int secondLayerPixelY)
  62. {
  63. Document document = new Document(initialWidth, initialHeight);
  64. BitmapManager manager = new BitmapManager
  65. {
  66. ActiveDocument = document
  67. };
  68. manager.ActiveDocument.AddNewLayer("test");
  69. manager.ActiveLayer.SetPixel(
  70. new Coordinates(
  71. (int)Math.Ceiling(initialWidth / 2f),
  72. (int)Math.Ceiling(initialHeight / 2f)), Colors.Black); // Set pixel in center
  73. manager.ActiveDocument.AddNewLayer("test2");
  74. manager.ActiveLayer.SetPixel(new Coordinates(secondLayerPixelX, secondLayerPixelY), Colors.Black);
  75. document.ClipCanvas();
  76. int totalWidth = Math.Abs(manager.ActiveDocument.Layers[1].OffsetX +
  77. manager.ActiveDocument.Layers[1].Width - (manager.ActiveDocument.Layers[0].OffsetX +
  78. manager.ActiveDocument.Layers[0].Width)) + 1;
  79. int totalHeight = Math.Abs(manager.ActiveDocument.Layers[1].OffsetY +
  80. manager.ActiveDocument.Layers[1].Height - (manager.ActiveDocument.Layers[0].OffsetY +
  81. manager.ActiveDocument.Layers[0].Height)) + 1;
  82. Assert.Equal(totalWidth, document.Width);
  83. Assert.Equal(totalHeight, document.Height);
  84. }
  85. [Theory]
  86. [InlineData(10, 10)]
  87. [InlineData(11, 11)]
  88. [InlineData(25, 17)]
  89. public void TestThatCenterContentCentersContentForSingleLayer(int docWidth, int docHeight)
  90. {
  91. Document doc = new Document(docWidth, docHeight);
  92. BitmapManager manager = new BitmapManager
  93. {
  94. ActiveDocument = doc
  95. };
  96. manager.ActiveDocument.AddNewLayer("test");
  97. manager.ActiveLayer.SetPixel(new Coordinates(0, 0), Colors.Green);
  98. doc.CenterContent();
  99. Assert.Equal(Math.Floor(docWidth / 2f), manager.ActiveLayer.OffsetX);
  100. Assert.Equal(Math.Floor(docHeight / 2f), manager.ActiveLayer.OffsetY);
  101. }
  102. [Theory]
  103. [InlineData(10, 10)]
  104. [InlineData(11, 11)]
  105. [InlineData(25, 17)]
  106. public void TestThatCenterContentCentersContentForMultipleLayers(int docWidth, int docHeight)
  107. {
  108. Document doc = new Document(docWidth, docHeight);
  109. BitmapManager manager = new BitmapManager
  110. {
  111. ActiveDocument = doc
  112. };
  113. manager.ActiveDocument.AddNewLayer("test");
  114. manager.ActiveLayer.SetPixel(new Coordinates(0, 0), Colors.Green);
  115. manager.ActiveDocument.AddNewLayer("test2");
  116. manager.ActiveLayer.SetPixel(new Coordinates(1, 1), Colors.Green);
  117. foreach (var layer in manager.ActiveDocument.Layers)
  118. {
  119. layer.IsActive = true;
  120. }
  121. doc.CenterContent();
  122. int midWidth = (int)Math.Floor(docWidth / 2f);
  123. int midHeight = (int)Math.Floor(docHeight / 2f);
  124. Assert.Equal(midWidth - 1, manager.ActiveDocument.Layers[0].OffsetX);
  125. Assert.Equal(midHeight - 1, manager.ActiveDocument.Layers[0].OffsetY);
  126. Assert.Equal(midWidth, manager.ActiveDocument.Layers[1].OffsetX);
  127. Assert.Equal(midHeight, manager.ActiveDocument.Layers[1].OffsetY);
  128. }
  129. [Fact]
  130. public void TestThatSetNextActiveLayerSetsLayerBelow()
  131. {
  132. Document doc = new Document(10, 10);
  133. doc.Layers.Add(new PixiEditor.Models.Layers.Layer("Test"));
  134. doc.Layers.Add(new PixiEditor.Models.Layers.Layer("Test 2"));
  135. doc.SetMainActiveLayer(1);
  136. doc.SetNextLayerAsActive(1);
  137. Assert.False(doc.Layers[1].IsActive);
  138. Assert.True(doc.Layers[0].IsActive);
  139. }
  140. [Fact]
  141. public void TestThatAddNewLayerAddsUndoChange()
  142. {
  143. Document document = new Document(10, 10);
  144. document.AddNewLayer("Test");
  145. document.AddNewLayer("Test2");
  146. Assert.Single(document.UndoManager.UndoStack);
  147. }
  148. [Fact]
  149. public void TestThatAddNewLayerUndoProcessWorks()
  150. {
  151. Document document = new Document(10, 10);
  152. document.AddNewLayer("Test");
  153. document.AddNewLayer("Test2");
  154. document.UndoManager.Undo();
  155. Assert.Single(document.Layers);
  156. }
  157. [Fact]
  158. public void TestThatAddNewLayerRedoProcessWorks()
  159. {
  160. Document document = new Document(10, 10);
  161. document.AddNewLayer("Test");
  162. document.AddNewLayer("Test2");
  163. document.UndoManager.Undo();
  164. document.UndoManager.Redo();
  165. Assert.Equal(2, document.Layers.Count);
  166. }
  167. [Fact]
  168. public void TestThatRemoveLayerUndoProcessWorks()
  169. {
  170. Document document = new Document(10, 10);
  171. document.AddNewLayer("Test");
  172. document.AddNewLayer("Test2");
  173. document.RemoveLayer(1);
  174. document.UndoManager.Undo();
  175. Assert.Equal(2, document.Layers.Count);
  176. }
  177. [Fact]
  178. public void TestThatRemoveLayerRedoProcessWorks()
  179. {
  180. Document document = new Document(10, 10);
  181. document.AddNewLayer("Test");
  182. document.AddNewLayer("Test2");
  183. document.RemoveLayer(1);
  184. document.UndoManager.Undo();
  185. document.UndoManager.Redo();
  186. Assert.Single(document.Layers);
  187. }
  188. [Theory]
  189. [InlineData(2, 0, 1)]
  190. [InlineData(2, 1, -1)]
  191. [InlineData(3, 1, 1)]
  192. [InlineData(3, 2, -2)]
  193. [InlineData(10, 9, -5)]
  194. public void TestThatMoveLayerIndexByWorks(int layersAmount, int index, int amount)
  195. {
  196. Document document = new Document(10, 10);
  197. for (int i = 0; i < layersAmount; i++)
  198. {
  199. document.AddNewLayer("Layer " + i);
  200. }
  201. Guid oldGuid = document.Layers[index].LayerGuid;
  202. document.MoveLayerIndexBy(index, amount);
  203. Assert.Equal(oldGuid, document.Layers[index + amount].LayerGuid);
  204. }
  205. [Fact]
  206. public void TestThatMoveLayerIndexByUndoProcessWorks()
  207. {
  208. Document document = new Document(10, 10);
  209. document.AddNewLayer("Test");
  210. document.AddNewLayer("Test2");
  211. document.MoveLayerIndexBy(0, 1);
  212. document.UndoManager.Undo();
  213. Assert.Equal("Test2", document.Layers[1].Name);
  214. Assert.Equal("Test", document.Layers[0].Name);
  215. }
  216. [Fact]
  217. public void TestThatMoveLayerIndexByRedoProcessWorks()
  218. {
  219. Document document = new Document(10, 10);
  220. document.AddNewLayer("Test");
  221. document.AddNewLayer("Test2");
  222. document.MoveLayerIndexBy(0, 1);
  223. document.UndoManager.Undo();
  224. document.UndoManager.Redo();
  225. Assert.Equal("Test", document.Layers[1].Name);
  226. Assert.Equal("Test2", document.Layers[0].Name);
  227. }
  228. [StaFact]
  229. public void TestThatDocumentGetsAddedToRecentlyOpenedList()
  230. {
  231. ViewModelMain viewModel = Helpers.MockedViewModelMain();
  232. Document document = new Document(1, 1)
  233. {
  234. XamlAccesibleViewModel = viewModel
  235. };
  236. string testFilePath = @"C:\idk\somewhere\homework";
  237. document.DocumentFilePath = testFilePath;
  238. Assert.Contains(viewModel.FileSubViewModel.RecentlyOpened, x => x.FilePath == testFilePath);
  239. }
  240. [Fact]
  241. public void TestThatDupliacteLayerWorks()
  242. {
  243. const string layerName = "New Layer";
  244. Document document = new (10, 10);
  245. document.AddNewLayer(layerName);
  246. Layer duplicate = document.DuplicateLayer(0);
  247. Assert.Equal(document.Layers[1], duplicate);
  248. Assert.Equal(layerName + " (1)", duplicate.Name);
  249. Assert.True(duplicate.IsActive);
  250. }
  251. [Fact]
  252. public void TestThatCorrectLayerSuffixIsSet()
  253. {
  254. const string layerName = "New Layer";
  255. Document document = new (10, 10);
  256. document.AddNewLayer(layerName);
  257. document.AddNewLayer(layerName);
  258. document.AddNewLayer(layerName);
  259. Assert.Equal(layerName, document.Layers[0].Name);
  260. Assert.Equal(layerName + " (1)", document.Layers[1].Name);
  261. Assert.Equal(layerName + " (2)", document.Layers[2].Name);
  262. document.Layers.Add(new Layer(layerName + " (15)"));
  263. document.AddNewLayer(layerName);
  264. Assert.Equal(layerName + " (16)", document.Layers[4].Name);
  265. }
  266. }
  267. }