ItemContainerGeneratorTests.cs 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // Copyright (c) The Perspex Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using System.Linq;
  4. using Perspex.Controls.Generators;
  5. using Xunit;
  6. namespace Perspex.Controls.UnitTests.Generators
  7. {
  8. public class ItemContainerGeneratorTests
  9. {
  10. [Fact]
  11. public void Materialize_Should_Create_Containers()
  12. {
  13. var items = new[] { "foo", "bar", "baz" };
  14. var owner = new Decorator();
  15. var target = new ItemContainerGenerator(owner);
  16. var containers = target.Materialize(0, items, null);
  17. var result = containers
  18. .Select(x => x.ContainerControl)
  19. .OfType<TextBlock>()
  20. .Select(x => x.Text)
  21. .ToList();
  22. Assert.Equal(items, result);
  23. }
  24. [Fact]
  25. public void ContainerFromIndex_Should_Return_Materialized_Containers()
  26. {
  27. var items = new[] { "foo", "bar", "baz" };
  28. var owner = new Decorator();
  29. var target = new ItemContainerGenerator(owner);
  30. var containers = target.Materialize(0, items, null).ToList();
  31. Assert.Equal(containers[0].ContainerControl, target.ContainerFromIndex(0));
  32. Assert.Equal(containers[1].ContainerControl, target.ContainerFromIndex(1));
  33. Assert.Equal(containers[2].ContainerControl, target.ContainerFromIndex(2));
  34. }
  35. [Fact]
  36. public void IndexFromContainer_Should_Return_Index()
  37. {
  38. var items = new[] { "foo", "bar", "baz" };
  39. var owner = new Decorator();
  40. var target = new ItemContainerGenerator(owner);
  41. var containers = target.Materialize(0, items, null).ToList();
  42. Assert.Equal(0, target.IndexFromContainer(containers[0].ContainerControl));
  43. Assert.Equal(1, target.IndexFromContainer(containers[1].ContainerControl));
  44. Assert.Equal(2, target.IndexFromContainer(containers[2].ContainerControl));
  45. }
  46. [Fact]
  47. public void Dematerialize_Should_Remove_Container()
  48. {
  49. var items = new[] { "foo", "bar", "baz" };
  50. var owner = new Decorator();
  51. var target = new ItemContainerGenerator(owner);
  52. var containers = target.Materialize(0, items, null).ToList();
  53. target.Dematerialize(1, 1);
  54. Assert.Equal(containers[0].ContainerControl, target.ContainerFromIndex(0));
  55. Assert.Equal(null, target.ContainerFromIndex(1));
  56. Assert.Equal(containers[2].ContainerControl, target.ContainerFromIndex(2));
  57. }
  58. [Fact]
  59. public void Dematerialize_Should_Return_Removed_Containers()
  60. {
  61. var items = new[] { "foo", "bar", "baz" };
  62. var owner = new Decorator();
  63. var target = new ItemContainerGenerator(owner);
  64. var containers = target.Materialize(0, items, null);
  65. var expected = target.Containers.Take(2).ToList();
  66. var result = target.Dematerialize(0, 2);
  67. Assert.Equal(expected, result);
  68. }
  69. [Fact]
  70. public void RemoveRange_Should_Alter_Successive_Container_Indexes()
  71. {
  72. var items = new[] { "foo", "bar", "baz" };
  73. var owner = new Decorator();
  74. var target = new ItemContainerGenerator(owner);
  75. var containers = target.Materialize(0, items, null).ToList();
  76. var removed = target.RemoveRange(1, 1).Single();
  77. Assert.Equal(containers[0].ContainerControl, target.ContainerFromIndex(0));
  78. Assert.Equal(containers[2].ContainerControl, target.ContainerFromIndex(1));
  79. Assert.Equal(containers[1], removed);
  80. }
  81. }
  82. }