| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- // Copyright (c) The Avalonia Project. All rights reserved.
- // Licensed under the MIT license. See licence.md file in the project root for full license information.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Avalonia.Controls.Generators;
- using Avalonia.Controls.Templates;
- using Xunit;
- namespace Avalonia.Controls.UnitTests.Generators
- {
- public class ItemContainerGeneratorTests
- {
- [Fact]
- public void Materialize_Should_Create_Containers()
- {
- var items = new[] { "foo", "bar", "baz" };
- var owner = new Decorator();
- var target = new ItemContainerGenerator(owner);
- var containers = Materialize(target, 0, items);
- var result = containers
- .Select(x => x.ContainerControl)
- .OfType<TextBlock>()
- .Select(x => x.Text)
- .ToList();
- Assert.Equal(items, result);
- }
- [Fact]
- public void ContainerFromIndex_Should_Return_Materialized_Containers()
- {
- var items = new[] { "foo", "bar", "baz" };
- var owner = new Decorator();
- var target = new ItemContainerGenerator(owner);
- var containers = Materialize(target, 0, items);
- Assert.Equal(containers[0].ContainerControl, target.ContainerFromIndex(0));
- Assert.Equal(containers[1].ContainerControl, target.ContainerFromIndex(1));
- Assert.Equal(containers[2].ContainerControl, target.ContainerFromIndex(2));
- }
- private IList<ItemContainerInfo> Materialize(
- IItemContainerGenerator generator,
- int index,
- string[] items)
- {
- var result = new List<ItemContainerInfo>();
- foreach (var item in items)
- {
- var container = generator.Materialize(index++, item, null);
- result.Add(container);
- }
- return result;
- }
- [Fact]
- public void IndexFromContainer_Should_Return_Index()
- {
- var items = new[] { "foo", "bar", "baz" };
- var owner = new Decorator();
- var target = new ItemContainerGenerator(owner);
- var containers = Materialize(target, 0, items);
- Assert.Equal(0, target.IndexFromContainer(containers[0].ContainerControl));
- Assert.Equal(1, target.IndexFromContainer(containers[1].ContainerControl));
- Assert.Equal(2, target.IndexFromContainer(containers[2].ContainerControl));
- }
- [Fact]
- public void Dematerialize_Should_Remove_Container()
- {
- var items = new[] { "foo", "bar", "baz" };
- var owner = new Decorator();
- var target = new ItemContainerGenerator(owner);
- var containers = Materialize(target, 0, items);
- target.Dematerialize(1, 1);
- Assert.Equal(containers[0].ContainerControl, target.ContainerFromIndex(0));
- Assert.Equal(null, target.ContainerFromIndex(1));
- Assert.Equal(containers[2].ContainerControl, target.ContainerFromIndex(2));
- }
- [Fact]
- public void Dematerialize_Should_Return_Removed_Containers()
- {
- var items = new[] { "foo", "bar", "baz" };
- var owner = new Decorator();
- var target = new ItemContainerGenerator(owner);
- var containers = Materialize(target, 0, items);
- var expected = target.Containers.Take(2).ToList();
- var result = target.Dematerialize(0, 2);
- Assert.Equal(expected, result);
- }
- [Fact]
- public void RemoveRange_Should_Alter_Successive_Container_Indexes()
- {
- var items = new[] { "foo", "bar", "baz" };
- var owner = new Decorator();
- var target = new ItemContainerGenerator(owner);
- var containers = Materialize(target, 0, items);
- var removed = target.RemoveRange(1, 1).Single();
- Assert.Equal(containers[0].ContainerControl, target.ContainerFromIndex(0));
- Assert.Equal(containers[2].ContainerControl, target.ContainerFromIndex(1));
- Assert.Equal(containers[1], removed);
- }
- }
- }
|