ItemContainerGeneratorTests.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // Copyright (c) The Avalonia 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;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using Avalonia.Controls.Generators;
  7. using Avalonia.Controls.Templates;
  8. using Xunit;
  9. namespace Avalonia.Controls.UnitTests.Generators
  10. {
  11. public class ItemContainerGeneratorTests
  12. {
  13. [Fact]
  14. public void Materialize_Should_Create_Containers()
  15. {
  16. var items = new[] { "foo", "bar", "baz" };
  17. var owner = new Decorator();
  18. var target = new ItemContainerGenerator(owner);
  19. var containers = Materialize(target, 0, items);
  20. var result = containers
  21. .Select(x => x.ContainerControl)
  22. .OfType<TextBlock>()
  23. .Select(x => x.Text)
  24. .ToList();
  25. Assert.Equal(items, result);
  26. }
  27. [Fact]
  28. public void ContainerFromIndex_Should_Return_Materialized_Containers()
  29. {
  30. var items = new[] { "foo", "bar", "baz" };
  31. var owner = new Decorator();
  32. var target = new ItemContainerGenerator(owner);
  33. var containers = Materialize(target, 0, items);
  34. Assert.Equal(containers[0].ContainerControl, target.ContainerFromIndex(0));
  35. Assert.Equal(containers[1].ContainerControl, target.ContainerFromIndex(1));
  36. Assert.Equal(containers[2].ContainerControl, target.ContainerFromIndex(2));
  37. }
  38. private IList<ItemContainerInfo> Materialize(
  39. IItemContainerGenerator generator,
  40. int index,
  41. string[] items)
  42. {
  43. var result = new List<ItemContainerInfo>();
  44. foreach (var item in items)
  45. {
  46. var container = generator.Materialize(index++, item, null);
  47. result.Add(container);
  48. }
  49. return result;
  50. }
  51. [Fact]
  52. public void IndexFromContainer_Should_Return_Index()
  53. {
  54. var items = new[] { "foo", "bar", "baz" };
  55. var owner = new Decorator();
  56. var target = new ItemContainerGenerator(owner);
  57. var containers = Materialize(target, 0, items);
  58. Assert.Equal(0, target.IndexFromContainer(containers[0].ContainerControl));
  59. Assert.Equal(1, target.IndexFromContainer(containers[1].ContainerControl));
  60. Assert.Equal(2, target.IndexFromContainer(containers[2].ContainerControl));
  61. }
  62. [Fact]
  63. public void Dematerialize_Should_Remove_Container()
  64. {
  65. var items = new[] { "foo", "bar", "baz" };
  66. var owner = new Decorator();
  67. var target = new ItemContainerGenerator(owner);
  68. var containers = Materialize(target, 0, items);
  69. target.Dematerialize(1, 1);
  70. Assert.Equal(containers[0].ContainerControl, target.ContainerFromIndex(0));
  71. Assert.Equal(null, target.ContainerFromIndex(1));
  72. Assert.Equal(containers[2].ContainerControl, target.ContainerFromIndex(2));
  73. }
  74. [Fact]
  75. public void Dematerialize_Should_Return_Removed_Containers()
  76. {
  77. var items = new[] { "foo", "bar", "baz" };
  78. var owner = new Decorator();
  79. var target = new ItemContainerGenerator(owner);
  80. var containers = Materialize(target, 0, items);
  81. var expected = target.Containers.Take(2).ToList();
  82. var result = target.Dematerialize(0, 2);
  83. Assert.Equal(expected, result);
  84. }
  85. [Fact]
  86. public void RemoveRange_Should_Alter_Successive_Container_Indexes()
  87. {
  88. var items = new[] { "foo", "bar", "baz" };
  89. var owner = new Decorator();
  90. var target = new ItemContainerGenerator(owner);
  91. var containers = Materialize(target, 0, items);
  92. var removed = target.RemoveRange(1, 1).Single();
  93. Assert.Equal(containers[0].ContainerControl, target.ContainerFromIndex(0));
  94. Assert.Equal(containers[2].ContainerControl, target.ContainerFromIndex(1));
  95. Assert.Equal(containers[1], removed);
  96. }
  97. }
  98. }